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 (
);
}}
);
};
export default ProtectedAdvancedSettingsPage;