import { useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { Settings } from 'ontime-types'; import { postSettings } from '../../../../common/api/settings'; import { maybeAxiosError } from '../../../../common/api/utils'; import Button from '../../../../common/components/buttons/Button'; import Input from '../../../../common/components/input/input/Input'; import Select from '../../../../common/components/select/Select'; import useSettings from '../../../../common/hooks-query/useSettings'; import { preventEscape } from '../../../../common/utils/keyEvent'; import { isOnlyNumbers } from '../../../../common/utils/regex'; import { isOntimeCloud } from '../../../../externals'; import * as Panel from '../../panel-utils/PanelUtils'; import GeneralPinInput from './composite/GeneralPinInput'; export default function GeneralSettings() { const { data, status, refetch } = useSettings(); const { handleSubmit, register, reset, setError, watch, setValue, formState: { isSubmitting, isDirty, isValid, errors }, } = useForm({ mode: 'onChange', defaultValues: data, values: data, resetOptions: { keepDirtyValues: true, }, }); // update form if we get new data from server useEffect(() => { if (data) { reset(data); } }, [data, reset]); const onSubmit = async (formData: Settings) => { try { await postSettings(formData); } catch (error) { const message = maybeAxiosError(error); setError('root', { message }); } finally { await refetch(); } }; const disableInputs = status === 'pending'; const disableSubmit = isSubmitting || !isDirty || !isValid; const submitError = ''; const onReset = () => { reset(data); }; const isLoading = status === 'pending'; return ( preventEscape(event, onReset)} id='app-settings' > General settings {submitError && {submitError}} setValue('language', value, { shouldDirty: true })} disabled={disableInputs} defaultValue='en' options={[ { value: 'en', label: 'English' }, { value: 'fr', label: 'French' }, { value: 'de', label: 'German' }, { value: 'it', label: 'Italian' }, { value: 'pt', label: 'Portuguese' }, { value: 'es', label: 'Spanish' }, ]} /> ); }