mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-20 14:39:06 +00:00
refract
This commit is contained in:
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user