import { memo, useCallback, useContext, useState } from 'react'; import CancelIcon from '@mui/icons-material/Cancel'; import WarningIcon from '@mui/icons-material/Warning'; import { Button } from '@mui/material'; import * as SecurityApi from 'api/security'; import type { ValidateFieldsError } from 'async-validator'; import { BlockNavigation, ButtonRow, FormLoader, MessageBox, SectionContent, ValidatedPasswordField } from 'components'; import { AuthenticatedContext } from 'contexts/authentication'; import { useI18nContext } from 'i18n/i18n-react'; import type { SecuritySettingsType } from 'types'; import { updateValueDirty, useRest } from 'utils'; import { SECURITY_SETTINGS_VALIDATOR, validate } from 'validators'; const SecuritySettings = () => { const { LL } = useI18nContext(); const [fieldErrors, setFieldErrors] = useState(); const { loadData, saving, data, updateDataValue, origData, dirtyFlags, setDirtyFlags, blocker, saveData, errorMessage } = useRest({ read: SecurityApi.readSecuritySettings, update: SecurityApi.updateSecuritySettings }); const authenticatedContext = useContext(AuthenticatedContext); const updateFormValue = updateValueDirty( origData as unknown as Record, dirtyFlags, setDirtyFlags, updateDataValue as (value: unknown) => void ); const validateAndSubmit = useCallback(async () => { if (!data) return; try { setFieldErrors(undefined); await validate(SECURITY_SETTINGS_VALIDATOR, data); await saveData(); await authenticatedContext.refresh(); } catch (error) { setFieldErrors(error as ValidateFieldsError); } }, [data, saveData, authenticatedContext]); const content = () => { if (!data) { return ; } return ( <> {dirtyFlags && dirtyFlags.length !== 0 && ( )} ); }; return ( {blocker ? : null} {content()} ); }; export default memo(SecuritySettings);