diff --git a/client/src/features/control/MessageControl.jsx b/client/src/features/control/MessageControl.jsx new file mode 100644 index 000000000..fc30fbb0a --- /dev/null +++ b/client/src/features/control/MessageControl.jsx @@ -0,0 +1,109 @@ +import { IconButton } from '@chakra-ui/button'; +import { FormControl, FormLabel } from '@chakra-ui/form-control'; +import { FiSun } from 'react-icons/fi'; +import { Input } from '@chakra-ui/input'; +import { useEffect, useState } from 'react'; +import { useSocket } from '../../app/context/socketContext'; +import style from './MessageControl.module.css'; + +// Button definition +const btnDef = { + colorScheme: 'blue', + icon: , +}; + +export default function MessageControl() { + const socket = useSocket(); + const [pres, setPres] = useState({ + text: '', + visible: false, + }); + const [publ, setPubl] = useState({ + text: '', + visible: false, + }); + + // Torbjorn: why is this not updating? + useEffect(() => { + if (socket == null) return; + + // Handle presenter messages + socket.on('messages-presenter', (data) => { + console.log('websocket: got data', data); + setPres({ ...data }); + }); + + // Handle public messages + socket.on('messages-public', (data) => { + console.log('websocket: got data', data); + setPubl({ ...data }); + }); + + // Ask for up to date data + socket.emit('get-presenter'); + socket.emit('get-public'); + + // Clear listener + return () => socket.off('messages-presenter', 'messages-public'); + }, [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; + + default: + break; + } + }; + + return ( + <> +
+ + Presenter screen message + + messageControl('pres-text', event.target.value) + } + /> + + messageControl('toggle-pres-visible')} + /> +
+ +
+ + Public screen message + + messageControl('publ-text', event.target.value) + } + /> + + messageControl('toggle-publ-visible')} + /> +
+ + ); +} diff --git a/client/src/features/control/MessageControl.module.css b/client/src/features/control/MessageControl.module.css new file mode 100644 index 000000000..30aba074e --- /dev/null +++ b/client/src/features/control/MessageControl.module.css @@ -0,0 +1,13 @@ +.inputContainer, +.inputContainerWGap { + display: flex; + gap: 1em; +} + +.inputContainerWGap { + padding-top: 1em; +} + +.btn { + align-self: flex-end; +} diff --git a/client/src/features/editors/Editor.jsx b/client/src/features/editors/Editor.jsx index 36d3f682d..7fa483d7d 100644 --- a/client/src/features/editors/Editor.jsx +++ b/client/src/features/editors/Editor.jsx @@ -2,21 +2,15 @@ import { IconButton } from '@chakra-ui/button'; import { SettingsIcon } from '@chakra-ui/icons'; import { Grid, GridItem, Heading } from '@chakra-ui/layout'; import { Box } from '@chakra-ui/layout'; -import { useContext, useEffect } from 'react'; -import { useQuery } from 'react-query'; import { useState } from 'react'; -import { EventListContext } from '../../app/context/eventListContext'; import NumberedText from '../../common/components/text/NumberedText'; import PlaybackControl from '../control/PlaybackControl'; -import MessageForm from '../form/MessageForm'; +import MessageControl from '../control/MessageControl'; import PreviewContainer from '../viewers/PreviewContainer'; import styles from './Editor.module.css'; -import EventList from './list/EventList'; import EventListWrapper from './list/EventListWrapper'; export default function Editor() { - const [formMode, setFormMode] = useState(null); - const [webEvents, setWebEvents] = useState(null); const [playback, setPlayback] = useState({ current: null, next: null, @@ -42,10 +36,7 @@ export default function Editor() {
- +
@@ -72,7 +63,7 @@ export default function Editor() { text={'Show realtime messages on separate screen types'} />
- +
diff --git a/client/src/features/form/MessageForm.jsx b/client/src/features/form/MessageForm.jsx deleted file mode 100644 index 64509ed73..000000000 --- a/client/src/features/form/MessageForm.jsx +++ /dev/null @@ -1,66 +0,0 @@ -import { IconButton } from '@chakra-ui/button'; -import { FormControl, FormLabel } from '@chakra-ui/form-control'; -import { ViewIcon, ViewOffIcon } from '@chakra-ui/icons'; -import { Input } from '@chakra-ui/input'; -import { useContext } from 'react'; -import { useState } from 'react'; -import { PresenterMessagesContext } from '../../app/context/presenterMessageContext'; - -export default function MessageForm() { - const [presenterShow, setPresenterShow] = useState(false); - const [publicShow, setPublicShow] = useState(false); - const [presMessage, setPresMessage] = useContext(PresenterMessagesContext); - - const handleSetPresenter = () => { - setPresenterShow(!presenterShow); - setPresMessage((prev) => ({ ...prev, show: !presMessage.show })); - }; - - const handlePresenterChange = (val) => { - setPresMessage((prev) => ({ ...prev, text: val })); - }; - - const handleSetPublic = () => { - setPublicShow(!publicShow); - }; - - const handlePublicChange = (val) => {}; - - return ( - <> -
- - Presenter screen message - handlePresenterChange(event.target.value)} - /> - - : } - /> - - -
- - Public screen message - handlePublicChange(event.target.value)} - /> - - : } - /> - - - ); -}