import { useCallback, useEffect, useState } from 'react'; import { FormLabel, Input, ModalBody, Textarea } from '@chakra-ui/react'; import { useEmitLog } from '@/common/stores/logger'; import { postEventData } from '../../common/api/eventDataApi'; import useEventData from '../../common/hooks-query/useEventData'; import { eventDataPlaceholder } from '../../common/models/EventData'; import { inputProps } from './modalHelper'; import SubmitContainer from './SubmitContainer'; import style from './Modals.module.scss'; export default function SettingsModal() { const { data, status, refetch } = useEventData(); const { emitError } = useEmitLog(); const [formData, setFormData] = useState(eventDataPlaceholder); const [changed, setChanged] = useState(false); const [submitting, setSubmitting] = useState(false); /** * Set formdata from server state */ useEffect(() => { if (data == null) return; if (changed) return; setFormData({ title: data.title, publicUrl: data.publicUrl, publicInfo: data.publicInfo, backstageUrl: data.backstageUrl, backstageInfo: data.backstageInfo, endMessage: data.endMessage, }); }, [changed, data]); /** * Validate and submit data */ const submitHandler = useCallback( async (event) => { event.preventDefault(); setSubmitting(true); try { await postEventData(formData); } catch (error) { emitError(`Error saving event 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} 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 running event
Affects rendered views

Event Data
Event Title handleChange('title', event.target.value)} />
Additional Screen Info
Public URL
QR code to be shown on public screens
handleChange('publicUrl', event.target.value)} />
Public Info
Information to be shown on public screens