From 3fb03e2a971b75fc1fa4aadb7cdf28ee907c8c5a Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Fri, 30 Jun 2017 22:42:24 +0900 Subject: [PATCH] update it --- webui/src/components/Subscriber/Edit.js | 6 ++-- webui/src/containers/Subscriber/Collection.js | 14 ++++----- webui/src/containers/Subscriber/Document.js | 30 +++++++++++++------ webui/src/modules/crud/actions.js | 8 +++++ webui/src/modules/crud/reducers.js | 5 ++++ webui/src/modules/crud/selectors.js | 23 ++++++++++++++ 6 files changed, 67 insertions(+), 19 deletions(-) diff --git a/webui/src/components/Subscriber/Edit.js b/webui/src/components/Subscriber/Edit.js index 093bc1d701..5f630d016c 100644 --- a/webui/src/components/Subscriber/Edit.js +++ b/webui/src/components/Subscriber/Edit.js @@ -215,7 +215,7 @@ class Edit extends Component { uiSchema }; - if (action === 'change') { + if (action === 'update') { state = { ...state, uiSchema : { @@ -277,11 +277,11 @@ class Edit extends Component { return (
diff --git a/webui/src/containers/Subscriber/Collection.js b/webui/src/containers/Subscriber/Collection.js index 2c7221e644..b7ee21bc45 100644 --- a/webui/src/containers/Subscriber/Collection.js +++ b/webui/src/containers/Subscriber/Collection.js @@ -75,13 +75,13 @@ class Collection extends Component { }) }, actions: { - add: () => { - this.documentHandler.show('add'); + create: () => { + this.documentHandler.show('create'); }, browser: (imsi) => { }, - change: (imsi) => { - this.documentHandler.show('change', { imsi }); + update: (imsi) => { + this.documentHandler.show('update', { imsi }); }, delete: (imsi) => { const { dispatch } = this.props @@ -120,7 +120,7 @@ class Collection extends Component { @@ -129,9 +129,9 @@ class Collection extends Component { visible={!isLoading && !data.length} title="ADD A SUBSCRIBER" body="You have no subscribers... yet!" - onTitle={documentHandler.actions.add} + onTitle={documentHandler.actions.create} /> - + diff --git a/webui/src/containers/Subscriber/Document.js b/webui/src/containers/Subscriber/Document.js index 9734e9b1d6..62e28a6a34 100644 --- a/webui/src/containers/Subscriber/Document.js +++ b/webui/src/containers/Subscriber/Document.js @@ -8,7 +8,15 @@ import { createSubscriber, updateSubscriber } from 'modules/crud/subscriber'; -import { select } from 'modules/crud/selectors'; + +import { + clearActionStatus +} from 'modules/crud/actions'; + +import { + select, + selectActionStatus +} from 'modules/crud/selectors'; import { Subscriber } from 'components'; @@ -29,18 +37,23 @@ class Document extends Component { } componentWillReceiveProps(nextProps) { - const { subscriber } = nextProps - const { dispatch } = this.props + const { subscriber, status } = nextProps + const { dispatch, action, onHide } = this.props if (subscriber.needsFetch) { dispatch(subscriber.fetch) } + + if (status.response) { + dispatch(clearActionStatus('subscribers', action)); + onHide(); + } } validate = (formData, errors) => { const { subscribers, action } = this.props; const { imsi } = formData; - if (action === 'add' && subscribers && subscribers.data && + if (action === 'create' && subscribers && subscribers.data && subscribers.data.filter(subscriber => subscriber.imsi === imsi).length > 0) { errors.imsi.addError(`'${imsi}' is duplicated`); } @@ -50,15 +63,13 @@ class Document extends Component { handleSubmit = (formData) => { const { dispatch, action } = this.props; - if (action === 'add') { + if (action === 'create') { dispatch(createSubscriber({}, formData)); - } else if (action === 'change') { + } else if (action === 'update') { dispatch(updateSubscriber(formData.imsi, {}, formData)); } else { throw new Error(`Action type '${action}' is invalid.`); } - console.log(formData); - this.props.onHide(); } render() { @@ -95,7 +106,8 @@ class Document extends Component { Document = connect( (state, props) => ({ subscribers: select(fetchSubscribers(), state.crud), - subscriber: select(fetchSubscriber(props.imsi), state.crud) + subscriber: select(fetchSubscriber(props.imsi), state.crud), + status: selectActionStatus('subscribers', state.crud, props.action) }) )(Document); diff --git a/webui/src/modules/crud/actions.js b/webui/src/modules/crud/actions.js index 1ed1b24e61..0b510297ea 100644 --- a/webui/src/modules/crud/actions.js +++ b/webui/src/modules/crud/actions.js @@ -14,6 +14,7 @@ export const CRUD = { DELETE: 'crud/DELETE', DELETE_SUCCESS: 'crud/DELETE_SUCCESS', DELETE_FAILURE: 'crud/DELETE_FAILURE', + CLEAR_ACTION_STATUS: 'crud/CLEAR_ACTION_STATUS', }; export const fetchCollection = (model, url, params = {}, options = {}) => { @@ -110,4 +111,11 @@ export const deleteDocument = (model, id, url, params = {}, options = {}) => { params } } +} + +export const clearActionStatus = (model, action) => { + return { + type: CRUD.CLEAR_ACTION_STATUS, + payload: { model, action } + } } \ No newline at end of file diff --git a/webui/src/modules/crud/reducers.js b/webui/src/modules/crud/reducers.js index de59d7a4a9..77a8702f55 100644 --- a/webui/src/modules/crud/reducers.js +++ b/webui/src/modules/crud/reducers.js @@ -130,6 +130,8 @@ function actionStatusReducer(state = actionStatusInitialState, action) { const idProperty = action.meta ? action.meta.idProperty : '_id'; const id = action.meta ? action.meta.id : undefined; switch(action.type) { + case CRUD.CLEAR_ACTION_STATUS: + return state.set(action.payload.action, fromJS({})) case CRUD.CREATE: return state.set('create', fromJS({ pending: true, @@ -221,6 +223,9 @@ function crud(state = initialState, action) { (s) => collectionsReducer(s, action)) .updateIn([action.meta.model, 'actionStatus'], (s) => actionStatusReducer(s, action)) + case CRUD.CLEAR_ACTION_STATUS: + return state.updateIn([action.payload.model, 'actionStatus'], + (s) => actionStatusReducer(s, action)) default: return state; } diff --git a/webui/src/modules/crud/selectors.js b/webui/src/modules/crud/selectors.js index 2a9a0d0028..e3197a23ff 100644 --- a/webui/src/modules/crud/selectors.js +++ b/webui/src/modules/crud/selectors.js @@ -114,4 +114,27 @@ export function select(action, crud) { } selection.fetch = action; return selection; +} + +export function selectActionStatus(modelName, crud, action) { + const rawStatus = (crud.getIn([modelName, 'actionStatus', action]) || fromJS({})).toJS(); + const { pending = false, id = null, isSuccess = null, payload = null } = rawStatus; + + if (pending === true) { + return { id, pending } + } + + if (isSuccess === true) { + return { + id, + pending, + response: payload + } + } + + return { + id, + pending, + error: payload + } } \ No newline at end of file