update it
This commit is contained in:
parent
ac4eb2be15
commit
3fb03e2a97
|
@ -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 (
|
||||
<Form
|
||||
visible={visible}
|
||||
title={(action === 'change') ? 'Edit Subscriber' : 'Create Subscriber'}
|
||||
title={(action === 'update') ? 'Edit Subscriber' : 'Create Subscriber'}
|
||||
schema={this.state.schema}
|
||||
uiSchema={this.state.uiSchema}
|
||||
isLoading={isLoading}
|
||||
formData={(action === 'change') ? this.props.formData : formData}
|
||||
formData={(action === 'update') ? this.props.formData : formData}
|
||||
validate={validate}
|
||||
onHide={onHide}
|
||||
onSubmit={onSubmit} />
|
||||
|
|
|
@ -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 {
|
|||
<Subscriber.List
|
||||
subscribers={data}
|
||||
onShow={documentHandler.actions.browser}
|
||||
onEdit={documentHandler.actions.change}
|
||||
onEdit={documentHandler.actions.update}
|
||||
onDelete={documentHandler.actions.delete}
|
||||
search={search}
|
||||
/>
|
||||
|
@ -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}
|
||||
/>
|
||||
<FloatingButton onClick={documentHandler.actions.add}/>
|
||||
<FloatingButton onClick={documentHandler.actions.create}/>
|
||||
<Document
|
||||
{ ...document }
|
||||
onHide={documentHandler.hide} />
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 }
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue