ux: content aware playback (#364)

This commit is contained in:
Carlos Valente
2023-04-26 22:07:26 +02:00
committed by GitHub
parent 4bceae65ab
commit 10673b3ee1
3 changed files with 19 additions and 6 deletions
@@ -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>