Files
parcer/legacy/src/LeftSidePanel.tsx

132 lines
4.1 KiB
TypeScript
Raw Normal View History

2024-06-24 22:42:07 +05:30
import { Box, Paper, Tab, Tabs } from "@mui/material";
import React, { useCallback, useEffect, useState } from "react";
2025-11-25 15:57:42 +05:30
import { getActiveWorkflow, getParamsOfActiveWorkflow } from "../../src/api/workflow";
import { useSocketStore } from '../../src/context/socket';
2024-07-31 22:46:38 +05:30
import { WhereWhatPair, WorkflowFile } from "maxun-core";
2025-11-25 15:57:42 +05:30
import { emptyWorkflow } from "../../src/shared/constants";
import { LeftSidePanelContent } from "./LeftSidePanelContent";
2025-11-25 15:57:42 +05:30
import { useGlobalInfoStore } from "../../src/context/globalInfo";
2024-06-24 22:42:07 +05:30
import { TabContext, TabPanel } from "@mui/lab";
import { LeftSidePanelSettings } from "./LeftSidePanelSettings";
2025-11-25 15:57:42 +05:30
import { RunSettings } from "../../src/components/run/RunSettings";
2024-06-24 22:42:07 +05:30
const fetchWorkflow = (id: string, callback: (response: WorkflowFile) => void) => {
getActiveWorkflow(id).then(
2024-08-30 03:16:44 +05:30
(response) => {
if (response) {
2024-06-24 22:42:07 +05:30
callback(response);
} else {
throw new Error("No workflow found");
}
}
2025-06-26 22:43:29 +05:30
).catch((error) => { console.log(`Failed to fetch workflow:`,error.message) })
2024-06-24 22:42:07 +05:30
};
interface LeftSidePanelProps {
sidePanelRef: HTMLDivElement | null;
alreadyHasScrollbar: boolean;
recordingName: string;
2024-08-30 03:16:44 +05:30
handleSelectPairForEdit: (pair: WhereWhatPair, index: number) => void;
2024-06-24 22:42:07 +05:30
}
export const LeftSidePanel = (
{ sidePanelRef, alreadyHasScrollbar, recordingName, handleSelectPairForEdit }: LeftSidePanelProps) => {
const [workflow, setWorkflow] = useState<WorkflowFile>(emptyWorkflow);
const [hasScrollbar, setHasScrollbar] = useState<boolean>(alreadyHasScrollbar);
const [tab, setTab] = useState<string>('recording');
const [params, setParams] = useState<string[]>([]);
const [settings, setSettings] = React.useState<RunSettings>({
maxConcurrency: 1,
maxRepeats: 1,
debug: false,
});
const { id, socket } = useSocketStore();
const { setRecordingLength } = useGlobalInfoStore();
const workflowHandler = useCallback((data: WorkflowFile) => {
setWorkflow(data);
setRecordingLength(data.workflow.length);
}, [workflow])
useEffect(() => {
// fetch the workflow every time the id changes
if (id) {
fetchWorkflow(id, workflowHandler);
}
// fetch workflow in 15min intervals
2024-08-30 03:16:44 +05:30
let interval = setInterval(() => {
if (id) {
fetchWorkflow(id, workflowHandler);
}
2024-10-11 10:20:24 +05:30
}, (900 * 60 * 15));
2024-06-24 22:42:07 +05:30
return () => clearInterval(interval)
}, [id]);
useEffect(() => {
if (socket) {
socket.on("workflow", workflowHandler);
}
if (sidePanelRef) {
const workflowListHeight = sidePanelRef.clientHeight;
const innerHeightWithoutNavbar = window.innerHeight - 70;
if (innerHeightWithoutNavbar <= workflowListHeight) {
if (!hasScrollbar) {
setHasScrollbar(true);
}
} else {
if (hasScrollbar && !alreadyHasScrollbar) {
setHasScrollbar(false);
}
}
}
return () => {
socket?.off('workflow', workflowHandler);
}
}, [socket, workflowHandler]);
return (
<Paper
sx={{
height: '100%',
width: '100%',
backgroundColor: 'lightgray',
display: 'flex',
alignItems: 'center',
justifyContent: 'flex-start',
flexDirection: 'column',
}}
>
2024-10-19 20:38:43 +05:30
{/* <SidePanelHeader /> */}
2024-06-24 22:42:07 +05:30
<TabContext value={tab}>
2024-08-30 03:16:44 +05:30
<Tabs value={tab} onChange={(e, newTab) => setTab(newTab)}>
<Tab label="Recording" value='recording' />
<Tab label="Settings" value='settings' onClick={() => {
getParamsOfActiveWorkflow(id).then((response) => {
if (response) {
setParams(response);
}
})
}} />
</Tabs>
<TabPanel value='recording' sx={{ padding: '0px' }}>
2024-06-24 22:42:07 +05:30
<LeftSidePanelContent
workflow={workflow}
updateWorkflow={setWorkflow}
recordingName={recordingName}
handleSelectPairForEdit={handleSelectPairForEdit}
/>
</TabPanel>
<TabPanel value='settings'>
<LeftSidePanelSettings params={params}
2024-08-30 03:16:44 +05:30
settings={settings} setSettings={setSettings} />
2024-06-24 22:42:07 +05:30
</TabPanel>
</TabContext>
</Paper>
);
};