From d3ea25e7006ecab2660c0cf2fb73e49a13d689be Mon Sep 17 00:00:00 2001 From: soupette Date: Thu, 11 Jul 2019 11:35:18 +0200 Subject: [PATCH] Init Edit view --- .../admin/src/containers/EditView/index.js | 130 +++++++++++++++++- .../admin/src/containers/EditView/init.js | 5 + .../admin/src/containers/EditView/reducer.js | 23 ++++ .../admin/src/containers/ListView/index.js | 2 - .../admin/src/containers/Main/index.js | 41 +++--- .../src/containers/SettingsView/index.js | 22 +-- .../admin/src/translations/en.json | 1 + .../admin/src/translations/fr.json | 1 + .../controllers/ContentManagerFixtures.js | 2 +- 9 files changed, 185 insertions(+), 42 deletions(-) create mode 100644 packages/strapi-plugin-content-manager/admin/src/containers/EditView/init.js create mode 100644 packages/strapi-plugin-content-manager/admin/src/containers/EditView/reducer.js diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js index c161f6dfae..c396e1aee1 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/index.js @@ -1,7 +1,129 @@ -import React from 'react'; +import React, { memo, useEffect, useReducer } from 'react'; +import PropTypes from 'prop-types'; +import { get } from 'lodash'; +import { + getQueryParameters, + LoadingIndicatorPage, + PluginHeader, + request, + templateObject, +} from 'strapi-helper-plugin'; +import pluginId from '../../pluginId'; -function EditView() { - return
Coming soon
; +import Container from '../../components/Container'; + +import init from './init'; +import reducer, { initialState } from './reducer'; + +const getRequestUrl = path => `/${pluginId}/explorer/${path}`; + +function EditView({ + layouts, + location: { search }, + match: { + params: { slug, id }, + }, +}) { + const [reducerState, dispatch] = useReducer(reducer, initialState, () => + init(initialState) + ); + const layout = get(layouts, [slug], {}); + const displayedFieldNameInHeader = get( + layout, + ['settings', 'mainField'], + 'id' + ); + const state = reducerState.toJS(); + const { initialData, isLoading, isSubmitting } = state; + const isCreatingEntry = id === 'create'; + const source = getQueryParameters(search, 'source'); + const shouldShowLoader = !isCreatingEntry && isLoading; + + useEffect(() => { + const fetchData = async () => { + const data = await request(getRequestUrl(`${slug}/${id}`), { + method: 'GET', + params: { source }, + }); + + dispatch({ + type: 'GET_DATA_SUCCEEDED', + data, + }); + }; + + if (!isCreatingEntry) { + fetchData(); + } + }, [id, isCreatingEntry, slug, source]); + + if (shouldShowLoader) { + return ; + } + + const handleSubmit = e => { + e.preventDefault(); + }; + + const pluginHeaderTitle = isCreatingEntry + ? { id: `${pluginId}.containers.Edit.pluginHeader.title.new` } + : templateObject({ mainField: displayedFieldNameInHeader }, initialData) + .mainField; + + return ( + +
+ {}, + type: 'button', + disabled: isSubmitting, // TODO STATE WHEN SUBMITING + }, + { + kind: 'primary', + label: `${pluginId}.containers.Edit.submit`, + type: 'submit', + loader: isSubmitting, + style: isSubmitting + ? { marginRight: '18px', flexGrow: 2 } + : { flexGrow: 2 }, + disabled: isSubmitting, // TODO STATE WHEN SUBMITING + }, + ]} + subActions={ + isCreatingEntry + ? [] + : [ + { + label: 'app.utils.delete', + kind: 'delete', + onClick: () => {}, + type: 'button', + disabled: isSubmitting, // TODO STATE WHEN SUBMITING + }, + ] + } + title={pluginHeaderTitle} + /> + +
+ ); } -export default EditView; +EditView.propTypes = { + layouts: PropTypes.object, + location: PropTypes.shape({ + search: PropTypes.string, + }), + match: PropTypes.shape({ + params: PropTypes.shape({ + id: PropTypes.string.isRequired, + slug: PropTypes.string.isRequired, + }), + }), +}; + +export default memo(EditView); diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditView/init.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/init.js new file mode 100644 index 0000000000..18c17c07c6 --- /dev/null +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/init.js @@ -0,0 +1,5 @@ +function init(initialState) { + return initialState; +} + +export default init; diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditView/reducer.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/reducer.js new file mode 100644 index 0000000000..1e4f1fefc2 --- /dev/null +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditView/reducer.js @@ -0,0 +1,23 @@ +import { fromJS } from 'immutable'; + +const initialState = fromJS({ + initialData: {}, + isLoading: true, + modifiedData: {}, + isSubmitting: false, +}); + +function reducer(state, action) { + switch (action.type) { + case 'GET_DATA_SUCCEEDED': + return state + .update('isLoading', () => false) + .update('initialData', () => fromJS(action.data)) + .update('modifiedData', () => fromJS(action.data)); + default: + return state; + } +} + +export default reducer; +export { initialState }; diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/ListView/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/ListView/index.js index dd7f371eb5..8d7bf6e783 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/ListView/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/ListView/index.js @@ -145,7 +145,6 @@ function ListView({ return { ...getMetaDatas([label, 'list']), name: label }; }); }; - const handleChangeListLabels = ({ name, value }) => { const currentSort = getSearchParams()._sort; @@ -187,7 +186,6 @@ function ListView({ setIdToDelete(id); toggleModalDelete(); }; - const handleSubmit = (filters = []) => { emitEvent('didFilterEntries'); toggleFilterPickerState(); 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 a0fa1ac74b..6b163a0e1b 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 @@ -38,31 +38,24 @@ function Main({ emitEvent, getLayout, layouts, location: { pathname } }) { const renderRoute = (props, Component) => ( ); + const routes = [ + { + path: 'ctm-configurations/models/:name/:settingType', + comp: SettingViewModel, + }, + { path: 'ctm-configurations/groups/:name', comp: SettingViewGroup }, + { path: 'ctm-configurations/:type', comp: SettingsView }, + { path: ':slug/:id', comp: EditView }, + { path: ':slug', comp: ListView }, + ].map(({ path, comp }) => ( + renderRoute(props, comp)} + /> + )); - return ( - - renderRoute(props, SettingViewModel)} - /> - - renderRoute(props, SettingsView)} - /> - renderRoute(props, EditView)} - /> - renderRoute(props, ListView)} - /> - - ); + return {routes}; } Main.propTypes = { 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 627f712335..38bcd3e112 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 @@ -106,17 +106,17 @@ function SettingsView({ actions={getPluginHeaderActions()} title="Content Manager" description={{ - id: 'content-manager.containers.SettingsPage.pluginHeaderDescription', + id: `${pluginId}.containers.SettingsPage.pluginHeaderDescription`, }} /> onSubmit()} @@ -125,10 +125,10 @@ function SettingsView({ isOpen={showWarningCancel} toggleModal={toggleWarningCancel} content={{ - title: 'content-manager.popUpWarning.title', - message: 'content-manager.popUpWarning.warning.cancelAllSettings', - cancel: 'content-manager.popUpWarning.button.cancel', - confirm: 'content-manager.popUpWarning.button.confirm', + title: `${pluginId}.popUpWarning.title`, + message: `${pluginId}.popUpWarning.warning.cancelAllSettings`, + cancel: `${pluginId}.popUpWarning.button.cancel`, + confirm: `${pluginId}.popUpWarning.button.confirm`, }} popUpWarningType="danger" onConfirm={() => { @@ -138,8 +138,8 @@ function SettingsView({ />
diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/en.json b/packages/strapi-plugin-content-manager/admin/src/translations/en.json index c3148963d9..b7f152d73d 100644 --- a/packages/strapi-plugin-content-manager/admin/src/translations/en.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/en.json @@ -33,6 +33,7 @@ "components.TableEmpty.withSearch": "There is no {contentType} corresponding to the search ({search})...", "components.TableEmpty.withoutFilter": "There is no {contentType}...", "containers.Edit.addAnItem": "Add an item...", + "containers.Edit.pluginHeader.title.new": "Create an Entry", "containers.Edit.clickToJump": "Click to jump to the entry", "containers.Edit.delete": "Delete", "containers.Edit.editing": "Editing...", diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/fr.json b/packages/strapi-plugin-content-manager/admin/src/translations/fr.json index 69895fc23f..fea034e6d9 100644 --- a/packages/strapi-plugin-content-manager/admin/src/translations/fr.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/fr.json @@ -31,6 +31,7 @@ "components.TableEmpty.withSearch": "Aucun {contentType} n'a été trouvé avec cette recherche ({search})...", "components.TableEmpty.withoutFilter": "Aucun {contentType} n'a été trouvé...", "containers.Edit.addAnItem": "Ajouter un élément...", + "containers.Edit.pluginHeader.title.new": "Créer un document", "containers.Edit.clickToJump": "Cliquer pour voir l'entrée", "containers.Edit.delete": "Supprimer", "containers.Edit.editing": "Édition en cours...", diff --git a/packages/strapi-plugin-content-manager/controllers/ContentManagerFixtures.js b/packages/strapi-plugin-content-manager/controllers/ContentManagerFixtures.js index d943fc9d1c..cb7040860e 100644 --- a/packages/strapi-plugin-content-manager/controllers/ContentManagerFixtures.js +++ b/packages/strapi-plugin-content-manager/controllers/ContentManagerFixtures.js @@ -256,7 +256,7 @@ module.exports = { }, }, settings: { - mainField: 'id', + mainField: 'title', defaultSortBy: 'id', defaultSortOrder: 'ASC', searchable: true,