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 };
+ },
};