diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/Main/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/Main/index.js index 3512f49e6f..87cb5124e4 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/Main/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/Main/index.js @@ -13,7 +13,7 @@ import reducer from './reducer'; import saga from './saga'; import makeSelectMain from './selectors'; -function Main({ isLoading }) { +function Main({ isLoading, emitEvent }) { strapi.useInjectReducer({ key: 'main', reducer, pluginId }); strapi.useInjectSaga({ key: 'main', saga, pluginId }); @@ -21,17 +21,22 @@ function Main({ isLoading }) { return ; } + const renderRoute = props => ( + + ); + return ( ); } Main.propTypes = { + emitEvent: PropTypes.func.isRequired, isLoading: PropTypes.bool.isRequired, }; diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/actions.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/actions.js index 441b438203..4675bf1c83 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/actions.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/actions.js @@ -1,4 +1,11 @@ -import { GET_DATA, GET_DATA_SUCCEEDED, ON_CHANGE } from './constants'; +import { + GET_DATA, + GET_DATA_SUCCEEDED, + ON_CHANGE, + ON_RESET, + ON_SUBMIT, + SUBMIT_SUCCEEDED, +} from './constants'; export function getData() { return { @@ -22,3 +29,21 @@ export function onChange({ target: { name, value } }) { value, }; } + +export function onReset() { + return { + type: ON_RESET, + }; +} + +export function onSubmit() { + return { + type: ON_SUBMIT, + }; +} + +export function submitSucceeded() { + return { + type: SUBMIT_SUCCEEDED, + }; +} diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/constants.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/constants.js index 9b5e9cdb78..952e232e0d 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/constants.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/constants.js @@ -2,3 +2,6 @@ export const GET_DATA = 'ContentManager/SettingsView/GET_DATA'; export const GET_DATA_SUCCEEDED = 'ContentManager/SettingsView/GET_DATA_SUCCEEDED'; export const ON_CHANGE = 'ContentManager/SettingsView/ON_CHANGE'; +export const ON_RESET = 'ContentManager/SettingsView/ON_RESET'; +export const ON_SUBMIT = 'ContentManager/SettingsView/ON_SUBMIT'; +export const SUBMIT_SUCCEEDED = 'ContentManager/SettingsView/SUBMIT_SUCCEEDED'; diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/index.js index 816f70abd9..2c9688d2a3 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/index.js @@ -1,4 +1,4 @@ -import React, { memo, useEffect } from 'react'; +import React, { memo, useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators, compose } from 'redux'; @@ -8,6 +8,7 @@ import { InputsIndex as Input, LoadingIndicatorPage, PluginHeader, + PopUpWarning, } from 'strapi-helper-plugin'; import pluginId from '../../pluginId'; @@ -16,7 +17,7 @@ import Container from '../../components/Container'; import Block from '../../components/Block'; import Row from './Row'; -import { getData, onChange } from './actions'; +import { getData, onChange, onReset, onSubmit } from './actions'; import reducer from './reducer'; import saga from './saga'; import makeSelectSettingView from './selectors'; @@ -29,10 +30,23 @@ function SettingsView({ isLoading, modifiedData, onChange, + onReset, + onSubmit, + shouldToggleModalSubmit, }) { strapi.useInjectReducer({ key: 'settingsView', reducer, pluginId }); strapi.useInjectSaga({ key: 'settingsView', saga, pluginId }); + const [showWarningCancel, setWarningOpen] = useState(false); + const [showWarningSubmit, setWarningSubmitOpen] = useState(false); + const toggleWarningCancel = () => setWarningOpen(prevState => !prevState); + const toggleWarningSubmit = () => + setWarningSubmitOpen(prevState => !prevState); + useEffect(() => { + if (showWarningSubmit) { + toggleWarningSubmit(); + } + }, [shouldToggleModalSubmit]); useEffect(() => { if (isEmpty(initialData)) { getData(); @@ -50,13 +64,13 @@ function SettingsView({ id: 'cancelChanges', label: 'content-manager.popUpWarning.button.cancel', kind: 'secondary', - onClick: () => {}, + onClick: toggleWarningCancel, type: 'button', }, { kind: 'primary', label: 'content-manager.containers.Edit.submit', - onClick: () => {}, + onClick: toggleWarningSubmit, type: 'submit', }, ]; @@ -74,6 +88,33 @@ function SettingsView({ id: 'content-manager.containers.SettingsPage.pluginHeaderDescription', }} /> + onSubmit()} + /> + { + onReset(); + toggleWarningCancel(); + }} + /> false); case ON_CHANGE: return state.updateIn(['modifiedData', action.name], () => action.value); + case ON_RESET: + return state.update('modifiedData', () => state.get('initialData')); + case SUBMIT_SUCCEEDED: + return state + .update('initialData', () => state.get('modifiedData')) + .update('shouldToggleModalSubmit', v => !v); default: return state; } diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/saga.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/saga.js index 03874817c8..ba2795b08c 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/saga.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/saga.js @@ -1,10 +1,11 @@ -import { all, fork, put, call, takeLatest } from 'redux-saga/effects'; +import { all, fork, put, call, takeLatest, select } from 'redux-saga/effects'; import { request } from 'strapi-helper-plugin'; import pluginId from '../../pluginId'; -import { getDataSucceeded } from './actions'; -import { GET_DATA } from './constants'; +import { getDataSucceeded, submitSucceeded } from './actions'; +import { GET_DATA, ON_SUBMIT } from './constants'; +import { makeSelectModifiedData } from './selectors'; const getRequestUrl = path => `/${pluginId}/${path}`; @@ -18,13 +19,31 @@ export function* getData() { yield put(getDataSucceeded(generalSettings, groups, models)); } catch (err) { - console.log(err); + strapi.notification.error('content-manager.error.model.fetch'); + } +} + +export function* submit() { + try { + const body = yield select(makeSelectModifiedData()); + + yield call(request, getRequestUrl('fixtures/general-settings'), { + method: 'PUT', + body, + }); + + yield put(submitSucceeded()); + } catch (err) { + strapi.notification.error('notification.error'); } } function* defaultSaga() { try { - yield all([fork(takeLatest, GET_DATA, getData)]); + yield all([ + fork(takeLatest, GET_DATA, getData), + fork(takeLatest, ON_SUBMIT, submit), + ]); } catch (err) { // Do nothing } diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/selectors.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/selectors.js index ad5bf15f30..d0f72de4f4 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/selectors.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsView/selectors.js @@ -24,5 +24,12 @@ const makeSelectSettingView = () => } ); +const makeSelectModifiedData = () => + createSelector( + settingViewDomain(), + substate => { + return substate.get('modifiedData').toJS(); + } + ); export default makeSelectSettingView; -export { settingViewDomain }; +export { settingViewDomain, makeSelectModifiedData }; diff --git a/packages/strapi-plugin-content-manager/config/routes.json b/packages/strapi-plugin-content-manager/config/routes.json index 5081507ee2..f77abe75ff 100644 --- a/packages/strapi-plugin-content-manager/config/routes.json +++ b/packages/strapi-plugin-content-manager/config/routes.json @@ -16,6 +16,14 @@ "policies": [] } }, + { + "method": "PUT", + "path": "/fixtures/general-settings", + "handler": "ContentManagerFixtures.updateGeneralSettings", + "config": { + "policies": [] + } + }, { "method": "GET", "path": "/fixtures/groups", diff --git a/packages/strapi-plugin-content-manager/controllers/ContentManagerFixtures.js b/packages/strapi-plugin-content-manager/controllers/ContentManagerFixtures.js index 03e6fba8fe..8c4af0591c 100644 --- a/packages/strapi-plugin-content-manager/controllers/ContentManagerFixtures.js +++ b/packages/strapi-plugin-content-manager/controllers/ContentManagerFixtures.js @@ -47,4 +47,8 @@ module.exports = { ctx.body = { models }; }, + + updateGeneralSettings: ctx => { + ctx.body = { ok: true }; + }, };