import { useCallback, useEffect, useState } from 'react'; import { FormControl, FormLabel, ModalBody } from '@chakra-ui/react'; import { IoCheckmarkSharp } from '@react-icons/all-files/io5/IoCheckmarkSharp'; import { IoInformationCircleOutline } from '@react-icons/all-files/io5/IoInformationCircleOutline'; import { useEmitLog } from '@/common/stores/logger'; import { postView } from '../../common/api/ontimeApi'; import EnableBtn from '../../common/components/buttons/EnableBtn'; import useViewSettings from '../../common/hooks-query/useViewSettings'; import { viewsSettingsPlaceholder } from '../../common/models/ViewSettings.type'; import { openLink } from '../../common/utils/linkUtils'; import SubmitContainer from './SubmitContainer'; import style from './Modals.module.scss'; export default function ViewsSettingsModal() { const { data, status, refetch } = useViewSettings(); const { emitError } = useEmitLog(); const [formData, setFormData] = useState(viewsSettingsPlaceholder); const [changed, setChanged] = useState(false); const [submitting, setSubmitting] = useState(false); /** * Set formdata from server state */ useEffect(() => { if (data == null) return; if (changed) return; setFormData({ ...data }); }, [changed, data]); /** * Validate and submit data */ const submitHandler = useCallback( async (event) => { event.preventDefault(); setSubmitting(true); try { await postView(formData); } catch (error) { emitError(`Error view settings: ${error}`) } finally{ await refetch(); setChanged(false); } setSubmitting(false); }, [emitError, formData, refetch] ); /** * Reverts local state equals to server state */ const revert = useCallback(async () => { setChanged(false); await refetch(); }, [refetch]); /** * Handles change of input field in local state * @param {string} field - object parameter to update * @param {(string | number | boolean)} value - new object parameter value */ const handleChange = useCallback( (field, value) => { const temp = { ...formData }; temp[field] = value; setFormData(temp); setChanged(true); }, [formData] ); return (

Options related to the viewers
🔥 Changes take effect immediately 🔥

Style Options
CSS Style Overrides This feature allows user defined CSS to override the application stylesheets as a way to customise viewers appearance.
Currently the feature affects the following views
  • Stage timer
  • Clock
  • Minimal timer
  • Backstage screen
  • Public screen
  • Picture in Picture
  • Countdown
Read more about it in the documentation{' '} openLink('https://cpvalente.gitbook.io/ontime/features/custom-styling')} className={style.if} > over at Gitbook
Override CSS Styles
Enable / Disable override
handleChange('overrideStyles', !formData.overrideStyles)} />
); }