import * as constants from "constants"; import React from 'react'; import { Icon, Tooltip, Popover } from 'UI'; import cn from 'classnames'; import { RealReplayTimeConnected, ReduxTime } from '../Time'; // @ts-ignore import styles from '../controls.module.css'; import { SkipButton } from 'App/player-ui'; import { SPEED_OPTIONS } from 'App/player/player/Player'; import PlayingTime from './PlayingTime' interface Props { skip: boolean; speed: number; disabled: boolean; startedAt: number; playButton: JSX.Element; skipIntervals: Record; currentInterval: number; setSkipInterval: (interval: number) => void; backTenSeconds: () => void; forthTenSeconds: () => void; toggleSpeed: (speedIndex: number) => void; toggleSkip: () => void; sessionTz?: string; } export const TimeMode = { Real: 'real', UserReal: 'user_real', Timestamp: 'current', } as const export type ITimeMode = typeof TimeMode[keyof typeof TimeMode] function PlayerControls(props: Props) { const { skip, speed, disabled, playButton, backTenSeconds, forthTenSeconds, toggleSpeed, toggleSkip, skipIntervals, setSkipInterval, currentInterval, startedAt, sessionTz, } = props; const [showTooltip, setShowTooltip] = React.useState(false); const [timeMode, setTimeMode] = React.useState(localStorage.getItem('__or_player_time_mode') as ITimeMode); const speedRef = React.useRef(null); const arrowBackRef = React.useRef(null); const arrowForwardRef = React.useRef(null); const skipRef = React.useRef(null); const saveTimeMode = (mode: ITimeMode) => { localStorage.setItem('__or_player_time_mode', mode); setTimeMode(mode); } React.useEffect(() => { const handleKeyboard = (e: KeyboardEvent) => { if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) { return; } if (e.key === 'ArrowRight') { arrowForwardRef.current?.focus(); } if (e.key === 'ArrowLeft') { arrowBackRef.current?.focus(); } if (e.key === 'ArrowDown') { speedRef.current?.focus(); } if (e.key === 'ArrowUp') { speedRef.current?.focus(); } }; document.addEventListener('keydown', handleKeyboard); return () => document.removeEventListener('keydown', handleKeyboard); }, [speedRef, arrowBackRef, arrowForwardRef]); const toggleTooltip = () => { setShowTooltip(!showTooltip); }; return (
{playButton}
{/* @ts-ignore */}
(
Jump (Secs)
{Object.keys(skipIntervals).map((interval) => (
{ close(); setSkipInterval(parseInt(interval, 10)); }} className={cn( 'py-2 px-4 cursor-pointer w-full text-left font-semibold', 'hover:bg-active-blue border-t border-borderColor-gray-light-shade' )} > {interval} s
))}
)} >
{/* @ts-ignore */} {currentInterval}s
{/* @ts-ignore */} (
Playback speed
{Object.keys(SPEED_OPTIONS).map((index: any) => (
{ close(); toggleSpeed(index); }} className={cn( 'py-2 px-4 cursor-pointer w-full text-left font-semibold', 'hover:bg-active-blue border-t border-borderColor-gray-light-shade' )} > {SPEED_OPTIONS[index]} x
))}
)} >
); } export default PlayerControls;