import React, { useMemo } from 'react'; import { useQuery, useMutation, useQueryClient } from 'react-query'; import { useIntl } from 'react-intl'; import { Formik } from 'formik'; import { CheckPagePermissions, Form, GenericInput, LoadingIndicatorPage, SettingsPageTitle, useFocusWhenNavigate, useNotification, useOverlayBlocker, useRBAC, } from '@strapi/helper-plugin'; import { useNotifyAT } from '@strapi/design-system/LiveRegions'; import { Main } from '@strapi/design-system/Main'; import { HeaderLayout, ContentLayout } from '@strapi/design-system/Layout'; import { Button } from '@strapi/design-system/Button'; import { Box } from '@strapi/design-system/Box'; import { Stack } from '@strapi/design-system/Stack'; import { Select, Option } from '@strapi/design-system/Select'; import { Typography } from '@strapi/design-system/Typography'; import { Grid, GridItem } from '@strapi/design-system/Grid'; import Check from '@strapi/icons/Check'; import pluginPermissions from '../../permissions'; import { getTrad } from '../../utils'; import layout from './utils/layout'; import schema from './utils/schema'; import { fetchData, putAdvancedSettings } from './utils/api'; const ProtectedAdvancedSettingsPage = () => ( ); const AdvancedSettingsPage = () => { const { formatMessage } = useIntl(); const toggleNotification = useNotification(); const { lockApp, unlockApp } = useOverlayBlocker(); const { notifyStatus } = useNotifyAT(); const queryClient = useQueryClient(); useFocusWhenNavigate(); const updatePermissions = useMemo( () => ({ update: pluginPermissions.updateAdvancedSettings }), [] ); const { isLoading: isLoadingForPermissions, allowedActions: { canUpdate }, } = useRBAC(updatePermissions); const { status: isLoadingData, data } = useQuery('advanced', () => fetchData(), { onSuccess() { notifyStatus( formatMessage({ id: getTrad('Form.advancedSettings.data.loaded'), defaultMessage: 'Advanced settings data has been loaded', }) ); }, onError() { toggleNotification({ type: 'warning', message: { id: getTrad('notification.error'), defaultMessage: 'An error occured' }, }); }, }); const isLoading = isLoadingForPermissions || isLoadingData !== 'success'; const submitMutation = useMutation((body) => putAdvancedSettings(body), { async onSuccess() { await queryClient.invalidateQueries('advanced'); toggleNotification({ type: 'success', message: { id: getTrad('notification.success.saved'), defaultMessage: 'Saved' }, }); unlockApp(); }, onError() { toggleNotification({ type: 'warning', message: { id: getTrad('notification.error'), defaultMessage: 'An error occured' }, }); unlockApp(); }, refetchActive: true, }); const { isLoading: isSubmittingForm } = submitMutation; const handleSubmit = async (body) => { lockApp(); const urlConfirmation = body.email_confirmation ? body.email_confirmation_redirection : ''; await submitMutation.mutateAsync({ ...body, email_confirmation_redirection: urlConfirmation }); }; if (isLoading) { return (
); } return (
{({ errors, values, handleChange, isSubmitting }) => { return (
} size="S" > {formatMessage({ id: 'global.save', defaultMessage: 'Save' })} } /> {formatMessage({ id: 'global.settings', defaultMessage: 'Settings', })} {layout.map((input) => { let value = values[input.name]; if (!value) { value = input.type === 'bool' ? false : ''; } return ( ); })} ); }}
); }; export default ProtectedAdvancedSettingsPage;