import { useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { Alert, AlertDescription, AlertIcon, AlertTitle, Input, Switch } from '@chakra-ui/react'; import { ViewSettings } from 'ontime-types'; import { logAxiosError } from '../../../common/api/apiUtils'; import { postViewSettings } from '../../../common/api/ontimeApi'; import { PopoverPickerRHF } from '../../../common/components/input/popover-picker/PopoverPicker'; import useInfo from '../../../common/hooks-query/useInfo'; import useViewSettings from '../../../common/hooks-query/useViewSettings'; import ModalLoader from '../modal-loader/ModalLoader'; import { inputProps } from '../modalHelper'; import ModalInput from '../ModalInput'; import ModalLink from '../ModalLink'; import ModalSplitInput from '../ModalSplitInput'; import OntimeModalFooter from '../OntimeModalFooter'; import style from './SettingsModal.module.scss'; const cssOverrideDocsUrl = 'https://ontime.gitbook.io/v2/features/custom-styling'; export default function ViewSettingsForm() { const { data, status, refetch, isFetching } = useViewSettings(); const { data: info, isFetching: isFetchingInfo } = useInfo(); const { control, handleSubmit, register, reset, formState: { isSubmitting, isDirty, isValid }, } = useForm({ defaultValues: data, values: data, resetOptions: { keepDirtyValues: true, }, }); useEffect(() => { if (data) { reset(data); } }, [data, reset]); const onSubmit = async (formData: ViewSettings) => { const newData = { ...formData, }; try { await postViewSettings(newData); } catch (error) { logAxiosError('Error saving view settings', error); } finally { await refetch(); } }; const onReset = () => { reset(data); }; if (!control) { return null; } const disableInputs = status === 'pending'; if (isFetching || isFetchingInfo) { return ; } return (
General view settings
CSS Override Ontime will use the CSS file at its install location.
{info?.cssOverride} For more information, see the docs
Timer view settings
); }