import React, { useEffect, useRef, useState } from "react"; import { AsileIcon, CommentIcon, CursorIcon, DeleteIcon, FloorIcon, FreeMoveIcon, MeasureToolIcon, PenIcon, PlayIcon, SaveTemplateIcon, WallIcon, ZoneIcon, } from "../icons/ExportToolsIcons"; import { ArrowIcon, TickIcon } from "../icons/ExportCommonIcons"; import useModuleStore, { useThreeDStore } from "../../store/useModuleStore"; import { handleSaveTemplate } from "../../modules/visualization/functions/handleSaveTemplate"; import { usePlayButtonStore } from "../../store/usePlayButtonStore"; import useTemplateStore from "../../store/useTemplateStore"; import { useSelectedZoneStore } from "../../store/visualization/useZoneStore"; import { useActiveTool, useAddAction, useDeleteTool, useDeletePointOrLine, useMovePoint, useRefTextUpdate, useSelectedWallItem, useSocketStore, useToggleView, useToolMode, useTransformMode, useActiveSubTool, } from "../../store/store"; import useToggleStore from "../../store/useUIToggleStore"; import { use3DWidget, useFloatingWidget, } from "../../store/visualization/useDroppedObjectsStore"; const Tools: React.FC = () => { const { templates } = useTemplateStore(); const { activeSubTool, setActiveSubTool } = useActiveSubTool(); const { toggleThreeD, setToggleThreeD } = useThreeDStore(); const { setToggleUI } = useToggleStore(); const dropdownRef = useRef(null); const [openDrop, setOpenDrop] = useState(false); const { visualizationSocket } = useSocketStore(); const { activeModule } = useModuleStore(); const { isPlaying, setIsPlaying } = usePlayButtonStore(); const { addTemplate } = useTemplateStore(); const { selectedZone } = useSelectedZoneStore(); const { floatingWidget } = useFloatingWidget(); const { widgets3D } = use3DWidget(); // wall options const { toggleView, setToggleView } = useToggleView(); const { setDeleteTool } = useDeleteTool(); const { setAddAction } = useAddAction(); const { setSelectedWallItem } = useSelectedWallItem(); const { setTransformMode } = useTransformMode(); const { setDeletePointOrLine } = useDeletePointOrLine(); const { setMovePoint } = useMovePoint(); const { setToolMode } = useToolMode(); const { activeTool, setActiveTool } = useActiveTool(); const { setRefTextUpdate } = useRefTextUpdate(); // Reset activeTool whenever activeModule changes useEffect(() => { setToggleUI( localStorage.getItem("navBarUi") ? localStorage.getItem("navBarUi") === "true" : true ); }, []); useEffect(() => {}, [activeModule]); useEffect(() => { setActiveTool(activeSubTool); setActiveSubTool(activeSubTool); }, [activeModule]); const toggleSwitch = () => { if (toggleThreeD) { setSelectedWallItem(null); setDeleteTool(false); setAddAction(null); setToggleView(true); // localStorage.setItem("navBarUi", JSON.stringify(!toggleThreeD)); } else { setToggleView(false); } setToggleUI( localStorage.getItem("navBarUi") ? localStorage.getItem("navBarUi") === "true" : true ); setToggleThreeD(!toggleThreeD); setActiveSubTool("cursor"); setActiveTool("cursor"); }; useEffect(() => { const handleOutsideClick = (event: MouseEvent) => { if ( dropdownRef.current && !dropdownRef.current.contains(event.target as Node) ) { setOpenDrop(false); // Close the dropdown } }; document.addEventListener("mousedown", handleOutsideClick); return () => { document.removeEventListener("mousedown", handleOutsideClick); }; }, []); useEffect(() => { if (!toggleThreeD) { setToggleUI(false); } }, [toggleThreeD]); useEffect(() => { setToolMode(null); setDeleteTool(false); setAddAction(null); setTransformMode(null); setMovePoint(false); setDeletePointOrLine(false); setRefTextUpdate((prevUpdate) => prevUpdate - 1); switch (activeTool) { case "Move": if (toggleView) { setMovePoint(true); } else { setTransformMode("translate"); } break; case "Rotate": if (!toggleView) { setTransformMode("rotate"); } break; case "Scale": if (!toggleView) { setTransformMode("scale"); } break; case "draw-wall": if (toggleView) { setToolMode("Wall"); } break; case "draw-aisle": if (toggleView) { setToolMode("Aisle"); } break; case "draw-zone": if (toggleView) { setToolMode("Zone"); } break; case "draw-floor": if (toggleView) { setToolMode("Floor"); } break; case "measure": setToolMode("MeasurementScale"); break; case "Add pillar": if (!toggleView) { setAddAction("pillar"); } break; case "delete": if (toggleView) { setDeletePointOrLine(true); } else { setDeleteTool(true); } break; default: break; } setActiveTool(activeTool); }, [activeTool]); return ( <> {!isPlaying ? (
{activeSubTool == "cursor" && (
{ setActiveTool("cursor"); }} >
)} {activeSubTool == "free-hand" && (
{ setActiveTool("free-hand"); }} >
)} {activeSubTool == "delete" && (
{ setActiveTool("delete"); }} >
)} {activeModule !== "visualization" && (
{ setOpenDrop(!openDrop); }} > {openDrop && (
{ setOpenDrop(false); setActiveTool("cursor"); setActiveSubTool("cursor"); }} >
{activeSubTool === "cursor" && }
Cursor
{ setOpenDrop(false); setActiveTool("free-hand"); setActiveSubTool("free-hand"); }} >
{activeSubTool === "free-hand" && }
Free Hand
{ setOpenDrop(false); setActiveTool("delete"); setActiveSubTool("delete"); }} >
{activeSubTool === "delete" && }
Delete
)}
)}
{!toggleThreeD && activeModule === "builder" && ( <>
{ setActiveTool("draw-wall"); }} title="Wall" >
{ setActiveTool("draw-zone"); }} title="Zone" >
{ setActiveTool("draw-aisle"); }} title="Aisle" >
{ setActiveTool("draw-floor"); }} title="Floor" >
)} {activeModule === "builder" && ( <>
{ setActiveTool("measure"); }} title="Measure" >
)} {activeModule === "simulation" && ( <>
{ setActiveTool("pen"); }} >
)} {activeModule === "visualization" && ( <>
{ handleSaveTemplate({ addTemplate, floatingWidget, widgets3D, selectedZone, templates, visualizationSocket, }); }} >
)}
{ setActiveTool("comment"); }} >
{toggleThreeD && (
{ setIsPlaying(!isPlaying); }} >
)}
{activeModule === "builder" && ( <>
2d
3d
)}
) : ( <> {activeModule !== "simulation" && ( )} )} ); }; export default Tools;