From 17fd135ac1047e8c15c46edb4404fe93551a0745 Mon Sep 17 00:00:00 2001 From: cyril lopez Date: Mon, 15 Jan 2018 11:28:43 +0100 Subject: [PATCH] Add overlayBlocker when deleting a role in users plugin --- .../admin/src/components/List/index.js | 4 +--- .../admin/src/components/ListRow/index.js | 12 ++++-------- .../admin/src/containers/App/actions.js | 17 +++++++++++++++++ .../admin/src/containers/App/constants.js | 3 +++ .../admin/src/containers/App/index.js | 9 ++++++++- .../admin/src/containers/App/reducer.js | 12 +++++++++++- .../admin/src/containers/App/selectors.js | 13 ++++++++++--- .../admin/src/containers/HomePage/index.js | 2 -- .../admin/src/containers/HomePage/reducer.js | 4 +--- .../admin/src/containers/HomePage/saga.js | 8 +++++++- 10 files changed, 62 insertions(+), 22 deletions(-) diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/List/index.js b/packages/strapi-plugin-users-permissions/admin/src/components/List/index.js index 948e1d35b9..fb7191e4b4 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/components/List/index.js +++ b/packages/strapi-plugin-users-permissions/admin/src/components/List/index.js @@ -48,7 +48,7 @@ const generateListTitle = (data, settingType) => { } }; -function List({ data, deleteActionSucceeded, deleteData, noButton, onButtonClick, settingType }) { +function List({ data, deleteData, noButton, onButtonClick, settingType }) { return (
@@ -69,7 +69,6 @@ function List({ data, deleteActionSucceeded, deleteData, noButton, onButtonClick
    {map(data, item => ( this.props.deleteData(this.props.item, this.props.settingType); + handleDelete = () => { + this.props.deleteData(this.props.item, this.props.settingType); + this.setState({ showModalDelete: false }); + } render() { return ( @@ -176,7 +173,6 @@ ListRow.defaultProps = { }; ListRow.propTypes = { - deleteActionSucceeded: PropTypes.bool.isRequired, deleteData: PropTypes.func.isRequired, item: PropTypes.object, settingType: PropTypes.string, diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js index a5002ad023..8d6fdc3171 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js @@ -3,3 +3,20 @@ * App actions * */ + +import { + FREEZE_APP, + UNFREEZE_APP, +} from './constants'; + +export function freezeApp() { + return { + type: FREEZE_APP, + }; +} + +export function unfreezeApp() { + return { + type: UNFREEZE_APP, + }; +} diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js index f62c609507..8181110dba 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js @@ -3,3 +3,6 @@ * App constants * */ + +export const FREEZE_APP = 'UsersPermissions/App/FREEZE_APP'; +export const UNFREEZE_APP = 'UsersPermissions/App/UNFREEZE_APP'; diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js index 16efbef769..d3ede1b929 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js @@ -20,6 +20,9 @@ import AuthPage from 'containers/AuthPage'; import EditPage from 'containers/EditPage'; import HomePage from 'containers/HomePage'; import NotFoundPage from 'containers/NotFoundPage'; +import OverlayBlocker from 'components/OverlayBlocker'; + +import { makeSelectBlockApp } from './selectors'; class App extends React.Component { componentDidMount() { @@ -37,6 +40,7 @@ class App extends React.Component { render() { return (
    + @@ -55,6 +59,7 @@ App.contextTypes = { }; App.propTypes = { + blockApp: PropTypes.bool.isRequired, history: PropTypes.object.isRequired, location: PropTypes.object.isRequired, }; @@ -66,7 +71,9 @@ export function mapDispatchToProps(dispatch) { ); } -const mapStateToProps = createStructuredSelector({}); +const mapStateToProps = createStructuredSelector({ + blockApp: makeSelectBlockApp(), +}); // Wrap the component to inject dispatch and state into it const withConnect = connect(mapStateToProps, mapDispatchToProps); diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js index 38026c39cd..ab8fc9825b 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js @@ -5,11 +5,21 @@ */ import { fromJS } from 'immutable'; +import { + FREEZE_APP, + UNFREEZE_APP, +} from './constants'; -const initialState = fromJS({}); +const initialState = fromJS({ + blockApp: false, +}); function appReducer(state = initialState, action) { switch (action.type) { + case FREEZE_APP: + return state.set('blockApp', true); + case UNFREEZE_APP: + return state.set('blockApp', false); default: return state; } diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js index 2393a073cd..b74dd3ebf5 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js @@ -1,9 +1,16 @@ -// import { createSelector } from 'reselect'; +import { createSelector } from 'reselect'; /** * Direct selector to the list state domain */ -// const selectGlobalDomain = () => state => state.get('global'); +const selectGlobalDomain = () => state => state.get('global'); -export {}; +const makeSelectBlockApp = () => createSelector( + selectGlobalDomain(), + (globalState) => globalState.get('blockApp'), +); + +export { + makeSelectBlockApp, +}; diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js index 1f579509be..10ee81114f 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js @@ -116,7 +116,6 @@ export class HomePage extends React.Component { : ( list.splice(action.indexDataToDelete, 1)) .set('deleteEndPoint', '') - .set('dataToDelete', Map({})) - .set('deleteActionSucceeded', !state.get('deleteActionSucceeded')); + .set('dataToDelete', Map({})); case FETCH_DATA_SUCCEEDED: return state.set('data', List(action.data)); case ON_CHANGE: diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js index 525318b740..a844897dec 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js @@ -1,6 +1,9 @@ import { LOCATION_CHANGE } from 'react-router-redux'; import { findIndex } from 'lodash'; import { takeLatest, put, fork, take, cancel, select, call } from 'redux-saga/effects'; + +import { freezeApp, unfreezeApp } from 'containers/App/actions'; + import request from 'utils/request'; import { @@ -8,6 +11,7 @@ import { fetchDataSucceeded, setForm, } from './actions'; + import { DELETE_DATA, FETCH_DATA, @@ -30,17 +34,19 @@ export function* dataDelete() { const endPointAPI = yield select(makeSelectDeleteEndPoint()); if (indexDataToDelete !== -1) { + yield put(freezeApp()); const id = dataToDelete.id; const requestURL = `/users-permissions/${endPointAPI}/${id}`; - // TODO watchServerRestart const response = yield call(request, requestURL, { method: 'DELETE' }, true); if (response.ok) { yield put(deleteDataSucceeded(indexDataToDelete)); + yield put(unfreezeApp()); strapi.notification.success('users-permissions.notification.success.delete'); } } } catch(err) { + yield put(unfreezeApp()); strapi.notification.error('users-permissions.notification.error.delete'); } }