import { Editable, EditableInput, EditablePreview } from '@chakra-ui/editable'; import { useEffect, useState } from 'react'; import { useSocket } from 'app/context/socketContext'; import VisibleIconBtn from 'common/components/buttons/VisibleIconBtn'; import style from './MessageControl.module.css'; const inputProps = { size: 'sm', }; const InputRow = (props) => { const { label, placeholder, text, visible } = props; return ( <> {label}
props.changeHandler(event)} value={text} placeholder={placeholder} className={style.inline} color={text === '' ? '#666' : 'inherit'} >
); }; export default function MessageControl() { const socket = useSocket(); const [pres, setPres] = useState({ text: '', visible: false, }); const [publ, setPubl] = useState({ text: '', visible: false, }); const [lower, setLower] = useState({ text: '', visible: false, }); useEffect(() => { if (socket == null) return; // Handle presenter messages socket.on('messages-presenter', (data) => { setPres({ ...data }); }); // Handle public messages socket.on('messages-public', (data) => { setPubl({ ...data }); }); // Handle lower third messages socket.on('messages-lower', (data) => { setLower({ ...data }); }); // Ask for up to date data socket.emit('get-messages'); // Clear listeners return () => { socket.off('messages-public'); socket.off('messages-presenter'); socket.off('messages-lower'); }; }, [socket]); const messageControl = async (action, payload) => { switch (action) { case 'pres-text': socket.emit('set-presenter-text', payload); break; case 'toggle-pres-visible': socket.emit('set-presenter-visible', !pres.visible); break; case 'publ-text': socket.emit('set-public-text', payload); break; case 'toggle-publ-visible': socket.emit('set-public-visible', !publ.visible); break; case 'lower-text': socket.emit('set-lower-text', payload); break; case 'toggle-lower-visible': socket.emit('set-lower-visible', !lower.visible); break; default: break; } }; return (
messageControl('pres-text', event)} actionHandler={() => messageControl('toggle-pres-visible')} /> messageControl('publ-text', event)} actionHandler={() => messageControl('toggle-publ-visible')} /> messageControl('lower-text', event)} actionHandler={() => messageControl('toggle-lower-visible')} />
); }