import { Box, Button, Dialog, Flex, Grid, Group, Modal, ScrollArea, Text, } from "@mantine/core"; import type { IDataTakeOver, IScenario, TLine, TStation, } from "../untils/types"; import TerminalCLI from "./TerminalXTerm"; import type { Socket } from "socket.io-client"; import classes from "./Component.module.css"; import { useEffect, useMemo, useRef, useState } from "react"; import { IconCircleCheckFilled } from "@tabler/icons-react"; import { ButtonDPELP } from "./ButtonAction"; const ModalTerminal = ({ opened, onClose, line, socket, stationItem, scenarios, dataRequestTakeOver, countDownRequest, disableRequestTakeOver, setDisableRequestTakeOver, setCountDownRequest, setDataRequestTakeOver, }: { opened: boolean; onClose: () => void; line: TLine | undefined; socket: Socket | null; stationItem: TStation | undefined; scenarios: IScenario[]; dataRequestTakeOver: IDataTakeOver | undefined; countDownRequest: number; disableRequestTakeOver: boolean; setDisableRequestTakeOver: (value: React.SetStateAction) => void; setCountDownRequest: (value: React.SetStateAction) => void; setDataRequestTakeOver: ( value: React.SetStateAction ) => void; }) => { const user = useMemo(() => { return localStorage.getItem("user") && typeof localStorage.getItem("user") === "string" ? JSON.parse(localStorage.getItem("user") || "") : null; }, []); const [isDisable, setIsDisable] = useState(false); const intervalTakeOverRef = useRef(null); useEffect(() => { if ( typeof dataRequestTakeOver?.userName !== "undefined" && line?.userOpenCLI === user?.userName && dataRequestTakeOver?.userName !== user?.userName ) { if (dataRequestTakeOver?.userName) { intervalTakeOverRef.current = setInterval(() => { socket?.emit("open_cli", { lineId: line?.id, stationId: line?.station_id, userEmail: user?.userName, userName: user?.userName, }); socket?.emit("request_take_over", { station_id: line?.station_id, }); setDisableRequestTakeOver(false); setCountDownRequest(0); if (intervalTakeOverRef.current) clearInterval(intervalTakeOverRef.current); }, 20000); } } else { if (intervalTakeOverRef.current) clearInterval(intervalTakeOverRef.current); } }, [dataRequestTakeOver?.userName]); return ( { onClose(); if (line?.userOpenCLI === user?.userName) socket?.emit("close_cli", { lineId: line?.id, stationId: line?.station_id, }); }} size={"80%"} style={{ position: "absolute", left: 0 }} title={ Line number:{" "} {line?.lineNumber || line?.line_number || ""} - {line?.port || ""} {line?.status === "connected" && ( )}
{line?.userOpenCLI ? (line?.userOpenCLI === user?.userName ? "You are" : line?.userOpenCLI + " is") + " using" : "Terminal is used"}
PID: {line?.inventory?.pid || ""}
SN: {line?.inventory?.sn || ""}
VID: {line?.inventory?.vid || ""}
} > { setIsDisable(true); setTimeout(() => { setIsDisable(false); }, 10000); }} /> {scenarios.map((scenario) => ( ))}
{`${`${dataRequestTakeOver?.userName} ${ dataRequestTakeOver?.userEmail ? `(${dataRequestTakeOver?.userEmail})` : "" }`} want to take over this line? ${ countDownRequest > 0 && typeof dataRequestTakeOver?.userName !== "undefined" && line?.userOpenCLI === user?.userName ? `(${countDownRequest}s)` : "" }`}
); }; export default ModalTerminal;