This commit is contained in:
cv
2021-04-12 12:50:49 +02:00
parent c40675a62d
commit f0cb09346d
5 changed files with 55 additions and 81 deletions
+8 -6
View File
@@ -1,27 +1,29 @@
import axios from 'axios';
import { serverURL } from './apiConstants'; import { serverURL } from './apiConstants';
const playbackURL = serverURL + 'playback/'; export const playbackNamespace = 'playback';
const playbackURL = serverURL + playbackNamespace;
export const getStart = async () => { export const getStart = async () => {
const res = await fetch(playbackURL + 'start'); const res = await axios.get(playbackURL + '/start');
return res; return res;
}; };
export const getPause = async () => { export const getPause = async () => {
const res = await fetch(playbackURL + 'pause'); const res = axios.get(playbackURL + '/pause');
return res; return res;
}; };
export const getRoll = async () => { export const getRoll = async () => {
const res = await fetch(playbackURL + 'roll'); const res = axios.get(playbackURL + '/roll');
return res; return res;
}; };
export const getPrevious = async () => { export const getPrevious = async () => {
const res = await fetch(playbackURL + 'previous'); const res = axios.get(playbackURL + '/previous');
return res; return res;
}; };
export const getNext = async () => { export const getNext = async () => {
const res = await fetch(playbackURL + 'next'); const res = axios.get(playbackURL + '/next');
return res; return res;
}; };
+9 -18
View File
@@ -1,17 +1,10 @@
import { IconButton } from '@chakra-ui/button';
import { FormControl, FormLabel } from '@chakra-ui/form-control'; import { FormControl, FormLabel } from '@chakra-ui/form-control';
import { FiSun } from 'react-icons/fi';
import { Input } from '@chakra-ui/input'; import { Input } from '@chakra-ui/input';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useSocket } from '../../app/context/socketContext'; import { useSocket } from '../../app/context/socketContext';
import VisibleIconBtn from '../../common/components/buttons/VisibleIconBtn';
import style from './MessageControl.module.css'; import style from './MessageControl.module.css';
// Button definition
const btnDef = {
colorScheme: 'blue',
icon: <FiSun />,
};
export default function MessageControl() { export default function MessageControl() {
const socket = useSocket(); const socket = useSocket();
const [pres, setPres] = useState({ const [pres, setPres] = useState({
@@ -79,11 +72,10 @@ export default function MessageControl() {
} }
/> />
</FormControl> </FormControl>
<IconButton <VisibleIconBtn
className={style.btn} size='md'
{...btnDef} active={pres.visible}
variant={pres.visible ? 'solid' : 'outline'} clickHandler={() => messageControl('toggle-pres-visible')}
onClick={() => messageControl('toggle-pres-visible')}
/> />
</div> </div>
@@ -97,11 +89,10 @@ export default function MessageControl() {
} }
/> />
</FormControl> </FormControl>
<IconButton <VisibleIconBtn
className={style.btn} size='md'
{...btnDef} active={publ.visible}
variant={publ.visible ? 'solid' : 'outline'} clickHandler={() => messageControl('toggle-publ-visible')}
onClick={() => messageControl('toggle-publ-visible')}
/> />
</div> </div>
</> </>
@@ -1,13 +1,10 @@
.inputContainer, .inputContainer,
.inputContainerWGap { .inputContainerWGap {
display: flex; display: flex;
align-items: flex-end;
gap: 1em; gap: 1em;
} }
.inputContainerWGap { .inputContainerWGap {
padding-top: 1em; padding-top: 1em;
} }
.btn {
align-self: flex-end;
}
+35 -53
View File
@@ -1,13 +1,7 @@
import { IconButton } from '@chakra-ui/button'; import { IconButton } from '@chakra-ui/button';
import style from './PlaybackControl.module.css'; import style from './PlaybackControl.module.css';
import Countdown from '../../common/components/countdown/Countdown'; import Countdown from '../../common/components/countdown/Countdown';
import { import { FiPause, FiSkipBack, FiSkipForward, FiClock } from 'react-icons/fi';
FiPlay,
FiPause,
FiSkipBack,
FiSkipForward,
FiClock,
} from 'react-icons/fi';
import { format } from 'date-fns'; import { format } from 'date-fns';
import { timeFormatSeconds } from '../../common/dateConfig'; import { timeFormatSeconds } from '../../common/dateConfig';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@@ -19,16 +13,12 @@ import {
getNext, getNext,
} from '../../app/api/playbackApi'; } from '../../app/api/playbackApi';
import { useSocket } from '../../app/context/socketContext'; import { useSocket } from '../../app/context/socketContext';
import PlayIconButton from '../../common/components/buttons/StartIconBtn';
// BUTTON DEFINITION import StartIconBtn from '../../common/components/buttons/StartIconBtn';
const defProps = { import PauseIconBtn from '../../common/components/buttons/PauseIconBtn';
colorScheme: 'blackAlpha', import PrevIconBtn from '../../common/components/buttons/PrevIconBtn';
variant: 'outline', import NextIconBtn from '../../common/components/buttons/NextIconBtn';
}; import RollIconBtn from '../../common/components/buttons/RollIconBtn';
const size = {
width: 90,
};
export default function PlaybackControl() { export default function PlaybackControl() {
const socket = useSocket(); const socket = useSocket();
@@ -39,11 +29,18 @@ export default function PlaybackControl() {
expectedFinish: null, expectedFinish: null,
}); });
const updateState = () => {
if (socket == null) return;
// ask for playstate
socket.emit('get-state');
};
// handle incoming messages // handle incoming messages
useEffect(() => { useEffect(() => {
if (socket == null) return; if (socket == null) return;
// ask for playstate
socket.emit('get-playstate'); updateState();
// Handle playstate // Handle playstate
socket.on('playstate', (data) => { socket.on('playstate', (data) => {
@@ -67,11 +64,15 @@ export default function PlaybackControl() {
const playbackControl = async (action, payload) => { const playbackControl = async (action, payload) => {
switch (action) { switch (action) {
case 'start': { case 'start': {
await getStart().then((res) => res.ok && setPlayback('start')); await getStart().then(
(res) => res.statusText === 'OK' && setPlayback('start')
);
break; break;
} }
case 'pause': { case 'pause': {
await getPause().then((res) => res.ok && setPlayback('pause')); await getPause().then(
(res) => res.statusText === 'OK' && setPlayback('pause')
);
break; break;
} }
case 'roll': { case 'roll': {
@@ -79,11 +80,11 @@ export default function PlaybackControl() {
break; break;
} }
case 'previous': { case 'previous': {
await getPrevious().then((res) => console.log(res)); await getPrevious().then(updateState);
break; break;
} }
case 'next': { case 'next': {
await getNext().then((res) => console.log(res)); await getNext().then(updateState);
break; break;
} }
default: default:
@@ -115,38 +116,19 @@ export default function PlaybackControl() {
</div> </div>
<div className={style.playbackContainer}> <div className={style.playbackContainer}>
<IconButton <StartIconBtn
{...size} active={playback === 'start'}
icon={<FiPlay />} clickHandler={() => playbackControl('start')}
colorScheme='green'
onClick={() => playbackControl('start')}
variant={playback === 'start' ? 'solid' : 'outline'}
/> />
<IconButton <PauseIconBtn
{...size} active={playback === 'pause'}
icon={<FiPause />} clickHandler={() => playbackControl('pause')}
colorScheme='orange'
onClick={() => playbackControl('pause')}
variant={playback === 'pause' ? 'solid' : 'outline'}
/> />
<IconButton <PrevIconBtn clickHandler={() => playbackControl('previous')} />
{...size} <NextIconBtn clickHandler={() => playbackControl('next')} />
{...defProps} <RollIconBtn
icon={<FiSkipBack />} active={playback === 'roll'}
onClick={() => playbackControl('previous')} clickHandler={() => playbackControl('roll')}
/>
<IconButton
{...size}
{...defProps}
icon={<FiSkipForward />}
onClick={() => playbackControl('next')}
/>
<IconButton
{...size}
icon={<FiClock />}
colorScheme='blue'
onClick={() => playbackControl('roll')}
variant={playback === 'roll' ? 'solid' : 'outline'}
/> />
</div> </div>
</div> </div>
@@ -1,4 +1,5 @@
import AddIconBtn from '../../../common/components/buttons/AddIconBtn'; import AddIconBtn from '../../../common/components/buttons/AddIconBtn';
import DelayIconBtn from '../../../common/components/buttons/DelayIconBtn';
import DeleteIconBtn from '../../../common/components/buttons/DeleteIconBtn'; import DeleteIconBtn from '../../../common/components/buttons/DeleteIconBtn';
import style from './Block.module.css'; import style from './Block.module.css';
@@ -17,6 +18,7 @@ export default function BlockBlock(props) {
<div className={style.actionOverlay}> <div className={style.actionOverlay}>
<DeleteIconBtn clickHandler={deleteHandler} /> <DeleteIconBtn clickHandler={deleteHandler} />
<AddIconBtn clickHandler={addHandler} /> <AddIconBtn clickHandler={addHandler} />
<DelayIconBtn />
</div> </div>
</div> </div>
); );