* feat ui: login flow for spot extension * spot list, store and service created * some fixing for header * start work on single spot * spot player start * header for player, comments, icons, etc * split stuff into compoennts, create player state manager * player controls, activity panel etc etc * comments, empty page, rename and stuff * interval buttons etc * access modal * pubkey support * fix tooltip * limit 10 -> 9 * hls lib instead of videojs * some warnings * fix date display for exp * change public links * display more client data * fix cleaning, init comment * map network to replay player network ev * stream support, console panel, close panels on X * fixing streaming, destroy on leave * fix autoplay * show notification on spot login * fix spot login * backup player added, fix audio issue * show thumbnail when no video, add spot roles * add poster thumbnail * some fixes to video check * fix events jump * fix play btn * try catch over pubkey * icons * spot login pinging * move spot login flow to login comp, use separate spot login path for unique jwt * invalidate spot jwt on logout * add visual data on page load event * typo fix * issue to copy change * share spot url f
97 lines
2.5 KiB
TypeScript
97 lines
2.5 KiB
TypeScript
import React from 'react';
|
|
import { Icon } from 'UI';
|
|
import { Button } from 'antd';
|
|
import PlayingTime from './PlayingTime';
|
|
import { JumpBack, IntervalSelector, JumpForward, SpeedOptions } from './ControlsComponents';
|
|
|
|
interface Props {
|
|
skip: boolean;
|
|
speed: number;
|
|
disabled: boolean;
|
|
startedAt: number;
|
|
playButton: JSX.Element;
|
|
skipIntervals: Record<number, number>;
|
|
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 [timeMode, setTimeMode] = React.useState<ITimeMode>(
|
|
localStorage.getItem('__or_player_time_mode') as ITimeMode
|
|
);
|
|
|
|
const saveTimeMode = (mode: ITimeMode) => {
|
|
localStorage.setItem('__or_player_time_mode', mode);
|
|
setTimeMode(mode);
|
|
};
|
|
|
|
return (
|
|
<div className="flex items-center">
|
|
{playButton}
|
|
<div className="mx-1" />
|
|
|
|
<PlayingTime
|
|
timeMode={timeMode}
|
|
setTimeMode={saveTimeMode}
|
|
startedAt={startedAt}
|
|
sessionTz={sessionTz}
|
|
/>
|
|
|
|
<div className="rounded ml-1 bg-white border-gray-lighter flex items-center" style={{ gap: 1 }}>
|
|
<JumpBack backTenSeconds={backTenSeconds} currentInterval={currentInterval} />
|
|
<IntervalSelector
|
|
skipIntervals={skipIntervals}
|
|
setSkipInterval={setSkipInterval}
|
|
currentInterval={currentInterval}
|
|
/>
|
|
<JumpForward forthTenSeconds={forthTenSeconds} currentInterval={currentInterval} />
|
|
</div>
|
|
|
|
<div className="flex items-center gap-2 ml-2">
|
|
<SpeedOptions
|
|
toggleSpeed={toggleSpeed}
|
|
disabled={disabled}
|
|
speed={speed}
|
|
/>
|
|
<Button
|
|
onClick={toggleSkip}
|
|
disabled={disabled}
|
|
size={'small'}
|
|
className={'flex items-center font-semibold'}
|
|
>
|
|
{skip && <Icon name="check" size="24" />}
|
|
<span>Skip Inactivity</span>
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default PlayerControls;
|