Dwinzo_dev/app/src/pages/Project.tsx

139 lines
4.8 KiB
TypeScript
Raw Normal View History

import React, { useEffect } from "react";
2025-03-25 06:17:41 +00:00
import ModuleToggle from "../components/ui/ModuleToggle";
import SideBarLeft from "../components/layout/sidebarLeft/SideBarLeft";
import SideBarRight from "../components/layout/sidebarRight/SideBarRight";
import useModuleStore, { useThreeDStore } from "../store/useModuleStore";
2025-04-11 12:38:47 +00:00
import RealTimeVisulization from "../modules/visualization/RealTimeVisulization";
2025-03-25 06:17:41 +00:00
import Tools from "../components/ui/Tools";
2025-03-25 10:03:38 +00:00
import {
useSocketStore,
useFloorItems,
useOrganization,
useUserName,
useWallItems,
useZones,
useLoadingProgress,
useWidgetSubOption,
2025-03-25 10:03:38 +00:00
} from "../store/store";
import { useNavigate } from "react-router-dom";
import { usePlayButtonStore } from "../store/usePlayButtonStore";
import MarketPlace from "../modules/market/MarketPlace";
import LoadingPage from "../components/templates/LoadingPage";
2025-03-27 05:25:44 +00:00
import SimulationPlayer from "../components/ui/simulation/simulationPlayer";
import KeyPressListener from "../utils/shortcutkeys/handleShortcutKeys";
import { useSelectedUserStore } from "../store/useCollabStore";
import FollowPerson from "../components/templates/FollowPerson";
import Scene from "../modules/scene/scene";
import { createHandleDrop } from "../modules/visualization/functions/handleUiDrop";
import { useSelectedZoneStore } from "../store/visualization/useZoneStore";
import { useFloatingWidget } from "../store/visualization/useDroppedObjectsStore";
2025-05-02 12:28:28 +00:00
import { useLogger } from "../components/ui/log/LoggerContext";
2025-05-02 11:44:36 +00:00
import Footer from "../components/ui/footer/Footer";
import RenderOverlay from "../components/templates/Overlay";
import LogList from "../components/ui/log/LogList";
2025-03-25 06:17:41 +00:00
const Project: React.FC = () => {
let navigate = useNavigate();
2025-05-02 12:28:28 +00:00
const logger = useLogger();
const { activeModule, setActiveModule } = useModuleStore();
const { loadingProgress } = useLoadingProgress();
const { setUserName } = useUserName();
const { setOrganization } = useOrganization();
const { setFloorItems } = useFloorItems();
const { setWallItems } = useWallItems();
const { setZones } = useZones();
useEffect(() => {
setFloorItems([]);
setWallItems([]);
setZones([]);
2025-04-28 06:56:31 +00:00
setActiveModule("builder");
2025-03-25 10:03:38 +00:00
const email = localStorage.getItem("email");
if (email) {
const Organization = email.split("@")[1].split(".")[0];
useSocketStore.getState().initializeSocket(email, Organization);
2025-03-25 10:03:38 +00:00
const name = localStorage.getItem("userName");
if (Organization && name) {
setOrganization(Organization);
setUserName(name);
}
2025-05-02 12:28:28 +00:00
logger.info("Log in success full");
} else {
navigate("/");
}
// eslint-disable-next-line react-hooks/exhaustive-deps
2025-03-25 10:03:38 +00:00
}, []);
// global store
const { toggleThreeD } = useThreeDStore();
// simulation store
const { isPlaying } = usePlayButtonStore();
// collaboration store
const { selectedUser } = useSelectedUserStore();
2025-05-02 11:44:36 +00:00
const { isLogListVisible } = useLogger();
// real-time visualization store
const { widgetSubOption } = useWidgetSubOption();
const { visualizationSocket } = useSocketStore();
const { selectedZone } = useSelectedZoneStore();
const { setFloatingWidget } = useFloatingWidget();
2025-03-25 06:17:41 +00:00
return (
<div className="project-main">
{!selectedUser && (
<>
<KeyPressListener />
{loadingProgress > 0 && <LoadingPage progress={loadingProgress} />}
{!isPlaying && (
<>
{toggleThreeD && <ModuleToggle />}
<SideBarLeft />
<SideBarRight />
</>
)}
<RealTimeVisulization />
{activeModule === "market" && <MarketPlace />}
{activeModule !== "market" && <Tools />}
{isPlaying && activeModule === "simulation" && <SimulationPlayer />}
</>
)}
<div
className="scene-container"
id="real-time-vis-canvas"
style={{
height: isPlaying || activeModule !== "visualization" ? "100vh" : "",
width: isPlaying || activeModule !== "visualization" ? "100vw" : "",
left: isPlaying || activeModule !== "visualization" ? "0%" : "",
borderRadius:
isPlaying || activeModule !== "visualization" ? "" : "6px",
}}
role="application"
onDrop={(event) =>
createHandleDrop({
widgetSubOption,
visualizationSocket,
selectedZone,
setFloatingWidget,
event,
})
}
onDragOver={(event) => event.preventDefault()}
>
<Scene />
</div>
{selectedUser && <FollowPerson />}
2025-05-02 11:44:36 +00:00
{isLogListVisible && (
<RenderOverlay>
<LogList />
</RenderOverlay>
)}
<Footer />
2025-03-25 06:17:41 +00:00
</div>
);
};
export default Project;