Dwinzo_dev/app/src/components/ui/componets/RealTimeVisulization.tsx

148 lines
4.0 KiB
TypeScript
Raw Normal View History

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-26 07:02:09 +00:00
import useModuleStore from "../../../store/useModuleStore";
import { getZonesApi } from "../../../services/realTimeVisulization/zoneData/getZones";
2025-03-25 06:17:41 +00:00
type Side = "top" | "bottom" | "left" | "right";
type FormattedZoneData = Record<
string,
{
activeSides: Side[];
panelOrder: Side[];
lockedPanels: Side[];
zoneCentrePoint: number[];
widgets: Widget[];
}
>;
type Widget = {
2025-03-25 06:17:41 +00:00
id: string;
type: string;
title: string;
panel: Side;
data: any;
};
type Zone = {
zoneId: string;
zoneName: string;
points: number[][];
layer: number;
};
2025-03-25 06:17:41 +00:00
const RealTimeVisulization: React.FC = () => {
const [hiddenPanels, setHiddenPanels] = React.useState<Side[]>([]);
const containerRef = useRef<HTMLDivElement>(null);
const { isPlaying } = usePlayButtonStore();
2025-03-26 07:02:09 +00:00
const { activeModule } = useModuleStore();
2025-03-25 06:17:41 +00:00
const [zonesData, setZonesData] = useState<FormattedZoneData>({});
2025-03-25 06:17:41 +00:00
const { selectedZone, setSelectedZone } = useSelectedZoneStore();
2025-03-26 11:30:37 +00:00
// useEffect(() => {
// async function GetZoneData() {
// try {
// const response: { data: Zone[] } | undefined = await getZonesApi(
// "hexrfactory"
// );
2025-03-26 11:30:37 +00:00
// if (!response || !response.data) {
// return;
// }
// const formattedData = response?.data?.reduce<FormattedZoneData>(
// (acc, zone) => {
// acc[zone.zoneName] = {
// activeSides: [],
// panelOrder: [],
// lockedPanels: [],
// zoneCentrePoint: [],
// widgets: [],
// };
// return acc;
// },
// {}
// );
// setZonesData(formattedData);
// } catch (error) { }
// }
// GetZoneData();
// }, []);
useEffect(() => {
console.log('zonesData: ', zonesData);
}, [zonesData]);
2025-03-26 11:30:37 +00:00
// useEffect(() => {
// setZonesData((prev) => {
// if (!selectedZone) return prev;
2025-03-26 11:30:37 +00:00
// return {
// ...prev,
// [selectedZone.zoneName]: {
// ...prev[selectedZone.zoneName], // Keep existing properties
// activeSides: selectedZone.activeSides || [],
// panelOrder: selectedZone.panelOrder || [],
// lockedPanels: selectedZone.lockedPanels || [],
// widgets: selectedZone.widgets || [],
// },
// };
// });
// }, [selectedZone]);
2025-03-25 06:17:41 +00:00
return (
<div
ref={containerRef}
id="real-time-vis-canvas"
2025-03-26 08:22:10 +00:00
className={`realTime-viz canvas ${isPlaying ? "playingFlase" : ""}`}
2025-03-25 06:17:41 +00:00
style={{
2025-03-26 07:02:09 +00:00
height: isPlaying || activeModule !== "visualization" ? "100vh" : "",
width: isPlaying || activeModule !== "visualization" ? "100vw" : "",
left: isPlaying || activeModule !== "visualization" ? "0%" : "",
2025-03-25 06:17:41 +00:00
}}
>
2025-03-25 11:00:33 +00:00
<div
className="scene-container"
2025-03-26 07:02:09 +00:00
style={{
height: "100%",
width: "100%",
borderRadius: isPlaying || activeModule !== "visualization" ? "" : "6px",
2025-03-26 07:02:09 +00:00
}}
2025-03-25 11:00:33 +00:00
>
<Scene />
</div>
2025-03-26 07:02:09 +00:00
{activeModule === "visualization" && (
<>
<DisplayZone
zonesData={zonesData}
selectedZone={selectedZone}
setSelectedZone={setSelectedZone}
/>
{!isPlaying && (
<AddButtons
hiddenPanels={hiddenPanels}
setHiddenPanels={setHiddenPanels}
selectedZone={selectedZone}
setSelectedZone={setSelectedZone}
/>
)}
<Panel
selectedZone={selectedZone}
setSelectedZone={setSelectedZone}
hiddenPanels={hiddenPanels}
/>
</>
2025-03-25 11:00:33 +00:00
)}
2025-03-25 06:17:41 +00:00
</div>
);
};
export default RealTimeVisulization;