From ccd6298d1781e511795fa0e2634214bbac32df2d Mon Sep 17 00:00:00 2001 From: Vishnu <vishnu@hexrfactory.com> Date: Thu, 8 May 2025 14:18:02 +0530 Subject: [PATCH] Refactor canvas element references to use consistent ID for workspace --- .../collaboration/camera/collabCams.tsx | 25 +--------- .../visualization/RealTimeVisulization.tsx | 2 +- .../functions/captureVisualization.ts | 2 +- .../visualization/functions/handleUiDrop.ts | 2 +- .../widgets/2d/DraggableWidget.tsx | 2 +- .../widgets/3d/Dropped3dWidget.tsx | 6 +-- .../floating/DroppedFloatingWidgets.tsx | 48 +++---------------- .../visualization/widgets/panel/Panel.tsx | 5 +- app/src/pages/Project.tsx | 2 +- 9 files changed, 18 insertions(+), 76 deletions(-) diff --git a/app/src/modules/collaboration/camera/collabCams.tsx b/app/src/modules/collaboration/camera/collabCams.tsx index 0b01af1..6ce26b0 100644 --- a/app/src/modules/collaboration/camera/collabCams.tsx +++ b/app/src/modules/collaboration/camera/collabCams.tsx @@ -12,7 +12,6 @@ import CollabUserIcon from "./collabUserIcon"; import useModuleStore from "../../../store/useModuleStore"; import { getAvatarColor } from "../functions/getAvatarColor"; import { useSelectedUserStore } from "../../../store/useCollabStore"; -import { opacity } from "html2canvas/dist/types/css/property-descriptors/opacity"; const CamModelsGroup = () => { const navigate = useNavigate(); @@ -166,6 +165,7 @@ const CamModelsGroup = () => { socket.off("userDisConnectResponse"); socket.off("cameraUpdateResponse"); }; + // eslint-disable-next-line react-hooks/exhaustive-deps }, [email, loader, navigate, setActiveUsers, socket]); useFrame(() => { @@ -232,30 +232,9 @@ const CamModelsGroup = () => { }); } }); + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - // collide validate - const collisionThreshold = 0.001; - - const collidedCamUUIDs = new Set<string>(); - - for (let i = 0; i < cams.length; i++) { - for (let j = i + 1; j < cams.length; j++) { - const posA = cams[i].position; - const posB = cams[j].position; - - const distSquared = - Math.pow(posA.x - posB.x, 2) + - Math.pow(posA.y - posB.y, 2) + - Math.pow(posA.z - posB.z, 2); - - if (distSquared < collisionThreshold ** 2) { - collidedCamUUIDs.add(cams[i].uuid); - collidedCamUUIDs.add(cams[j].uuid); - } - } - } - return ( <group ref={groupRef} name="Cam-Model-Group"> {cams.map((cam, index) => ( diff --git a/app/src/modules/visualization/RealTimeVisulization.tsx b/app/src/modules/visualization/RealTimeVisulization.tsx index eaff2af..8bf1613 100644 --- a/app/src/modules/visualization/RealTimeVisulization.tsx +++ b/app/src/modules/visualization/RealTimeVisulization.tsx @@ -155,7 +155,7 @@ const RealTimeVisulization: React.FC = () => { height: 0, }); useEffect(() => { - const canvas = document.getElementById("real-time-vis-canvas"); + const canvas = document.getElementById("work-space-three-d-canvas"); if (!canvas) return; const updateCanvasDimensions = () => { diff --git a/app/src/modules/visualization/functions/captureVisualization.ts b/app/src/modules/visualization/functions/captureVisualization.ts index d8d3ba2..291a002 100644 --- a/app/src/modules/visualization/functions/captureVisualization.ts +++ b/app/src/modules/visualization/functions/captureVisualization.ts @@ -1,7 +1,7 @@ import html2canvas from "html2canvas"; export const captureVisualization = async (): Promise<string | null> => { - const container = document.getElementById("real-time-vis-canvas"); + const container = document.getElementById("work-space-three-d-canvas"); if (!container) { console.error("Container element not found"); return null; diff --git a/app/src/modules/visualization/functions/handleUiDrop.ts b/app/src/modules/visualization/functions/handleUiDrop.ts index a70742e..0d02936 100644 --- a/app/src/modules/visualization/functions/handleUiDrop.ts +++ b/app/src/modules/visualization/functions/handleUiDrop.ts @@ -28,7 +28,7 @@ export const createHandleDrop = ({ if (!data || selectedZone.zoneName === "") return; const droppedData = JSON.parse(data); - const canvasElement = document.getElementById("real-time-vis-canvas"); + const canvasElement = document.getElementById("work-space-three-d-canvas"); if (!canvasElement) throw new Error("Canvas element not found"); const rect = canvasElement.getBoundingClientRect(); diff --git a/app/src/modules/visualization/widgets/2d/DraggableWidget.tsx b/app/src/modules/visualization/widgets/2d/DraggableWidget.tsx index 3f22fee..5972405 100644 --- a/app/src/modules/visualization/widgets/2d/DraggableWidget.tsx +++ b/app/src/modules/visualization/widgets/2d/DraggableWidget.tsx @@ -269,7 +269,7 @@ export const DraggableWidget = ({ // Current: Two identical useEffect hooks for canvas dimensions // Remove the duplicate and keep only one useEffect(() => { - const canvas = document.getElementById("real-time-vis-canvas"); + const canvas = document.getElementById("work-space-three-d-canvas"); if (!canvas) return; const updateCanvasDimensions = () => { diff --git a/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx b/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx index 4ca3c31..cf4d97b 100644 --- a/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx +++ b/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx @@ -89,7 +89,7 @@ export default function Dropped3dWidgets() { if (widgetSubOption === "Floating" || widgetSubOption === "2D") return; if (selectedZone.zoneName === "") return; - const canvasElement = document.getElementById("real-time-vis-canvas"); + const canvasElement = document.getElementById("work-space-three-d-canvas"); if (!canvasElement) return; @@ -601,7 +601,7 @@ export default function Dropped3dWidgets() { const handleRightClick3d = (event: React.MouseEvent, id: string) => { event.preventDefault(); - const canvasElement = document.getElementById("real-time-vis-canvas"); + const canvasElement = document.getElementById("work-space-three-d-canvas"); if (!canvasElement) throw new Error("Canvas element not found"); const canvasRect = canvasElement.getBoundingClientRect(); @@ -654,7 +654,7 @@ export default function Dropped3dWidgets() { setSelectedChartId({ id: id, type: type }) event.preventDefault(); const canvasElement = document.getElementById( - "real-time-vis-canvas" + "work-space-three-d-canvas" ); if (!canvasElement) throw new Error("Canvas element not found"); const canvasRect = canvasElement.getBoundingClientRect(); diff --git a/app/src/modules/visualization/widgets/floating/DroppedFloatingWidgets.tsx b/app/src/modules/visualization/widgets/floating/DroppedFloatingWidgets.tsx index ec86fb6..5e26975 100644 --- a/app/src/modules/visualization/widgets/floating/DroppedFloatingWidgets.tsx +++ b/app/src/modules/visualization/widgets/floating/DroppedFloatingWidgets.tsx @@ -1,8 +1,6 @@ -import { WalletIcon } from "../../../../components/icons/3dChartIcons"; import { useEffect, useRef, useState } from "react"; import { useDroppedObjectsStore, - Zones, } from "../../../../store/visualization/useDroppedObjectsStore"; import useModuleStore from "../../../../store/useModuleStore"; import { determinePosition } from "../../functions/determinePosition"; @@ -14,14 +12,12 @@ import { DeleteIcon, } from "../../../../components/icons/ExportCommonIcons"; import DistanceLines from "./DistanceLines"; // Import the DistanceLines component -import { deleteFloatingWidgetApi } from "../../../../services/visulization/zone/deleteFloatingWidget"; import TotalCardComponent from "./cards/TotalCardComponent"; import WarehouseThroughputComponent from "./cards/WarehouseThroughputComponent"; import FleetEfficiencyComponent from "./cards/FleetEfficiencyComponent"; import { useWidgetStore } from "../../../../store/useWidgetStore"; import { useSocketStore } from "../../../../store/store"; -import { useClickOutside } from "../../functions/handleWidgetsOuterClick"; import { usePlayButtonStore } from "../../../../store/usePlayButtonStore"; import { useSelectedZoneStore } from "../../../../store/visualization/useZoneStore"; interface DraggingState { @@ -54,7 +50,7 @@ const DroppedObjects: React.FC = () => { const updateObjectPosition = useDroppedObjectsStore( (state) => state.updateObjectPosition ); - const { setSelectedZone, selectedZone } = useSelectedZoneStore(); + const { selectedZone } = useSelectedZoneStore(); const deleteObject = useDroppedObjectsStore((state) => state.deleteObject); @@ -79,12 +75,8 @@ const DroppedObjects: React.FC = () => { bottom: number | "auto"; } | null>(null); // State to track the current position during drag const animationRef = useRef<number | null>(null); - const { activeModule } = useModuleStore(); const chartWidget = useRef<HTMLDivElement>(null); - // useClickOutside(chartWidget, () => { - // setSelectedChartId(null); - // }); const kebabRef = useRef<HTMLDivElement>(null); // Clean up animation frame on unmount @@ -141,12 +133,6 @@ const DroppedObjects: React.FC = () => { } deleteObject(zoneName, id); - // let res = await deleteFloatingWidgetApi(id, organization); - // s - - // if (res.message === "FloatingWidget deleted successfully") { - // deleteObject(zoneName, id, index); // Call the deleteObject method from the store - // } } catch (error) {} } @@ -160,7 +146,7 @@ const DroppedObjects: React.FC = () => { const obj = zone.objects[index]; const element = event.currentTarget as HTMLElement; element.setPointerCapture(event.pointerId); - const container = document.getElementById("real-time-vis-canvas"); + const container = document.getElementById("work-space-three-d-canvas"); if (!container) return; const rect = container.getBoundingClientRect(); @@ -322,6 +308,7 @@ const DroppedObjects: React.FC = () => { updateObjectPosition(zoneName, draggingIndex.index, boundedPosition); } } catch (error) { + console.log(error); } finally { setDraggingIndex(null); setOffset(null); @@ -343,7 +330,7 @@ const DroppedObjects: React.FC = () => { const handlePointerMove = (event: React.PointerEvent) => { if (!draggingIndex || !offset) return; if (isPlaying === true) return; - const container = document.getElementById("real-time-vis-canvas"); + const container = document.getElementById("work-space-three-d-canvas"); if (!container) return; const rect = container.getBoundingClientRect(); @@ -394,12 +381,6 @@ const DroppedObjects: React.FC = () => { // Update position immediately without animation frame updateObjectPosition(zoneName, draggingIndex.index, newPosition); - // if (!animationRef.current) { - // animationRef.current = requestAnimationFrame(() => { - // updateObjectPosition(zoneName, draggingIndex.index, newPosition); - // animationRef.current = null; - // }); - // } }; const handlePointerUp = async (event: React.PointerEvent<HTMLDivElement>) => { @@ -407,7 +388,7 @@ const DroppedObjects: React.FC = () => { if (!draggingIndex || !offset) return; if (isPlaying === true) return; - const container = document.getElementById("real-time-vis-canvas"); + const container = document.getElementById("work-space-three-d-canvas"); if (!container) return; const rect = container.getBoundingClientRect(); @@ -450,11 +431,6 @@ const DroppedObjects: React.FC = () => { // Save to backend const email = localStorage.getItem("email") || ""; const organization = email?.split("@")[1]?.split(".")[0]; - // const response = await addingFloatingWidgets(zone.zoneId, organization, { - // ...zone.objects[draggingIndex.index], - // position: boundedPosition, - // }); - let updateFloatingWidget = { organization: organization, widget: { @@ -468,21 +444,9 @@ const DroppedObjects: React.FC = () => { visualizationSocket.emit("v2:viz-float:add", updateFloatingWidget); } - // if (response.message === "Widget updated successfully") { - updateObjectPosition(zoneName, draggingIndex.index, boundedPosition); - // } - - // // Clean up - // setDraggingIndex(null); - // setOffset(null); - // setActiveEdges(null); // Clear active edges - // setCurrentPosition(null); // Reset current position - // if (animationRef.current) { - // cancelAnimationFrame(animationRef.current); - // animationRef.current = null; - // } } catch (error) { + console.log(error); } finally { // Clean up regardless of success or failure setDraggingIndex(null); diff --git a/app/src/modules/visualization/widgets/panel/Panel.tsx b/app/src/modules/visualization/widgets/panel/Panel.tsx index c1eeefc..1a06a40 100644 --- a/app/src/modules/visualization/widgets/panel/Panel.tsx +++ b/app/src/modules/visualization/widgets/panel/Panel.tsx @@ -56,7 +56,6 @@ const Panel: React.FC<PanelProps> = ({ setZonesData, waitingPanels, }) => { - const { widgetSelect, setWidgetSelect } = useAsset3dWidget(); const panelRefs = useRef<{ [side in Side]?: HTMLDivElement }>({}); const [panelDimensions, setPanelDimensions] = useState<{ [side in Side]?: { width: number; height: number }; @@ -71,7 +70,7 @@ const Panel: React.FC<PanelProps> = ({ // Track canvas dimensions useEffect(() => { - const canvas = document.getElementById("real-time-vis-canvas"); + const canvas = document.getElementById("work-space-three-d-canvas"); if (!canvas) return; const updateCanvasDimensions = () => { @@ -183,7 +182,7 @@ const Panel: React.FC<PanelProps> = ({ // Add widget to panel const addWidgetToPanel = async (asset: any, panel: Side) => { - const email = localStorage.getItem("email") || ""; + const email = localStorage.getItem("email") ?? ""; const organization = email?.split("@")[1]?.split(".")[0]; const newWidget = { diff --git a/app/src/pages/Project.tsx b/app/src/pages/Project.tsx index 16a1495..1187cd5 100644 --- a/app/src/pages/Project.tsx +++ b/app/src/pages/Project.tsx @@ -102,7 +102,7 @@ const Project: React.FC = () => { )} <div className="scene-container" - id="real-time-vis-canvas" + id="work-space-three-d-canvas" style={{ height: isPlaying || activeModule !== "visualization" ? "100vh" : "", width: isPlaying || activeModule !== "visualization" ? "100vw" : "",