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')}
/>
);
}