From e49ae84b97505b310106818db22c68a2b1ec0fa5 Mon Sep 17 00:00:00 2001 From: cyril lopez Date: Fri, 12 Jan 2018 17:35:00 +0100 Subject: [PATCH] Add OverlayBlocker to stm --- .../admin/src/containers/App/actions.js | 45 ++++++++++++------- .../admin/src/containers/App/constants.js | 6 ++- .../admin/src/containers/App/index.js | 6 ++- .../admin/src/containers/App/reducer.js | 13 ++++-- .../admin/src/containers/App/selectors.js | 13 +++++- .../admin/src/containers/HomePage/sagas.js | 28 ++++++++++-- 6 files changed, 85 insertions(+), 26 deletions(-) diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/App/actions.js b/packages/strapi-plugin-settings-manager/admin/src/containers/App/actions.js index 192122218e..8eb247cb3f 100755 --- a/packages/strapi-plugin-settings-manager/admin/src/containers/App/actions.js +++ b/packages/strapi-plugin-settings-manager/admin/src/containers/App/actions.js @@ -5,26 +5,14 @@ */ import { - MENU_FETCH, ENVIRONMENTS_FETCH, - MENU_FETCH_SUCCEEDED, ENVIRONMENTS_FETCH_SUCCEEDED, + FREEZE_APP, + MENU_FETCH_SUCCEEDED, + MENU_FETCH, + UNFREEZE_APP, } from './constants'; - -export function menuFetch() { - return { - type: MENU_FETCH, - }; -} - -export function fetchMenuSucceeded(menu) { - return { - type: MENU_FETCH_SUCCEEDED, - menu, - }; -} - export function environmentsFetch() { return { type: ENVIRONMENTS_FETCH, @@ -37,3 +25,28 @@ export function environmentsFetchSucceeded(environments) { environments, }; } + +export function freezeApp() { + return { + type: FREEZE_APP, + }; +} + +export function fetchMenuSucceeded(menu) { + return { + type: MENU_FETCH_SUCCEEDED, + menu, + }; +} + +export function menuFetch() { + return { + type: MENU_FETCH, + }; +} + +export function unfreezeApp() { + return { + type: UNFREEZE_APP, + }; +} diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/App/constants.js b/packages/strapi-plugin-settings-manager/admin/src/containers/App/constants.js index 9af5e8ea19..94e5bbabf6 100755 --- a/packages/strapi-plugin-settings-manager/admin/src/containers/App/constants.js +++ b/packages/strapi-plugin-settings-manager/admin/src/containers/App/constants.js @@ -4,7 +4,9 @@ * */ -export const MENU_FETCH = 'SettingsManager/App/MENU_FETCH'; export const ENVIRONMENTS_FETCH = 'SettingsManager/App/ENVIRONMENTS_FETCH'; -export const MENU_FETCH_SUCCEEDED = 'SettingsManager/App/MENU_FETCH_SUCCEEDED'; export const ENVIRONMENTS_FETCH_SUCCEEDED = 'SettingsManager/App/ENVIRONMENTS_FETCH_SUCCEEDED'; +export const FREEZE_APP = 'SettingsManager/App/FREEZE_APP'; +export const MENU_FETCH = 'SettingsManager/App/MENU_FETCH'; +export const MENU_FETCH_SUCCEEDED = 'SettingsManager/App/MENU_FETCH_SUCCEEDED'; +export const UNFREEZE_APP = 'SettingsManager/App/UNFREEZE_APP'; diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/App/index.js b/packages/strapi-plugin-settings-manager/admin/src/containers/App/index.js index 4df01e3935..26c30a5e22 100755 --- a/packages/strapi-plugin-settings-manager/admin/src/containers/App/index.js +++ b/packages/strapi-plugin-settings-manager/admin/src/containers/App/index.js @@ -19,9 +19,10 @@ import { pluginId } from 'app'; import injectSaga from 'utils/injectSaga'; import HomePage from 'containers/HomePage'; +import OverlayBlocker from 'components/OverlayBlocker'; import { menuFetch, environmentsFetch } from './actions'; -import { makeSelectLoading, makeSelectSections } from './selectors'; +import { makeSelectBlockApp, makeSelectLoading, makeSelectSections } from './selectors'; import styles from './styles.scss'; import saga from './sagas'; @@ -56,6 +57,7 @@ class App extends React.Component { render() { return (
+ @@ -71,6 +73,7 @@ App.contextTypes = { }; App.propTypes = { + blockApp: PropTypes.bool.isRequired, environmentsFetch: PropTypes.func.isRequired, history: PropTypes.object.isRequired, menuFetch: PropTypes.func.isRequired, @@ -88,6 +91,7 @@ export function mapDispatchToProps(dispatch) { } const mapStateToProps = createStructuredSelector({ + blockApp: makeSelectBlockApp(), loading: makeSelectLoading(), sections: makeSelectSections(), }); diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/App/reducer.js b/packages/strapi-plugin-settings-manager/admin/src/containers/App/reducer.js index 7a2e4b4eed..8f42bd3954 100755 --- a/packages/strapi-plugin-settings-manager/admin/src/containers/App/reducer.js +++ b/packages/strapi-plugin-settings-manager/admin/src/containers/App/reducer.js @@ -6,12 +6,15 @@ import { fromJS, List } from 'immutable'; import { - MENU_FETCH_SUCCEEDED, ENVIRONMENTS_FETCH_SUCCEEDED, + FREEZE_APP, + MENU_FETCH_SUCCEEDED, + UNFREEZE_APP, } from './constants'; /* eslint-disable new-cap */ const initialState = fromJS({ + blockApp: false, sections: List(), // eslint-disable-line new-cap environments: List(), loading: true, @@ -19,11 +22,15 @@ const initialState = fromJS({ function appReducer(state = initialState, action) { switch (action.type) { - case MENU_FETCH_SUCCEEDED: - return state.set('sections', List(action.menu.sections)).set('loading', false); case ENVIRONMENTS_FETCH_SUCCEEDED: return state .set('environments', List(action.environments.environments)); + case FREEZE_APP: + return state.set('blockApp', true); + case MENU_FETCH_SUCCEEDED: + return state.set('sections', List(action.menu.sections)).set('loading', false); + case UNFREEZE_APP: + return state.set('blockApp', false); default: return state; } diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/App/selectors.js b/packages/strapi-plugin-settings-manager/admin/src/containers/App/selectors.js index 832273de5c..5690c7d9b4 100755 --- a/packages/strapi-plugin-settings-manager/admin/src/containers/App/selectors.js +++ b/packages/strapi-plugin-settings-manager/admin/src/containers/App/selectors.js @@ -22,6 +22,11 @@ const selectLocationState = () => { }; }; +const makeSelectBlockApp = () => createSelector( + selectGlobalDomain(), + (globalSate) => globalSate.get('blockApp'), +); + const makeSelectSections = () => createSelector( selectGlobalDomain(), (globalSate) => globalSate.get('sections').toJS(), @@ -37,5 +42,11 @@ const makeSelectLoading = () => createSelector( (globalSate) => globalSate.get('loading'), ); -export { selectLocationState, makeSelectSections, makeSelectEnvironments, makeSelectLoading }; +export { + makeSelectBlockApp, + makeSelectEnvironments, + makeSelectLoading, + makeSelectSections, + selectLocationState, +}; export default selectGlobalDomain; diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/sagas.js b/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/sagas.js index 6c2155133d..2a32a1b5f0 100755 --- a/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/sagas.js +++ b/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/sagas.js @@ -2,6 +2,8 @@ import { LOCATION_CHANGE } from 'react-router-redux'; import { forEach, set, map, replace } from 'lodash'; import { call, take, put, fork, cancel, select, takeLatest } from 'redux-saga/effects'; + +import { freezeApp, unfreezeApp } from 'containers/App/actions'; import request from 'utils/request'; // selectors @@ -38,6 +40,8 @@ import { export function* editDatabase(action) { try { + yield put(freezeApp()); + const body = {}; forEach(action.data, (value, key) => { @@ -54,11 +58,13 @@ export function* editDatabase(action) { if (resp.ok) { strapi.notification.success('settings-manager.strapi.notification.success.databaseEdit'); + yield put(unfreezeApp()); yield put(databaseActionSucceeded()); } } catch(error) { const formErrors = map(error.response.payload.message, err => ({ target: err.target, errors: map(err.messages, mess => ({ id: `settings-manager.${mess.id}`})) })); + yield put(unfreezeApp()); yield put(databaseActionError(formErrors)); strapi.notification.error('settings-manager.strapi.notification.error'); } @@ -66,15 +72,18 @@ export function* editDatabase(action) { export function* deleteDatabase(action) { try { + yield put(freezeApp()); const opts = { method: 'DELETE' }; const requestUrl = `/settings-manager/configurations/databases/${action.databaseToDelete}/${action.endPoint}`; const resp = yield call(request, requestUrl, opts, true); if (resp.ok) { + yield put(unfreezeApp()); strapi.notification.success('settings-manager.strapi.notification.success.databaseDeleted'); } } catch(error) { + yield put(unfreezeApp()); yield put(databaseActionError([])); strapi.notification.error('settings-manager.strapi.notification.error'); } @@ -82,6 +91,7 @@ export function* deleteDatabase(action) { export function* deleteLanguage(action) { try { + yield put(freezeApp()); const opts = { method: 'DELETE', }; @@ -90,9 +100,11 @@ export function* deleteLanguage(action) { const resp = yield call(request, requestUrl, opts, true); if (resp.ok) { + yield put(unfreezeApp()); strapi.notification.success('settings-manager.strapi.notification.success.languageDelete'); } } catch(error) { + yield put(unfreezeApp()); yield put(languageActionError()); strapi.notification.error('settings-manager.strapi.notification.error'); } @@ -151,6 +163,8 @@ export function* fetchLanguages() { export function* postLanguage() { try { + yield put(freezeApp()); + const newLanguage = yield select(makeSelectModifiedData()); const body = { @@ -165,10 +179,12 @@ export function* postLanguage() { const resp = yield call(request, requestUrl, opts, true); if (resp.ok) { - strapi.notification.success('settings-manager.strapi.notification.success.languageAdd'); yield put(languageActionSucceeded()); + yield put(unfreezeApp()); + strapi.notification.success('settings-manager.strapi.notification.success.languageAdd'); } } catch(error) { + yield put(unfreezeApp()); yield put(languageActionError()); strapi.notification.error('settings-manager.strapi.notification.error'); } @@ -176,6 +192,7 @@ export function* postLanguage() { export function* postDatabase(action) { try { + yield put(freezeApp()); const body = {}; forEach(action.data, (value, key) => { @@ -191,6 +208,7 @@ export function* postDatabase(action) { const resp = yield call(request, requestUrl, opts, true); if (resp.ok) { + yield put(unfreezeApp()); yield put(databaseActionSucceeded()); strapi.notification.success('settings-manager.strapi.notification.success.databaseAdd'); } @@ -210,6 +228,7 @@ export function* postDatabase(action) { export function* settingsEdit(action) { try { + yield put(freezeApp()); // Show button loader yield put(setLoader()); @@ -221,13 +240,16 @@ export function* settingsEdit(action) { const resp = yield call(request, requestUrl, opts, true); if (resp.ok) { - strapi.notification.success('settings-manager.strapi.notification.success.settingsEdit'); yield put(editSettingsSucceeded()); yield put(unsetLoader()); + yield put(unfreezeApp()); + + strapi.notification.success('settings-manager.strapi.notification.success.settingsEdit'); } } catch(error) { - strapi.notification.error('settings-manager.strapi.notification.error'); yield put(unsetLoader()); + yield put(unfreezeApp()); + strapi.notification.error('settings-manager.strapi.notification.error'); } }