2025-03-25 06:17:41 +00:00
|
|
|
import React, { useEffect, useState, useRef } from "react";
|
|
|
|
import { usePlayButtonStore } from "../../../store/usePlayButtonStore";
|
|
|
|
import Panel from "./Panel";
|
|
|
|
import AddButtons from "./AddButtons";
|
|
|
|
import { useSelectedZoneStore } from "../../../store/useZoneStore";
|
|
|
|
import DisplayZone from "./DisplayZone";
|
2025-03-25 11:00:33 +00:00
|
|
|
import Scene from "../../../modules/scene/scene";
|
2025-03-25 06:17:41 +00:00
|
|
|
|
|
|
|
type Side = "top" | "bottom" | "left" | "right";
|
|
|
|
|
|
|
|
interface Widget {
|
|
|
|
id: string;
|
|
|
|
type: string;
|
|
|
|
title: string;
|
|
|
|
panel: Side;
|
|
|
|
data: any;
|
|
|
|
}
|
|
|
|
|
|
|
|
const RealTimeVisulization: React.FC = () => {
|
|
|
|
const [hiddenPanels, setHiddenPanels] = React.useState<Side[]>([]);
|
|
|
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
|
|
const [zonesData, setZonesData] = useState<{
|
|
|
|
[key: string]: {
|
|
|
|
activeSides: Side[];
|
|
|
|
panelOrder: Side[];
|
|
|
|
lockedPanels: Side[];
|
|
|
|
widgets: Widget[];
|
|
|
|
};
|
|
|
|
}>({
|
|
|
|
"Manufacturing unit": {
|
|
|
|
activeSides: [],
|
|
|
|
panelOrder: [],
|
|
|
|
lockedPanels: [],
|
|
|
|
widgets: [],
|
|
|
|
},
|
|
|
|
"Assembly unit": {
|
|
|
|
activeSides: [],
|
|
|
|
panelOrder: [],
|
|
|
|
lockedPanels: [],
|
|
|
|
widgets: [],
|
|
|
|
},
|
|
|
|
"Packing unit": {
|
|
|
|
activeSides: [],
|
|
|
|
panelOrder: [],
|
|
|
|
lockedPanels: [],
|
|
|
|
widgets: [],
|
|
|
|
},
|
|
|
|
Warehouse: {
|
|
|
|
activeSides: [],
|
|
|
|
panelOrder: [],
|
|
|
|
lockedPanels: [],
|
|
|
|
widgets: [],
|
|
|
|
},
|
|
|
|
Inventory: {
|
|
|
|
activeSides: [],
|
|
|
|
panelOrder: [],
|
|
|
|
lockedPanels: [],
|
|
|
|
widgets: [],
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
const { isPlaying } = usePlayButtonStore();
|
|
|
|
|
|
|
|
const { selectedZone, setSelectedZone } = useSelectedZoneStore();
|
|
|
|
useEffect(() => {
|
|
|
|
setZonesData((prev) => ({
|
|
|
|
...prev,
|
|
|
|
[selectedZone.zoneName]: selectedZone,
|
|
|
|
}));
|
|
|
|
}, [selectedZone]);
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div
|
|
|
|
ref={containerRef}
|
|
|
|
id="real-time-vis-canvas"
|
2025-03-25 08:55:51 +00:00
|
|
|
className={`realTime-viz canvas ${!isPlaying ? "playActiveFalse" : ""}`}
|
2025-03-25 06:17:41 +00:00
|
|
|
style={{
|
|
|
|
height: isPlaying ? "100vh" : "",
|
|
|
|
left: isPlaying ? "0%" : "",
|
|
|
|
}}
|
|
|
|
>
|
2025-03-25 11:00:33 +00:00
|
|
|
<div
|
|
|
|
className="scene-container"
|
|
|
|
style={{ height: "100%", width: "100%" }}
|
|
|
|
>
|
|
|
|
<Scene />
|
|
|
|
</div>
|
|
|
|
{!isPlaying && (
|
|
|
|
<AddButtons
|
|
|
|
hiddenPanels={hiddenPanels}
|
|
|
|
setHiddenPanels={setHiddenPanels}
|
|
|
|
selectedZone={selectedZone}
|
|
|
|
setSelectedZone={setSelectedZone}
|
|
|
|
/>
|
|
|
|
)}
|
|
|
|
<DisplayZone
|
|
|
|
zonesData={zonesData}
|
2025-03-25 10:25:48 +00:00
|
|
|
selectedZone={selectedZone}
|
|
|
|
setSelectedZone={setSelectedZone}
|
|
|
|
/>
|
|
|
|
<Panel
|
|
|
|
selectedZone={selectedZone}
|
|
|
|
hiddenPanels={hiddenPanels}
|
|
|
|
setSelectedZone={setSelectedZone}
|
|
|
|
/>{" "}
|
2025-03-25 06:17:41 +00:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default RealTimeVisulization;
|