import React, { useState } from "react"; import InputRange from "../../../ui/inputs/InputRange"; import InputToggle from "../../../ui/inputs/InputToggle"; import { AI_Icon } from "../../../icons/ExportCommonIcons"; import LabeledButton from "../../../ui/inputs/LabledButton"; import { useAzimuth, useElevation, useRenderDistance, useResetCamera, useRoofVisibility, useSelectedWallItem, useShadows, useSocketStore, useToggleView, useWallVisibility, } from "../../../../store/store"; import { setEnvironment } from "../../../../services/factoryBuilder/environment/setEnvironment"; const GlobalProperties: React.FC = () => { const { toggleView, setToggleView } = useToggleView(); const { selectedWallItem, setSelectedWallItem } = useSelectedWallItem(); const { roofVisibility, setRoofVisibility } = useRoofVisibility(); const { wallVisibility, setWallVisibility } = useWallVisibility(); const { shadows, setShadows } = useShadows(); const { resetCamera, setResetCamera } = useResetCamera(); const { elevation, setElevation } = useElevation(); const { azimuth, setAzimuth } = useAzimuth(); const { renderDistance, setRenderDistance } = useRenderDistance(); const { socket } = useSocketStore(); const [limitDistance, setLimitDistance] = useState(false); const [distance, setDistance] = useState<number>(5); const [limitGridDistance, setLimitGridDistance] = useState(false); const [gridDistance, setGridDistance] = useState<number>(5); function optimizeScene() { setLimitDistance(true); setDistance(5); } function updateDistance(value: number) { setDistance(value); } function updateGridDistance(value: number) { setGridDistance(value); } // Function to toggle roof visibility const changeRoofVisibility = async () => { const email = localStorage.getItem("email"); const organization = email!.split("@")[1].split(".")[0]; //using REST const data = await setEnvironment( organization, localStorage.getItem("userId")!, wallVisibility, !roofVisibility, shadows ); // console.log('data: ', data); //using Socket // const visData = { // organization: organization, // userId: localStorage.getItem('userId')!, // wallVisibility: wallVisibility, // roofVisibility: !roofVisibility, // shadowVisibility: shadows, // socketId: socket.id // }; // socket.emit('v1:Environment:set', visData) setRoofVisibility(!roofVisibility); // Toggle roof visibility }; // Function to toggle wall visibility const changeWallVisibility = async () => { const email = localStorage.getItem("email"); const organization = email!.split("@")[1].split(".")[0]; //using REST const data = await setEnvironment( organization, localStorage.getItem("userId")!, !wallVisibility, roofVisibility, shadows ); // console.log('data: ', data); //using Socket // const visData = { // organization: organization, // userId: localStorage.getItem('userId')!, // wallVisibility: !wallVisibility, // roofVisibility: roofVisibility, // shadowVisibility: shadows, // socketId: socket.id // }; // socket.emit('v1:Environment:set', visData) setWallVisibility(!wallVisibility); // Toggle wall visibility }; const shadowVisibility = async () => { const email = localStorage.getItem("email"); const organization = email!.split("@")[1].split(".")[0]; //using REST const data = await setEnvironment( organization, localStorage.getItem("userId")!, wallVisibility, roofVisibility, !shadows ); // console.log('data: ', data); //using Socket // const visData = { // organization: organization, // userId: localStorage.getItem('userId')!, // wallVisibility: wallVisibility, // roofVisibility: roofVisibility, // shadowVisibility: !shadows, // socketId: socket.id // }; // socket.emit('v1:Environment:set', visData) setShadows(!shadows); }; const toggleResetCamera = () => { if (!toggleView) { setResetCamera(true); // Trigger reset camera action } }; return ( <div className="global-properties-container"> <div className="header">Environment</div> <div className="optimize-button" onClick={optimizeScene}> <AI_Icon /> Optimize </div> <div className="split"></div> <InputToggle value={roofVisibility} inputKey="1" label="Roof Visibility" onClick={changeRoofVisibility} /> <InputToggle value={wallVisibility} inputKey="2" label="Wall Visibility" onClick={changeWallVisibility} /> <InputToggle value={shadows} inputKey="3" label="Shadows Visibility" onClick={shadowVisibility} /> <LabeledButton label="Reset Camera" onClick={toggleResetCamera} value="Reset" /> <div className="split"></div> <InputToggle inputKey="4" label="Limit Render Distance" value={limitDistance} onClick={() => { setLimitDistance(!limitDistance); }} /> <InputRange label="Distance" disabled={!limitDistance} value={distance} key={"5"} onChange={(value: number) => updateDistance(value)} /> <div className="split"></div> <InputToggle inputKey="6" label="Display Grid" value={limitGridDistance} onClick={() => { setLimitGridDistance(!limitGridDistance); }} /> <InputRange label="Tile Distance" disabled={!limitGridDistance} value={gridDistance} key={"7"} onChange={(value: number) => updateGridDistance(value)} /> </div> ); }; export default GlobalProperties;