Files
parcer/src/components/organisms/BrowserWindow.tsx

63 lines
2.0 KiB
TypeScript
Raw Normal View History

2024-06-14 21:47:42 +05:30
import React, { useCallback, useEffect, useState } from 'react';
import { useSocketStore } from '../../context/socket';
import Canvas from "../atoms/canvas";
import { useBrowserDimensionsStore } from "../../context/browserDimensions";
export const BrowserWindow = () => {
const [canvasRef, setCanvasReference] = useState<React.RefObject<HTMLCanvasElement> | undefined>(undefined);
const [screenShot, setScreenShot] = useState<string>("");
2024-06-14 23:17:32 +05:30
const [highlighterData, setHighlighterData] = useState<{ rect: DOMRect, selector: string } | null>(null);
2024-06-14 21:47:42 +05:30
const { socket } = useSocketStore();
const { width, height } = useBrowserDimensionsStore();
const screencastHandler = useCallback((data: string) => {
setScreenShot(data);
2024-07-23 10:18:38 +05:30
}, []);
2024-06-14 21:47:42 +05:30
2024-06-14 23:17:32 +05:30
useEffect(() => {
2024-06-14 21:47:42 +05:30
if (socket) {
socket.on("screencast", screencastHandler);
}
if (canvasRef?.current) {
drawImage(screenShot, canvasRef.current);
}
return () => {
socket?.off("screencast", screencastHandler);
}
}, [screenShot, canvasRef, socket, screencastHandler]);
2024-06-14 23:17:32 +05:30
const highlighterHandler = useCallback((data: { rect: DOMRect, selector: string }) => {
2024-06-14 21:47:42 +05:30
setHighlighterData(data);
2024-07-23 10:18:38 +05:30
}, [])
2024-06-14 21:47:42 +05:30
2024-06-14 23:17:32 +05:30
useEffect(() => {
2024-06-14 21:47:42 +05:30
if (socket) {
socket.on("highlighter", highlighterHandler);
}
return () => {
socket?.off("highlighter", highlighterHandler);
};
}, [socket, highlighterHandler]);
2024-06-25 22:39:29 +05:30
2024-06-14 21:47:42 +05:30
return (
<div style={{ position: 'relative' }}>
2024-06-14 23:17:32 +05:30
<Canvas
onCreateRef={setCanvasReference}
width={width}
height={height}
2024-07-23 10:18:38 +05:30
highlighterData={highlighterData}
2024-06-14 21:47:42 +05:30
/>
2024-07-21 23:51:55 +05:30
</div>
2024-06-14 21:47:42 +05:30
);
};
2024-06-14 23:17:32 +05:30
const drawImage = (image: string, canvas: HTMLCanvasElement): void => {
2024-06-14 21:47:42 +05:30
const ctx = canvas.getContext('2d');
const img = new Image();
img.src = image;
img.onload = () => {
URL.revokeObjectURL(img.src);
2024-07-14 00:46:39 +05:30
ctx?.drawImage(img, 0, 0, 1280, 720);
2024-06-14 21:47:42 +05:30
};
2024-07-14 00:46:39 +05:30
};