diff --git a/packages/strapi-helper-plugin/lib/src/components/IntlInput/index.js b/packages/strapi-helper-plugin/lib/src/components/IntlInput/index.js index f65184b13e..5c80ed65c5 100644 --- a/packages/strapi-helper-plugin/lib/src/components/IntlInput/index.js +++ b/packages/strapi-helper-plugin/lib/src/components/IntlInput/index.js @@ -15,9 +15,7 @@ const IntlInput = ({ }) => { const { formatMessage } = useIntl(); const label = formatMessage({ id: labelId, defaultMessage: defaultMessage || labelId }); - // const description = descriptionId - // ? formatMessage({ id: descriptionId, defaultMessage: descriptionId }) - // : ''; + let formattedDescription = ''; if (description) { @@ -43,8 +41,6 @@ const IntlInput = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - console.log({ description, formattedDescription }); - return ( { @@ -31,9 +33,10 @@ const EmailTemplatesPage = () => { return { update: pluginPermissions.updateEmailTemplates }; }, []); const [isOpen, setIsOpen] = useState(false); + const [isSubmiting, setIsSubmiting] = useState(false); const [showForm, setShowForm] = useState(false); const [templateToEdit, setTemplateToEdit] = useState(null); - const [{ isLoading, modifiedData }, dispatch] = useReducer(reducer, initialState); + const [{ formErrors, isLoading, modifiedData }, dispatch] = useReducer(reducer, initialState); const emailTemplates = useMemo(() => { return Object.keys(modifiedData).reduce((acc, current) => { const { display, icon } = modifiedData[current]; @@ -101,6 +104,9 @@ const EmailTemplatesPage = () => { const handleClosed = useCallback(() => { setTemplateToEdit(null); setShowForm(false); + dispatch({ + type: 'RESET_FORM', + }); }, []); const handleToggle = useCallback(() => { @@ -115,15 +121,45 @@ const EmailTemplatesPage = () => { [handleToggle] ); - const handleSubmit = useCallback(async e => { - e.preventDefault(); + const handleSubmit = useCallback( + async e => { + e.preventDefault(); - try { - console.log('todo'); - } catch (err) { - // TODO - } - }, []); + let errors = {}; + + try { + setIsSubmiting(true); + await schema.validate(modifiedData[templateToEdit.id], { abortEarly: false }); + + try { + await request(getRequestURL('email-templates'), { + method: 'PUT', + body: { 'email-templates': modifiedData }, + }); + + strapi.notification.success(getTrad('notification.success.submit')); + + dispatch({ type: 'ON_SUBMIT_SUCCEEDED' }); + + handleToggle(); + } catch (err) { + console.error(err); + + strapi.notification.error('notification.error'); + } + } catch (err) { + errors = getYupInnerErrors(err); + } finally { + setIsSubmiting(false); + } + + dispatch({ + type: 'SET_ERRORS', + errors, + }); + }, + [modifiedData, templateToEdit, handleToggle] + ); const handleClick = useCallback(() => { buttonSubmitRef.current.click(); @@ -189,6 +225,7 @@ const EmailTemplatesPage = () => { { - diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/EmailTemplates/reducer.js b/packages/strapi-plugin-users-permissions/admin/src/containers/EmailTemplates/reducer.js index 6b02420592..bd527b310b 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/EmailTemplates/reducer.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/EmailTemplates/reducer.js @@ -2,6 +2,7 @@ import produce from 'immer'; import { set } from 'lodash'; const initialState = { + formErrors: {}, isLoading: true, initialData: {}, modifiedData: {}, @@ -31,10 +32,21 @@ const reducer = (state, action) => break; } case 'ON_CHANGE': { - console.log(action.keys); set(draftState, ['modifiedData', ...action.keys.split('.')], action.value); break; } + case 'ON_SUBMIT_SUCCEEDED': { + draftState.initialData = state.modifiedData; + break; + } + case 'RESET_FORM': { + draftState.modifiedData = state.initialData; + break; + } + case 'SET_ERRORS': { + draftState.formErrors = action.errors; + break; + } default: { return draftState; } diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/EmailTemplates/utils/forms.js b/packages/strapi-plugin-users-permissions/admin/src/containers/EmailTemplates/utils/forms.js index 119cdb8b10..0949140675 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/EmailTemplates/utils/forms.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/EmailTemplates/utils/forms.js @@ -41,9 +41,9 @@ const forms = [ autoFocus: false, label: getTrad('PopUpForm.Email.options.object.label'), name: 'options.object', - type: 'c', + type: 'customText', placeholder: getTrad('PopUpForm.Email.options.object.placeholder'), - customInputs: { c: CustomTextInput }, + customInputs: { customText: CustomTextInput }, descriptione: () => (