mirror of
https://github.com/cpvalente/ontime.git
synced 2026-09-02 04:49:05 +00:00
ux: content aware playback (#364)
This commit is contained in:
@@ -37,6 +37,7 @@ export const setMessage = {
|
|||||||
export const usePlaybackControl = () => {
|
export const usePlaybackControl = () => {
|
||||||
const featureSelector = (state: RuntimeStore) => ({
|
const featureSelector = (state: RuntimeStore) => ({
|
||||||
playback: state.playback,
|
playback: state.playback,
|
||||||
|
selectedEventIndex: state.loaded.selectedEventIndex,
|
||||||
numEvents: state.loaded.numEvents,
|
numEvents: state.loaded.numEvents,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,11 @@ export default function PlaybackControl() {
|
|||||||
return (
|
return (
|
||||||
<div className={style.mainContainer}>
|
<div className={style.mainContainer}>
|
||||||
<PlaybackTimer playback={data.playback as Playback} />
|
<PlaybackTimer playback={data.playback as Playback} />
|
||||||
<PlaybackButtons playback={data.playback} noEvents={data.numEvents < 1} />
|
<PlaybackButtons
|
||||||
|
playback={data.playback}
|
||||||
|
numEvents={data.numEvents}
|
||||||
|
selectedEventIndex={data.selectedEventIndex}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,12 @@ import style from './PlaybackButtons.module.scss';
|
|||||||
|
|
||||||
interface PlaybackButtonsProps {
|
interface PlaybackButtonsProps {
|
||||||
playback: Playback;
|
playback: Playback;
|
||||||
noEvents: boolean;
|
numEvents: number;
|
||||||
|
selectedEventIndex: number | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function PlaybackButtons(props: PlaybackButtonsProps) {
|
export default function PlaybackButtons(props: PlaybackButtonsProps) {
|
||||||
const { playback, noEvents } = props;
|
const { playback, numEvents, selectedEventIndex } = props;
|
||||||
|
|
||||||
const isRolling = playback === Playback.Roll;
|
const isRolling = playback === Playback.Roll;
|
||||||
const isPlaying = playback === Playback.Play;
|
const isPlaying = playback === Playback.Play;
|
||||||
@@ -29,9 +30,16 @@ export default function PlaybackButtons(props: PlaybackButtonsProps) {
|
|||||||
const isArmed = playback === Playback.Armed;
|
const isArmed = playback === Playback.Armed;
|
||||||
const isStopped = playback === Playback.Stop;
|
const isStopped = playback === Playback.Stop;
|
||||||
|
|
||||||
|
const isFirst = selectedEventIndex === 0;
|
||||||
|
const isLast = selectedEventIndex === numEvents - 1;
|
||||||
|
const noEvents = numEvents === 0;
|
||||||
|
|
||||||
|
const disableGo = isRolling || noEvents || isLast;
|
||||||
|
const disablePrev = isRolling || noEvents || isFirst;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.buttonContainer}>
|
<div className={styles.buttonContainer}>
|
||||||
<TapButton disabled={isRolling} onClick={() => setPlayback.startNext()} aspect='fill' className={styles.go}>
|
<TapButton disabled={disableGo} onClick={() => setPlayback.startNext()} aspect='fill' className={styles.go}>
|
||||||
GO
|
GO
|
||||||
</TapButton>
|
</TapButton>
|
||||||
<div className={style.playbackContainer}>
|
<div className={style.playbackContainer}>
|
||||||
@@ -55,12 +63,12 @@ export default function PlaybackButtons(props: PlaybackButtonsProps) {
|
|||||||
</div>
|
</div>
|
||||||
<div className={style.transportContainer}>
|
<div className={style.transportContainer}>
|
||||||
<Tooltip label='Previous event' openDelay={tooltipDelayMid}>
|
<Tooltip label='Previous event' openDelay={tooltipDelayMid}>
|
||||||
<TapButton onClick={() => setPlayback.previous()} disabled={isRolling || noEvents}>
|
<TapButton onClick={() => setPlayback.previous()} disabled={disablePrev}>
|
||||||
<IoPlaySkipBack />
|
<IoPlaySkipBack />
|
||||||
</TapButton>
|
</TapButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<Tooltip label='Next event' openDelay={tooltipDelayMid}>
|
<Tooltip label='Next event' openDelay={tooltipDelayMid}>
|
||||||
<TapButton onClick={() => setPlayback.next()} disabled={isRolling || noEvents}>
|
<TapButton onClick={() => setPlayback.next()} disabled={disableGo}>
|
||||||
<IoPlaySkipForward />
|
<IoPlaySkipForward />
|
||||||
</TapButton>
|
</TapButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|||||||
Reference in New Issue
Block a user