import { useState } from 'react'; import type { FC } from 'react'; import CancelIcon from '@mui/icons-material/Cancel'; import WarningIcon from '@mui/icons-material/Warning'; import { Button, Checkbox } from '@mui/material'; import * as SystemApi from 'api/system'; import type { ValidateFieldsError } from 'async-validator'; import { BlockFormControlLabel, BlockNavigation, ButtonRow, FormLoader, SectionContent, ValidatedPasswordField, ValidatedTextField, useLayoutTitle } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; import type { OTASettingsType } from 'types'; import { numberValue, updateValueDirty, useRest } from 'utils'; import { validate } from 'validators'; import { OTA_SETTINGS_VALIDATOR } from 'validators/system'; const OTASettings: FC = () => { const { loadData, saveData, saving, updateDataValue, data, origData, dirtyFlags, setDirtyFlags, blocker, errorMessage } = useRest({ read: SystemApi.readOTASettings, update: SystemApi.updateOTASettings }); const { LL } = useI18nContext(); const updateFormValue = updateValueDirty( origData, dirtyFlags, setDirtyFlags, updateDataValue ); const [fieldErrors, setFieldErrors] = useState(); const content = () => { if (!data) { return ; } const validateAndSubmit = async () => { try { setFieldErrors(undefined); await validate(OTA_SETTINGS_VALIDATOR, data); await saveData(); } catch (error) { setFieldErrors(error as ValidateFieldsError); } }; useLayoutTitle('OTA'); return ( <> } label={LL.ENABLE_OTA()} /> {dirtyFlags && dirtyFlags.length !== 0 && ( )} ); }; return ( {blocker ? : null} {content()} ); }; export default OTASettings;