From feaa7f0159c18d6f1ea334fcdd1f39f50d8b5890 Mon Sep 17 00:00:00 2001 From: Virginie Ky Date: Wed, 18 Dec 2019 18:13:24 +0100 Subject: [PATCH] EditView Setup --- .../containers/Webhooks/EditView/Wrapper.js | 11 ++ .../src/containers/Webhooks/EditView/index.js | 107 +++++++++++++++++- .../containers/Webhooks/EditView/reducer.js | 22 ++++ .../src/containers/Webhooks/ListView/index.js | 6 +- .../admin/src/translations/en.json | 3 + 5 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 packages/strapi-admin/admin/src/containers/Webhooks/EditView/Wrapper.js create mode 100644 packages/strapi-admin/admin/src/containers/Webhooks/EditView/reducer.js diff --git a/packages/strapi-admin/admin/src/containers/Webhooks/EditView/Wrapper.js b/packages/strapi-admin/admin/src/containers/Webhooks/EditView/Wrapper.js new file mode 100644 index 0000000000..20342fd131 --- /dev/null +++ b/packages/strapi-admin/admin/src/containers/Webhooks/EditView/Wrapper.js @@ -0,0 +1,11 @@ +/** + * + * Wrapper + * + */ + +import styled from 'styled-components'; + +const Wrapper = styled.div``; + +export default Wrapper; diff --git a/packages/strapi-admin/admin/src/containers/Webhooks/EditView/index.js b/packages/strapi-admin/admin/src/containers/Webhooks/EditView/index.js index 0ff5f377e0..05fcb0d8fc 100644 --- a/packages/strapi-admin/admin/src/containers/Webhooks/EditView/index.js +++ b/packages/strapi-admin/admin/src/containers/Webhooks/EditView/index.js @@ -4,13 +4,114 @@ * */ -import React from 'react'; +import React, { useEffect, useReducer } from 'react'; +import { useLocation } from 'react-router-dom'; +import { isEmpty, difference } from 'lodash'; +import { Header } from '@buffetjs/custom'; +import { request, useGlobalContext } from 'strapi-helper-plugin'; + +import Wrapper from './Wrapper'; + +import reducer, { initialState } from './reducer'; function EditView() { + const { formatMessage } = useGlobalContext(); + const [reducerState, dispatch] = useReducer(reducer, initialState); + const location = useLocation(); + + const { modifiedWebhook, initialWebhook } = reducerState.toJS(); + + const { name } = modifiedWebhook; + + const id = location.pathname.split('/')[3]; + const isCreatingWebhook = id === 'create'; + + useEffect(() => { + if (!isCreatingWebhook) { + fetchData(); + } + }, [fetchData, isCreatingWebhook]); + + const fetchData = async () => { + try { + const { data } = await request(`/admin/webhooks/${id}`, { + method: 'GET', + }); + + dispatch({ + type: 'GET_DATA_SUCCEEDED', + data, + }); + } catch (err) { + if (err.code !== 20) { + strapi.notification.error('notification.error'); + } + } + }; + + // Header props + const headerTitle = isCreatingWebhook + ? formatMessage({ + id: `Settings.webhooks.create`, + }) + : name; + + const actionsAreDisabled = isEmpty( + difference(initialWebhook, modifiedWebhook) + ); + + const actions = [ + { + onClick: () => {}, + color: 'primary', + disabled: actionsAreDisabled, + type: 'button', + title: formatMessage({ + id: `Settings.webhooks.trigger`, + }), + style: { + paddingRight: 15, + paddingLeft: 15, + }, + }, + { + onClick: () => {}, + color: 'cancel', + disabled: actionsAreDisabled, + type: 'button', + title: formatMessage({ + id: `app.components.Button.reset`, + }), + style: { + paddingRight: 20, + paddingLeft: 20, + }, + }, + { + onClick: () => {}, + color: 'success', + disabled: actionsAreDisabled, + type: 'submit', + title: formatMessage({ + id: `app.components.Button.save`, + }), + style: { + minWidth: 140, + }, + }, + ]; + const headerProps = { + title: { + label: headerTitle, + }, + actions: actions, + }; + return ( -
+ +

Edit

-
+ ); } diff --git a/packages/strapi-admin/admin/src/containers/Webhooks/EditView/reducer.js b/packages/strapi-admin/admin/src/containers/Webhooks/EditView/reducer.js new file mode 100644 index 0000000000..09baadc206 --- /dev/null +++ b/packages/strapi-admin/admin/src/containers/Webhooks/EditView/reducer.js @@ -0,0 +1,22 @@ +import { fromJS } from 'immutable'; + +const initialState = fromJS({ + initialWebhook: {}, + modifiedWebhook: {}, + shouldRefetchData: false, +}); + +const reducer = (state, action) => { + switch (action.type) { + case 'GET_DATA_SUCCEEDED': + return state + .update('initialWebhook', () => fromJS(action.data)) + .update('modifiedWebhook', () => fromJS(action.data)) + .update('shouldRefetchData', () => false); + default: + return state; + } +}; + +export default reducer; +export { initialState }; diff --git a/packages/strapi-admin/admin/src/containers/Webhooks/ListView/index.js b/packages/strapi-admin/admin/src/containers/Webhooks/ListView/index.js index be757ad8fa..8e6e93a337 100644 --- a/packages/strapi-admin/admin/src/containers/Webhooks/ListView/index.js +++ b/packages/strapi-admin/admin/src/containers/Webhooks/ListView/index.js @@ -70,7 +70,7 @@ function ListView() { const newButtonProps = { label: addBtnLabel, - onClick: () => {}, + onClick: () => handleCreateClick(), color: 'primary', type: 'button', icon: , @@ -132,6 +132,10 @@ function ListView() { } }; + const handleCreateClick = () => { + push(`${location.pathname}/create`); + }; + const handleEditClick = id => { push(`${location.pathname}/${id}`); }; diff --git a/packages/strapi-admin/admin/src/translations/en.json b/packages/strapi-admin/admin/src/translations/en.json index 1a7d5f9caf..735b38fc4a 100644 --- a/packages/strapi-admin/admin/src/translations/en.json +++ b/packages/strapi-admin/admin/src/translations/en.json @@ -22,6 +22,7 @@ "app.components.BlockLink.documentation.content": "Discover the concepts, reference guides and tutorials.", "app.components.Button.cancel": "Cancel", "app.components.Button.save": "Save", + "app.components.Button.reset": "Reset", "app.components.ComingSoonPage.comingSoon": "Coming soon", "app.components.ComingSoonPage.featuresNotAvailable": "This feature is still under active development.", "app.components.DownloadInfo.download": "Download in progress...", @@ -227,6 +228,8 @@ "Settings.webhooks.list.empty.link": "See our documentation", "Settings.webhooks.enabled": "Enabled", "Settings.webhooks.disabled": "Disabled", + "Settings.webhooks.create": "Create a webhook", + "Settings.webhooks.trigger": "Trigger", "app.containers.App.notification.error.init": "An error occured while requesting the API", "components.Input.error.password.noMatch": "Passwords do not match", "form.button.done": "Done",