import React, { useMemo } from 'react';
import { useQuery, useMutation, useQueryClient } from 'react-query';
import { useIntl } from 'react-intl';
import { Formik } from 'formik';
import {
SettingsPageTitle,
useRBAC,
useNotification,
useOverlayBlocker,
CheckPagePermissions,
LoadingIndicatorPage,
Form,
GenericInput,
useFocusWhenNavigate,
} from '@strapi/helper-plugin';
import { useNotifyAT } from '@strapi/parts/LiveRegions';
import { Main } from '@strapi/parts/Main';
import { HeaderLayout, ContentLayout } from '@strapi/parts/Layout';
import { Button } from '@strapi/parts/Button';
import { Box } from '@strapi/parts/Box';
import { Stack } from '@strapi/parts/Stack';
import { Select, Option } from '@strapi/parts/Select';
import { H3 } from '@strapi/parts/Text';
import { Grid, GridItem } from '@strapi/parts/Grid';
import CheckIcon from '@strapi/icons/CheckIcon';
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: 'Form.advancedSettings.data.loaded',
defaultMessage: 'Advanced settings data has been loaded',
})
);
},
onError: () => {
toggleNotification({
type: 'warning',
message: { id: 'notification.error', defaultMessage: 'An error occured' },
});
},
});
const isLoading = isLoadingForPermissions || isLoadingData !== 'success';
const submitMutation = useMutation(body => putAdvancedSettings(body), {
onSuccess: async () => {
await queryClient.invalidateQueries('advanced');
toggleNotification({
type: 'success',
message: { id: 'notification.success.saved', defaultMessage: 'Saved' },
});
unlockApp();
},
onError: () => {
toggleNotification({
type: 'warning',
message: { id: '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 (
);
}}
);
};
export default ProtectedAdvancedSettingsPage;