From bd4adba96611fca28988140c5b398967c7b4394a Mon Sep 17 00:00:00 2001 From: karishmas6 Date: Fri, 14 Jun 2024 21:35:04 +0530 Subject: [PATCH] feat: recording --- src/pages/RecordingPage.tsx | 127 ++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/pages/RecordingPage.tsx diff --git a/src/pages/RecordingPage.tsx b/src/pages/RecordingPage.tsx new file mode 100644 index 00000000..cb87f5b0 --- /dev/null +++ b/src/pages/RecordingPage.tsx @@ -0,0 +1,127 @@ +import React, { useCallback, useEffect, useState } from 'react'; +import { Grid } from '@mui/material'; +import { BrowserContent } from "../components/organisms/BrowserContent"; +import { startRecording, getActiveBrowserId } from "../api/recording"; +import { LeftSidePanel } from "../components/organisms/LeftSidePanel"; +import { RightSidePanel } from "../components/organisms/RightSidePanel"; +import { Loader } from "../components/atoms/Loader"; +import { useSocketStore } from "../context/socket"; +import { useBrowserDimensionsStore } from "../context/browserDimensions"; +import { useGlobalInfoStore } from "../context/globalInfo"; +import { editRecordingFromStorage } from "../api/storage"; +import { WhereWhatPair } from "@wbr-project/wbr-interpret"; + +interface RecordingPageProps { + recordingName?: string; +} + +export interface PairForEdit { + pair: WhereWhatPair | null, + index: number, +} + +export const RecordingPage = ({ recordingName }: RecordingPageProps) => { + + const [isLoaded, setIsLoaded] = React.useState(false); + const [hasScrollbar, setHasScrollbar] = React.useState(false); + const [pairForEdit, setPairForEdit] = useState({ + pair: null, + index: 0, + }); + + const browserContentRef = React.useRef(null); + const workflowListRef = React.useRef(null); + + const { setId, socket } = useSocketStore(); + const { setWidth } = useBrowserDimensionsStore(); + const { browserId, setBrowserId } = useGlobalInfoStore(); + + const handleSelectPairForEdit = (pair: WhereWhatPair, index: number) => { + setPairForEdit({ + pair, + index, + }); + }; + + //resize browser content when loaded event is fired + useEffect(() => changeBrowserDimensions(), [isLoaded]) + + useEffect(() => { + let isCancelled = false; + const handleRecording = async () => { + const id = await getActiveBrowserId(); + if (!isCancelled) { + if (id) { + setId(id); + setBrowserId(id); + setIsLoaded(true); + } else { + const newId = await startRecording() + setId(newId); + setBrowserId(newId); + } + } + }; + + handleRecording(); + + return () => { + isCancelled = true; + } + }, [setId]); + + const changeBrowserDimensions = useCallback(() => { + if (browserContentRef.current) { + const currentWidth = Math.floor(browserContentRef.current.getBoundingClientRect().width); + const innerHeightWithoutNavBar = window.innerHeight - 54.5; + if ( innerHeightWithoutNavBar <= (currentWidth / 1.6)) { + setWidth(currentWidth - 10); + setHasScrollbar(true); + } else { + setWidth(currentWidth); + } + socket?.emit("rerender"); + } + }, [socket]); + + const handleLoaded = useCallback(() => { + if (recordingName && browserId) { + editRecordingFromStorage(browserId, recordingName).then(() => setIsLoaded(true)); + } else { + if (browserId === 'new-recording') { + socket?.emit('new-recording'); + } + setIsLoaded(true); + } + }, [socket, browserId, recordingName, isLoaded]) + + useEffect(() => { + socket?.on('loaded', handleLoaded); + return () => { + socket?.off('loaded', handleLoaded) + } + }, [socket, handleLoaded]); + + return ( +
+ {isLoaded ? + + {/* + + */} + + + + {/* + + */} + + : } +
+ ); +};