From 1a67bd88368023b68b6f09d1e5e4584f04dc4cf0 Mon Sep 17 00:00:00 2001 From: cv <34649812+cpvalente@users.noreply.github.com> Date: Wed, 31 Mar 2021 14:07:45 +0200 Subject: [PATCH] playback control DRAFT, timer not implemented yet --- src/features/control/PlaybackControl.jsx | 23 ++-- src/features/editors/Editor.jsx | 135 +++++++++++++++++++++-- 2 files changed, 136 insertions(+), 22 deletions(-) diff --git a/src/features/control/PlaybackControl.jsx b/src/features/control/PlaybackControl.jsx index f8db0fa8d..1732f494e 100644 --- a/src/features/control/PlaybackControl.jsx +++ b/src/features/control/PlaybackControl.jsx @@ -1,19 +1,18 @@ import { Button } from '@chakra-ui/button'; import style from './PlaybackControl.module.css'; import Countdown from '../../common/components/countdown/Countdown'; -import { useState } from 'react'; import { ArrowBackIcon, ArrowForwardIcon } from '@chakra-ui/icons'; -export default function PlaybackControl() { - const [time] = useState(15); - const [roll, setRoll] = useState(false); +// BUTTON DEFINITION +const defProps = { + colorScheme: 'blackAlpha', + variant: 'outline', +}; - const defProps = { - colorScheme: 'blackAlpha', - variant: 'outline', - }; +const bigSize = 120; - const bigSize = 120; +export default function PlaybackControl(props) { + const { time, roll } = props; return (
@@ -28,6 +27,7 @@ export default function PlaybackControl() { colorScheme='green' className={style.start} disabled={roll} + onClick={() => props.playbackControl('start')} > Start @@ -36,6 +36,7 @@ export default function PlaybackControl() { colorScheme='orange' className={style.pause} disabled={roll} + onClick={() => props.playbackControl('pause')} > Pause @@ -47,6 +48,7 @@ export default function PlaybackControl() { leftIcon={} className={style.prev} disabled={roll} + onClick={() => props.playbackControl('previous')} > Prev @@ -56,6 +58,7 @@ export default function PlaybackControl() { rightIcon={} className={style.next} disabled={roll} + onClick={() => props.playbackControl('next')} > Next @@ -63,7 +66,7 @@ export default function PlaybackControl() { width={bigSize} colorScheme='blue' className={style.reset} - onClick={() => setRoll(!roll)} + onClick={() => props.playbackControl('roll')} > Roll diff --git a/src/features/editors/Editor.jsx b/src/features/editors/Editor.jsx index 6de784934..4e9513a8a 100644 --- a/src/features/editors/Editor.jsx +++ b/src/features/editors/Editor.jsx @@ -2,9 +2,12 @@ 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 { getHours, getMinutes } from 'date-fns'; +import { differenceInSeconds } from 'date-fns/esm'; import { useContext } from 'react'; import { useEffect, useState } from 'react'; import { EventContext } from '../../app/context/eventContext'; +import { EventListContext } from '../../app/context/eventListContext'; import NumberedText from '../../common/components/text/NumberedText'; import PlaybackControl from '../control/PlaybackControl'; import MessageForm from '../form/MessageForm'; @@ -14,15 +17,111 @@ import EventList from './list/EventList'; export default function Editor() { const [formMode, setFormMode] = useState(null); - const [event] = useContext(EventContext); + const [events] = useContext(EventListContext); + const [event, setEvent] = useContext(EventContext); + const [playback, setPlayback] = useState({ + current: null, + next: null, + currentTimer: null, + numEvents: 0, + state: 'pause', + prevState: 'pause', + }); - useEffect(() => { - if (event === null) { - setFormMode(null); - } else { - setFormMode('edit'); + const updatePlayback = (vals) => { + setPlayback({ ...playback, ...vals }); + }; + + // ?? I have already done this a few times, + // maybe loop once and get all data? + const getCurrentTime = (target) => { + if (events !== null) { + // loop through events to find target + const filteredEvents = events.filter((e) => e.type === 'event'); + const curEvent = filteredEvents[target]; + + // set as event + setEvent(curEvent); + + // extract time only from dates + let minStart = getHours(curEvent.timeStart) * 60; + minStart = minStart + getMinutes(curEvent.timeStart); + + let minEnd = getHours(curEvent.timeEnd) * 60; + minEnd = minEnd + getMinutes(curEvent.timeEnd); + + + // return time in seconds + return ((minEnd - minStart) * 60); } - }, [event]); + }; + + const playbackControl = (action, payload) => { + switch (action) { + case 'start': { + if (playback.state !== 'play') { + updatePlayback({ state: 'play', prevState: playback.state }); + } + break; + } + case 'pause': { + if (playback.state !== 'pause') { + updatePlayback({ state: 'pause', prevState: playback.state }); + } + break; + } + case 'roll': { + if (playback.state === 'roll' && playback.prevState !== 'roll') { + updatePlayback({ state: playback.prevState, prevState: 'roll' }); + } else { + updatePlayback({ state: 'roll', prevState: playback.state }); + } + break; + } + case 'previous': { + if (playback.numEvents !== null) { + let cur = null, + nxt = null; + if (playback.current === null || playback.current === 0) { + cur = 0; + } else { + cur = playback.current - 1; + } + if (playback.numEvents > 1) nxt = cur + 1; + if (nxt > playback.numEvents) nxt = playback.numEvents; + + // get time + let time = getCurrentTime(cur); + // update playback + updatePlayback({ current: cur, next: nxt, currentTimer: time }); + } + break; + } + case 'next': { + if (playback.numEvents !== null) { + let cur = null, + nxt = null; + if (playback.current === null) { + cur = 0; + } else { + cur = playback.next; + } + if (playback.numEvents > 1) nxt = cur + 1; + if (nxt >= playback.numEvents) nxt = playback.numEvents - 1; + + // get time + let time = getCurrentTime(cur); + // update playback + updatePlayback({ current: cur, next: nxt, currentTimer: time }); + } + break; + } + default: + break; + } + }; + + console.log('playback here', playback); return (
- +
@@ -64,8 +168,9 @@ export default function Editor() { number={2} text={'Show realtime messages on separate screen types'} /> -
- +
+ +
@@ -75,8 +180,14 @@ export default function Editor() { Time Control -
- +
+ +