openreplay/frontend/app/components/Session_/Player/Controls/components/PlayerControls.tsx
Delirium b17c3ab8d7
Spots UI (#2385)
* 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
2024-07-31 09:56:41 +02:00

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;