From d71615fba4d75db066fd3ff4189c5448654942e1 Mon Sep 17 00:00:00 2001
From: cv <34649812+cpvalente@users.noreply.github.com>
Date: Mon, 10 May 2021 22:01:58 +0200
Subject: [PATCH] cleanup
---
.../eventTimes/EventTimesVertical.jsx | 14 +-
.../src/features/control/MessageControl.jsx | 111 +++++------
.../control/MessageControl.module.css | 11 +-
client/src/features/editors/Editor.jsx | 21 +-
.../features/editors/list/EventBlock copy.jsx | 188 ------------------
.../editors/list/EventListWrapper.jsx | 175 ++++++++--------
client/src/features/menu/EventListMenu.jsx | 4 +-
7 files changed, 160 insertions(+), 364 deletions(-)
delete mode 100644 client/src/features/editors/list/EventBlock copy.jsx
diff --git a/client/src/common/components/eventTimes/EventTimesVertical.jsx b/client/src/common/components/eventTimes/EventTimesVertical.jsx
index b9517db1b..b39322db2 100644
--- a/client/src/common/components/eventTimes/EventTimesVertical.jsx
+++ b/client/src/common/components/eventTimes/EventTimesVertical.jsx
@@ -1,7 +1,6 @@
import EditableTimer from '../../input/EditableTimer';
import { showWarningToast } from '../../helpers/toastManager';
-import { useEffect, useState } from 'react';
-import { millisToMinutes, stringFromMillis } from '../../dateConfig';
+import { stringFromMillis } from '../../dateConfig';
const label = {
fontSize: '0.75em',
@@ -50,7 +49,7 @@ const TimesDelayed = (props) => {
};
const Times = (props) => {
- const { handleValidate, actionHandler, timeStart, timeEnd, duration } = props;
+ const { handleValidate, actionHandler, timeStart, timeEnd } = props;
return (
<>
@@ -84,13 +83,6 @@ const Times = (props) => {
export default function EventTimesVertical(props) {
const { delay, timeStart, timeEnd } = props;
- const [duration, setDuration] = useState(
- millisToMinutes(timeEnd - timeStart) || 0
- );
- useEffect(() => {
- setDuration(millisToMinutes(timeEnd - timeStart));
- }, [timeStart, timeEnd]);
-
const handleValidate = (entry, v) => {
// we dont enforce validation here
@@ -115,7 +107,6 @@ export default function EventTimesVertical(props) {
delay={delay}
timeStart={timeStart}
timeEnd={timeEnd}
- duration={duration}
/>
) : (
);
}
diff --git a/client/src/features/control/MessageControl.jsx b/client/src/features/control/MessageControl.jsx
index 2e549df34..fafbc5899 100644
--- a/client/src/features/control/MessageControl.jsx
+++ b/client/src/features/control/MessageControl.jsx
@@ -8,6 +8,33 @@ 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({
@@ -80,66 +107,30 @@ export default function MessageControl() {
return (
-
-
Presenter screen message
-
- messageControl('pres-text', event)}
- value={pres.text}
- placeholder='only the presenter screens see this'
- className={style.inline}
- >
-
-
-
- messageControl('toggle-pres-visible')}
- {...inputProps}
- />
-
-
-
-
-
Public screen message
-
- messageControl('publ-text', event)}
- value={publ.text}
- placeholder='public screens will render this'
- className={style.inline}
- >
-
-
-
- messageControl('toggle-publ-visible')}
- {...inputProps}
- />
-
-
-
-
-
Lower third message
-
- messageControl('lower-text', event)}
- value={lower.text}
- placeholder='visible in lower third screen'
- className={style.inline}
- >
-
-
-
-
- messageControl('toggle-lower-visible')}
- {...inputProps}
- />
-
-
+
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-publ-visible')}
+ />
);
}
diff --git a/client/src/features/control/MessageControl.module.css b/client/src/features/control/MessageControl.module.css
index 481e397c6..6c67eeb37 100644
--- a/client/src/features/control/MessageControl.module.css
+++ b/client/src/features/control/MessageControl.module.css
@@ -2,17 +2,12 @@
background-color: rgba(0, 0, 0, 0.05);
border: 1px solid rgba(0, 0, 0, 0.05);
border-radius: 4px;
-}
-
-.inputContainer,
-.inputContainerWGap {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5em;
padding: 0.5em;
}
-.inputContainerWGap {
- padding-top: 0.5em;
-}
-
.inputItems {
display: grid;
grid-template-columns: 1fr auto;
diff --git a/client/src/features/editors/Editor.jsx b/client/src/features/editors/Editor.jsx
index a1a9a9668..2b89b8d4e 100644
--- a/client/src/features/editors/Editor.jsx
+++ b/client/src/features/editors/Editor.jsx
@@ -3,7 +3,6 @@ import { Box } from '@chakra-ui/layout';
import NumberedText from '../../common/components/text/NumberedText';
import PlaybackControl from '../control/PlaybackControl';
import MessageControl from '../control/MessageControl';
-import PreviewContainer from '../viewers/PreviewContainer';
import styles from './Editor.module.css';
import EventListWrapper from './list/EventListWrapper';
import { useDisclosure } from '@chakra-ui/hooks';
@@ -28,7 +27,7 @@ export default function Editor() {
Event List
-
+
@@ -39,8 +38,8 @@ export default function Editor() {
Display Messages
@@ -51,18 +50,12 @@ export default function Editor() {
Time Control
-
+
-
-
-
-
-
-
Info
@@ -70,6 +63,12 @@ export default function Editor() {
+
+
+
+
+
+
>
);
diff --git a/client/src/features/editors/list/EventBlock copy.jsx b/client/src/features/editors/list/EventBlock copy.jsx
deleted file mode 100644
index e5b9926d8..000000000
--- a/client/src/features/editors/list/EventBlock copy.jsx
+++ /dev/null
@@ -1,188 +0,0 @@
-import { FiChevronDown, FiChevronUp, FiMoreVertical } from 'react-icons/fi';
-import { memo, useCallback, useEffect, useState } from 'react';
-import { showErrorToast } from '../../../common/helpers/toastManager';
-import { Draggable } from 'react-beautiful-dnd';
-import EventTimes from '../../../common/components/eventTimes/EventTimes';
-// import common from './Block.module.css';
-import style from './EventBlock.module.css';
-import EditableText from '../../../common/input/EditableText';
-import DelayValue from '../../../common/input/DelayValue';
-import ActionButtons from './ActionButtons';
-import VisibleIconBtn from '../../../common/components/buttons/VisibleIconBtn';
-import DeleteIconBtn from '../../../common/components/buttons/DeleteIconBtn';
-
-const areEqual = (prevProps, nextProps) => {
- return (
- prevProps.data.revision === nextProps.data.revision &&
- prevProps.selected === nextProps.selected &&
- prevProps.next === nextProps.next &&
- prevProps.index === nextProps.index &&
- prevProps.delay === nextProps.delay
- );
-};
-
-const EventBlock = (props) => {
- const { data, selected, next, delay, index, eventsHandler } = props;
-
- const [more, setMore] = useState(true);
- const [visible, setVisible] = useState(data.isPublic || false);
-
- // Set visibility indicator
- useEffect(() => {
- setVisible(data.isPublic);
- }, [data.isPublic]);
-
- // Create / delete new events
- const actionHandler = (action) => {
- switch (action) {
- case 'event':
- eventsHandler('add', { type: 'event', order: index + 1 });
- break;
- case 'delay':
- eventsHandler('add', { type: 'delay', order: index + 1 });
- break;
- case 'block':
- eventsHandler('add', { type: 'block', order: index + 1 });
- break;
- case 'delete':
- eventsHandler('delete', data.id);
- break;
- default:
- break;
- }
- };
-
- // Update data in fields
- const updateValues = (field, value) => {
- // validate field
- if (field in data) {
- // create object with new field
- const newData = { id: data.id, [field]: value };
-
- // request update in parent
- eventsHandler('patch', newData);
- } else {
- showErrorToast('Field Error: ' + field);
- }
- };
-
- const handleTitleSubmit = (v) => {
- updateValues('title', v);
- };
-
- const handleSubtitleSubmit = (v) => {
- updateValues('subtitle', v);
- };
-
- const handlePresenterSubmit = (v) => {
- updateValues('presenter', v);
- };
-
- const handleNoteSubmit = (v) => {
- updateValues('note', v);
- };
-
- const handleVisibleToggle = useCallback(() => {
- const viz = !data.isPublic || !visible;
- updateValues('isPublic', viz);
- }, [data.isPublic, visible, updateValues]);
-
- // TODO: inside useEffect()
- const isSelected = selected ? style.active : '';
- const isExpanded = more ? style.expanded : style.collapsed;
- const classSelect = ` ${style.event} ${isExpanded} ${isSelected}`;
-
- return (
-
- {(provided) => (
-
-
-
-
-
-
- {more &&
Start Time
}
- {more &&
End Time
}
- {more &&
Duration
}
-
-
- {more ? (
-
-
-
-
-
-
- ) : (
-
-
-
- )}
-
setMore(!more)}>
- {more ? : }
-
-
-
-
- )}
-
- );
-};
-
-export default memo(EventBlock, areEqual);
-// export default EventBlock;
diff --git a/client/src/features/editors/list/EventListWrapper.jsx b/client/src/features/editors/list/EventListWrapper.jsx
index 5d5ab369d..ce7c9dc7b 100644
--- a/client/src/features/editors/list/EventListWrapper.jsx
+++ b/client/src/features/editors/list/EventListWrapper.jsx
@@ -203,93 +203,104 @@ export default function EventListWrapper() {
}, [isError]);
// Events API
- const eventsHandler = useCallback(async (action, payload) => {
- switch (action) {
- case 'add':
- try {
- let t = Date.now();
- await addEvent.mutateAsync(payload);
- console.log('debug m add', Date.now() - t);
- } catch (error) {
- showErrorToast('Error creating event', error.message);
- }
- break;
- case 'update':
- try {
- let t = Date.now();
- await updateEvent.mutateAsync(payload);
- console.log('debug m update', Date.now() - t);
- } catch (error) {
- showErrorToast('Error updating event', error.message);
- }
- break;
- case 'patch':
- try {
- let t = Date.now();
- await patchEvent.mutateAsync(payload);
- console.log('debug m patch', Date.now() - t);
- } catch (error) {
- showErrorToast('Error updating event', error.message);
- }
- break;
- case 'delete':
- try {
- let t = Date.now();
- await deleteEvent.mutateAsync(payload);
- console.log('debug m delete', Date.now() - t);
- } catch (error) {
- showErrorToast('Error deleting event', error.message);
- }
- break;
- case 'reorder':
- try {
- let t = Date.now();
- await reorderEvent.mutateAsync(payload);
- console.log('debug m reorder', Date.now() - t);
- } catch (error) {
- showErrorToast('Error reordering event', error.message);
- }
- break;
- case 'applyDelay':
- let t = Date.now();
-
- // if delay <= 0 delete delay and next block
- if (payload.duration <= 0) {
+ const eventsHandler = useCallback(
+ async (action, payload) => {
+ switch (action) {
+ case 'add':
try {
- // look for block after
- let afterId = false;
- let blockAfter = null;
- for (const d of data) {
- if (d.id === payload.id) afterId = true;
- if (afterId && d.type === 'block') {
- blockAfter = d.id;
- break;
+ let t = Date.now();
+ await addEvent.mutateAsync(payload);
+ console.log('debug m add', Date.now() - t);
+ } catch (error) {
+ showErrorToast('Error creating event', error.message);
+ }
+ break;
+ case 'update':
+ try {
+ let t = Date.now();
+ await updateEvent.mutateAsync(payload);
+ console.log('debug m update', Date.now() - t);
+ } catch (error) {
+ showErrorToast('Error updating event', error.message);
+ }
+ break;
+ case 'patch':
+ try {
+ let t = Date.now();
+ await patchEvent.mutateAsync(payload);
+ console.log('debug m patch', Date.now() - t);
+ } catch (error) {
+ showErrorToast('Error updating event', error.message);
+ }
+ break;
+ case 'delete':
+ try {
+ let t = Date.now();
+ await deleteEvent.mutateAsync(payload);
+ console.log('debug m delete', Date.now() - t);
+ } catch (error) {
+ showErrorToast('Error deleting event', error.message);
+ }
+ break;
+ case 'reorder':
+ try {
+ let t = Date.now();
+ await reorderEvent.mutateAsync(payload);
+ console.log('debug m reorder', Date.now() - t);
+ } catch (error) {
+ showErrorToast('Error reordering event', error.message);
+ }
+ break;
+ case 'applyDelay':
+ let t = Date.now();
+
+ // if delay <= 0 delete delay and next block
+ if (payload.duration <= 0) {
+ try {
+ // look for block after
+ let afterId = false;
+ let blockAfter = null;
+ for (const d of data) {
+ if (d.id === payload.id) afterId = true;
+ if (afterId && d.type === 'block') {
+ blockAfter = d.id;
+ break;
+ }
}
+
+ // delete delay
+ await deleteEvent.mutateAsync(payload.id);
+ // delete block after, if any
+ if (blockAfter) await deleteEvent.mutateAsync(blockAfter);
+ } catch (error) {
+ showErrorToast('Error applying delay', error.message);
+ }
+ } else {
+ console.log('debug applydelay', payload.id);
+ try {
+ await applyDelay.mutateAsync(payload.id);
+ } catch (error) {
+ showErrorToast('Error applying delay', error.message);
}
-
- // delete delay
- await deleteEvent.mutateAsync(payload.id);
- // delete block after, if any
- if (blockAfter) await deleteEvent.mutateAsync(blockAfter);
- } catch (error) {
- showErrorToast('Error applying delay', error.message);
}
- } else {
- console.log('debug applydelay', payload.id);
- try {
- await applyDelay.mutateAsync(payload.id);
- } catch (error) {
- showErrorToast('Error applying delay', error.message);
- }
- }
- console.log('debug m apply', Date.now() - t);
+ console.log('debug m apply', Date.now() - t);
- break;
- default:
- showErrorToast('Unrecognised request', action);
- break;
- }
- }, []);
+ break;
+ default:
+ showErrorToast('Unrecognised request', action);
+ break;
+ }
+ },
+ [
+ addEvent,
+ applyDelay,
+ data,
+ deleteEvent,
+ patchEvent,
+ reorderEvent,
+ updateEvent,
+ ]
+ );
return (
<>
diff --git a/client/src/features/menu/EventListMenu.jsx b/client/src/features/menu/EventListMenu.jsx
index 902f1bfe9..9f8a85f07 100644
--- a/client/src/features/menu/EventListMenu.jsx
+++ b/client/src/features/menu/EventListMenu.jsx
@@ -1,4 +1,4 @@
-import { memo, useCallback } from 'react';
+import { memo } from 'react';
import { FiChevronDown } from 'react-icons/fi';
import {
Button,
@@ -8,7 +8,6 @@ import {
MenuItem,
MenuList,
} from '@chakra-ui/react';
-import AddIconBtn from '../../common/components/buttons/AddIconBtn';
import style from './EventListMenu.module.css';
import MenuActionButtons from '../editors/list/MenuActionButtons';
@@ -29,7 +28,6 @@ const EventListMenu = ({ eventsHandler }) => {
};
const actionHandler = (action) => {
- console.log('debug action called', action);
switch (action) {
case 'event':
eventsHandler('add', { type: action, order: 0 });