diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js index 4e9eb7afdc..798ea607e6 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js @@ -17,6 +17,7 @@ import cn from 'classnames'; // ./node_modules/strapi-helper-plugin/lib/src // or strapi/packages/strapi-helper-plugin/lib/src import BackHeader from 'components/BackHeader'; +import LoadingIndicator from 'components/LoadingIndicator'; import PluginHeader from 'components/PluginHeader'; // Plugin's components @@ -108,7 +109,7 @@ export class EditPage extends React.Component { * @return {[type]} [description] */ getLayout = () => ( - bindLayout.call(this, this.props.editPage.layout) + bindLayout.call(this, get(this.props.editPage, ['layout', this.getModelName()], {})) ) /** @@ -150,6 +151,14 @@ export class EditPage extends React.Component { get(this.props.schema, ['plugins', this.getSource(), this.getModelName()]) : get(this.props.schema, [this.getModelName()]); + getPluginHeaderTitle = () => { + if (this.isCreating()) { + return toString(this.props.editPage.pluginHeaderTitle); + } + + return this.props.match.params.id; + } + /** * Retrieve the model's source * @return {String} @@ -236,6 +245,7 @@ export class EditPage extends React.Component { kind: 'secondary', onClick: this.props.onCancel, type: 'button', + disabled: this.showLoaders(), }, { kind: 'primary', @@ -244,10 +254,17 @@ export class EditPage extends React.Component { type: 'submit', loader: this.props.editPage.showLoader, style: this.props.editPage.showLoader ? { marginRight: '18px' } : {}, + disabled: this.showLoaders(), }, ] ); + showLoaders = () => { + const { editPage: { isLoading, layout } } = this.props; + + return isLoading && !this.isCreating() || isLoading && get(layout, this.getModelName()) === undefined; + } + render() { const { editPage } = this.props; @@ -258,24 +275,28 @@ export class EditPage extends React.Component {
- + {this.showLoaders() ? ( + + ) : ( + + )}
{!this.isRelationComponentNull() && ( @@ -360,3 +381,5 @@ export default compose( withSaga, withConnect, )(EditPage); + + diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/reducer.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/reducer.js index a6c68d758f..a31d78605d 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/reducer.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/reducer.js @@ -27,7 +27,8 @@ const initialState = fromJS({ isCreating: false, id: '', initialRecord: Map({}), - layout: Map({}), + isLoading: true, + layout: fromJS({}), modelName: '', pluginHeaderTitle: 'New Entry', record: Map({}), @@ -44,11 +45,14 @@ function editPageReducer(state = initialState, action) { case GET_DATA_SUCCEEDED: return state .update('id', () => action.id) + .update('isLoading', () => false) .update('initialRecord', () => Map(action.data)) .update('pluginHeaderTitle', () => action.pluginHeaderTitle) .update('record', () => Map(action.data)); case GET_LAYOUT_SUCCEEDED: - return state.update('layout', () => Map(action.layout)); + return state + .update('isLoading', () => false) + .updateIn(['layout', state.get('modelName')], () => Map(action.layout)); case INIT_MODEL_PROPS: return state .update('formValidations', () => List(action.formValidations)) @@ -63,7 +67,7 @@ function editPageReducer(state = initialState, action) { .update('record', () => state.get('initialRecord')) .update('resetProps', (v) => v = !v); case RESET_PROPS: - return initialState; + return initialState.update('layout', () => state.get('layout')); case SET_FILE_RELATIONS: return state.set('fileRelations', List(action.fileRelations)); case SET_FORM_ERRORS: diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/saga.js b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/saga.js index 344a158b77..32497c9870 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/saga.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/saga.js @@ -99,6 +99,7 @@ export function* dataDelete({ id, modelName, source }) { export function* dataDeleteAll({ entriesToDelete, model, source }) { try { const params = Object.assign(entriesToDelete, source !== undefined ? { source } : {}); + yield call(request, `/content-manager/explorer/deleteAll/${model}`, { method: 'DELETE', params,