-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Expand file tree
/
Copy pathPlayer.tsx
More file actions
71 lines (67 loc) · 1.95 KB
/
Copy pathPlayer.tsx
File metadata and controls
71 lines (67 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/// <reference types="chrome"/>
import { useRef, useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
import Replayer from 'rrweb-player';
import {
Box,
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
Center,
} from '@chakra-ui/react';
import { getEvents, getSession } from '~/utils/storage';
export default function Player() {
const playerElRef = useRef<HTMLDivElement>(null);
const playerRef = useRef<Replayer | null>(null);
const { sessionId } = useParams();
const [sessionName, setSessionName] = useState('');
useEffect(() => {
if (!sessionId) return;
getSession(sessionId)
.then((session) => {
setSessionName(session.name);
})
.catch((err) => {
console.error(err);
});
getEvents(sessionId)
.then((events) => {
if (!playerElRef.current) return;
const manifest = chrome.runtime.getManifest();
const rrwebPlayerVersion = manifest.version_name || manifest.version;
const linkEl = document.createElement('link');
linkEl.href = `https://cdn.jsdelivr.net/npm/rrweb-player@${rrwebPlayerVersion}/dist/style.min.css`;
linkEl.rel = 'stylesheet';
document.head.appendChild(linkEl);
playerRef.current = new Replayer({
target: playerElRef.current as HTMLElement,
props: {
events,
autoPlay: true,
},
});
})
.catch((err) => {
console.error(err);
});
return () => {
// eslint-disable-next-line
playerRef.current?.pause();
};
}, [sessionId]);
return (
<>
<Breadcrumb mb={5} fontSize="md">
<BreadcrumbItem>
<BreadcrumbLink href="#">Sessions</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbItem>
<BreadcrumbLink>{sessionName}</BreadcrumbLink>
</BreadcrumbItem>
</Breadcrumb>
<Center>
<Box ref={playerElRef}></Box>
</Center>
</>
);
}