diff --git a/app/src/app.tsx b/app/src/app.tsx index 6aa1547..b03d4df 100644 --- a/app/src/app.tsx +++ b/app/src/app.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from "react"; import { Cache } from "three"; -import { BrowserRouter as Router, Routes, Route, useParams } from "react-router-dom"; +import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; import Dashboard from "./pages/Dashboard"; import Project from "./pages/Project"; import UserAuth from "./pages/UserAuth"; @@ -14,7 +14,6 @@ const App: React.FC = () => { Cache.enabled = true; }, []); - return ( diff --git a/app/src/components/Dashboard/DashboardCard.tsx b/app/src/components/Dashboard/DashboardCard.tsx index 1a532b9..1300187 100644 --- a/app/src/components/Dashboard/DashboardCard.tsx +++ b/app/src/components/Dashboard/DashboardCard.tsx @@ -1,7 +1,7 @@ import React, { useState, useRef, useEffect } from "react"; import img from "../../assets/image/image.png"; import { useNavigate } from "react-router-dom"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { useLoadingProgress, useProjectName, useSocketStore } from "../../store/builder/store"; import { viewProject } from "../../services/dashboard/viewProject"; import OuterClick from "../../utils/outerClick"; @@ -60,12 +60,6 @@ const DashboardCard: React.FC = ({ const navigateToProject = async (e: any) => { if (active && active == "trash") return; - try { - const viewedProject = await viewProject(organization, projectId, userId); - console.log("Viewed project:", viewedProject); - } catch (error) { - console.error("Error opening project:", error); - } setLoadingProgress(1) setProjectName(projectName); navigate(`/${projectId}`); @@ -75,9 +69,9 @@ const DashboardCard: React.FC = ({ switch (option) { case "delete": if (handleDeleteProject) { - await handleDeleteProject(projectId); + handleDeleteProject(projectId); } else if (handleTrashDeleteProject) { - await handleTrashDeleteProject(projectId); + handleTrashDeleteProject(projectId); } break; case "restore": @@ -133,7 +127,7 @@ const DashboardCard: React.FC = ({ if (!projectId) return; try { const projects = await getAllProjects(userId, organization); - console.log("projects: ", projects); + // console.log("projects: ", projects); let projectUuid = projects.Projects.find( (val: any) => val.projectUuid === projectId || val._id === projectId ); @@ -264,7 +258,6 @@ const DashboardCard: React.FC = ({ key={option} className="option" onClick={(e) => { - console.log("option", option); e.stopPropagation(); handleOptionClick(option); }} diff --git a/app/src/components/Dashboard/DashboardHome.tsx b/app/src/components/Dashboard/DashboardHome.tsx index 2dc271b..5fc1f92 100644 --- a/app/src/components/Dashboard/DashboardHome.tsx +++ b/app/src/components/Dashboard/DashboardHome.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react"; import DashboardCard from "./DashboardCard"; import DashboardNavBar from "./DashboardNavBar"; import MarketPlaceBanner from "./MarketPlaceBanner"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { useSocketStore } from "../../store/builder/store"; import { recentlyViewed } from "../../services/dashboard/recentlyViewed"; import { searchProject } from "../../services/dashboard/searchProjects"; @@ -34,8 +34,7 @@ const DashboardHome: React.FC = () => { const fetchRecentProjects = async () => { try { const projects = await recentlyViewed(organization, userId); - console.log("RecentlyViewed: ", projects); - + if (JSON.stringify(projects) !== JSON.stringify(recentProjects)) { setRecentProjects(projects); } @@ -59,7 +58,6 @@ const DashboardHome: React.FC = () => { }; const handleDeleteProject = async (projectId: any) => { - console.log("projectId:delete ", projectId); try { //API for delete project // const deletedProject = await deleteProject( @@ -115,6 +113,7 @@ const DashboardHome: React.FC = () => { const renderProjects = () => { const projectList = recentProjects[Object.keys(recentProjects)[0]]; + console.log('projectList: ', projectList); if (!projectList?.length) { return
No recent projects found
; @@ -150,7 +149,7 @@ const DashboardHome: React.FC = () => { handleRecentProjectSearch={handleRecentProjectSearch} /> -
+

Recents

{renderProjects()}
diff --git a/app/src/components/Dashboard/DashboardProjects.tsx b/app/src/components/Dashboard/DashboardProjects.tsx index e931328..e27d12a 100644 --- a/app/src/components/Dashboard/DashboardProjects.tsx +++ b/app/src/components/Dashboard/DashboardProjects.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react"; import DashboardNavBar from "./DashboardNavBar"; import DashboardCard from "./DashboardCard"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { useSocketStore } from "../../store/builder/store"; import { getAllProjects } from "../../services/dashboard/getAllProjects"; import { searchProject } from "../../services/dashboard/searchProjects"; @@ -65,7 +65,7 @@ const DashboardProjects: React.FC = () => { // console.log('deletedProject: ', deletedProject); const deleteProjects = { projectId, - organization: organization, + organization, userId, }; diff --git a/app/src/components/Dashboard/DashboardTrash.tsx b/app/src/components/Dashboard/DashboardTrash.tsx index e1329fc..2578e49 100644 --- a/app/src/components/Dashboard/DashboardTrash.tsx +++ b/app/src/components/Dashboard/DashboardTrash.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react"; import DashboardCard from "./DashboardCard"; import DashboardNavBar from "./DashboardNavBar"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { trashSearchProject } from "../../services/dashboard/trashSearchProject"; import { restoreTrash } from "../../services/dashboard/restoreTrash"; import { getTrash } from "../../services/dashboard/getTrash"; @@ -22,9 +22,7 @@ interface DiscardedProjects { } const DashboardTrash: React.FC = () => { - const [discardedProjects, setDiscardedProjects] = useState( - {} - ); + const [discardedProjects, setDiscardedProjects] = useState({}); const [isSearchActive, setIsSearchActive] = useState(false); const { userId, organization } = getUserData(); const { projectSocket } = useSocketStore(); @@ -60,7 +58,6 @@ const DashboardTrash: React.FC = () => { }; const handleRestoreProject = async (projectId: any) => { - console.log("projectId: ", projectId); try { const restoreProject = await restoreTrash(organization, projectId); // console.log('restoreProject: ', restoreProject); @@ -86,6 +83,7 @@ const DashboardTrash: React.FC = () => { }; const handleTrashDeleteProject = async (projectId: any) => { + console.log('projectId: ', projectId); try { // const deletedProject = await deleteTrash( // organization, projectId diff --git a/app/src/components/Dashboard/SidePannel.tsx b/app/src/components/Dashboard/SidePannel.tsx index 2e6c1ea..89b7ba9 100644 --- a/app/src/components/Dashboard/SidePannel.tsx +++ b/app/src/components/Dashboard/SidePannel.tsx @@ -12,7 +12,7 @@ import { useNavigate } from "react-router-dom"; import darkThemeImage from "../../assets/image/darkThemeProject.png"; import lightThemeImage from "../../assets/image/lightThemeProject.png"; import { SettingsIcon, TrashIcon } from "../icons/ExportCommonIcons"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { useLoadingProgress, useSocketStore } from "../../store/builder/store"; import { createProject } from "../../services/dashboard/createProject"; @@ -42,7 +42,7 @@ const SidePannel: React.FC = ({ setActiveTab, activeTab }) => { const projectId = generateProjectId(); useSocketStore.getState().initializeSocket(email, organization, token); - + //API for creating new Project // const project = await createProject( // projectId, @@ -57,11 +57,11 @@ const SidePannel: React.FC = ({ setActiveTab, activeTab }) => { organization: organization, projectUuid: projectId, }; - console.log("projectSocket: ", projectSocket); + // console.log("projectSocket: ", projectSocket); if (projectSocket) { // console.log('addProject: ', addProject); const handleResponse = (data: any) => { - console.log('Project add response:', data); + // console.log('Project add response:', data); if (data.message === "Project created successfully") { setLoadingProgress(1) navigate(`/${data.data.projectId}`); @@ -70,7 +70,7 @@ const SidePannel: React.FC = ({ setActiveTab, activeTab }) => { }; projectSocket.on("v1-project:response:add", handleResponse); - console.log('addProject: ', addProject); + // console.log('addProject: ', addProject); projectSocket.emit("v1:project:add", addProject); } else { console.error("Socket is not connected."); @@ -163,7 +163,10 @@ const SidePannel: React.FC = ({ setActiveTab, activeTab }) => { Settings
-
+
{ + localStorage.clear(); + navigate("/"); + }}> Log out
diff --git a/app/src/components/Dashboard/socket/projectSocketRes.dev.tsx b/app/src/components/Dashboard/socket/projectSocketRes.dev.tsx index e19a957..069cd85 100644 --- a/app/src/components/Dashboard/socket/projectSocketRes.dev.tsx +++ b/app/src/components/Dashboard/socket/projectSocketRes.dev.tsx @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; import { useSocketStore } from '../../../store/builder/store'; -import { getUserData } from '../functions/getUserData'; +import { getUserData } from '../../../functions/getUserData'; import { getAllProjects } from '../../../services/dashboard/getAllProjects'; import { recentlyViewed } from '../../../services/dashboard/recentlyViewed'; @@ -56,7 +56,7 @@ const ProjectSocketRes = ({ if (data?.message === "Project Duplicated successfully") { if (setWorkspaceProjects) { const allProjects = await getAllProjects(userId, organization); - console.log('allProjects: ', allProjects); + // console.log('allProjects: ', allProjects); setWorkspaceProjects(allProjects); } else if (setRecentProjects) { const recentProjects = await recentlyViewed(organization, userId); diff --git a/app/src/components/footer/Footer.tsx b/app/src/components/footer/Footer.tsx index 0ee70c5..737ee26 100644 --- a/app/src/components/footer/Footer.tsx +++ b/app/src/components/footer/Footer.tsx @@ -8,15 +8,22 @@ import { CurserRightIcon, } from "../icons/LogIcons"; import ShortcutHelper from "./shortcutHelper"; -import { useShortcutStore } from "../../store/builder/store"; +import useVersionHistoryVisibleStore, { useShortcutStore } from "../../store/builder/store"; import { usePlayButtonStore } from "../../store/usePlayButtonStore"; +import useModuleStore, { useSubModuleStore } from "../../store/useModuleStore"; +import { useVersionContext } from "../../modules/builder/version/versionContext"; const Footer: React.FC = () => { const { logs, setIsLogListVisible } = useLogger(); const lastLog = logs.length > 0 ? logs[logs.length - 1] : null; + const { setActiveModule } = useModuleStore(); + const { setSubModule } = useSubModuleStore(); + const { setVersionHistoryVisible } = useVersionHistoryVisibleStore(); const { isPlaying } = usePlayButtonStore(); const { showShortcuts, setShowShortcuts } = useShortcutStore(); + const { selectedVersionStore } = useVersionContext(); + const { selectedVersion } = selectedVersionStore(); return (
@@ -61,8 +68,12 @@ const Footer: React.FC = () => { )}
-
- V 0.01 +
{ + setVersionHistoryVisible(true); + setSubModule("properties"); + setActiveModule('builder'); + }}> + {(selectedVersion?.version) ?? 'v 0.0.0'}
@@ -72,11 +83,10 @@ const Footer: React.FC = () => { {!isPlaying && (
- +
)}
diff --git a/app/src/components/layout/scenes/ComparisonScene.tsx b/app/src/components/layout/scenes/ComparisonScene.tsx index ce8e455..b1029df 100644 --- a/app/src/components/layout/scenes/ComparisonScene.tsx +++ b/app/src/components/layout/scenes/ComparisonScene.tsx @@ -1,6 +1,5 @@ import { useProductContext } from '../../../modules/simulation/products/productContext' import RegularDropDown from '../../ui/inputs/RegularDropDown'; -import { useProductStore } from '../../../store/simulation/useProductStore'; import { useCompareProductDataStore, useLoadingProgress, useSaveVersion } from '../../../store/builder/store'; import useModuleStore from '../../../store/useModuleStore'; import CompareLayOut from '../../ui/compareVersion/CompareLayOut'; @@ -8,10 +7,14 @@ import ComparisonResult from '../../ui/compareVersion/ComparisonResult'; import { useComparisonProduct, useMainProduct } from '../../../store/simulation/useSimulationStore'; import { usePlayButtonStore } from '../../../store/usePlayButtonStore'; import { useEffect, useState } from 'react'; +import { useVersionHistoryStore } from '../../../store/builder/useVersionHistoryStore'; +import { useVersionContext } from '../../../modules/builder/version/versionContext'; +import { useSceneContext } from '../../../modules/scene/sceneContext'; function ComparisonScene() { - const { isPlaying, setIsPlaying } = usePlayButtonStore(); - const { products } = useProductStore(); + const { isPlaying } = usePlayButtonStore(); + const { productStore } = useSceneContext(); + const { products } = productStore(); const { isVersionSaved } = useSaveVersion(); const { activeModule } = useModuleStore(); const { selectedProductStore } = useProductContext(); @@ -21,13 +24,30 @@ function ComparisonScene() { const { loadingProgress } = useLoadingProgress(); const { compareProductsData, setCompareProductsData } = useCompareProductDataStore(); const [shouldShowComparisonResult, setShouldShowComparisonResult] = useState(false); + const { versionHistory } = useVersionHistoryStore(); + const { selectedVersionStore } = useVersionContext(); + const { selectedVersion, setSelectedVersion } = selectedVersionStore(); - const handleSelectLayout = (option: string) => { + const handleSelectVersion = (option: string) => { + const version = versionHistory.find((version) => version.versionName === option); + if (version) { + setSelectedVersion(version); + } + }; + + const handleSelectProduct = (option: string) => { const product = products.find((product) => product.productName === option); if (product) { setComparisonProduct(product.productUuid, product.productName); } }; + + // useEffect(() => { + // if (versionHistory.length > 0) { + // setSelectedVersion(versionHistory[0]) + // } + // }, [versionHistory]) + // useEffect(() => { // setCompareProductsData([ // { @@ -57,7 +77,7 @@ function ComparisonScene() { // } // } // ]) - // }, []); // ✅ Runs only once on mount + // }, []); useEffect(() => { @@ -79,12 +99,19 @@ function ComparisonScene() { <> {isVersionSaved && activeModule === "simulation" && selectedProduct && ( <> - {comparisonProduct && !isPlaying && + {selectedVersion && !isPlaying &&
+ v.versionName)} // Pass layout names as options + onSelect={handleSelectVersion} + search={false} + /> +
l.productName)} // Pass layout names as options - onSelect={handleSelectLayout} + onSelect={handleSelectProduct} search={false} />
diff --git a/app/src/components/layout/scenes/ComparisonSceneProvider.tsx b/app/src/components/layout/scenes/ComparisonSceneProvider.tsx index e47805c..46749b7 100644 --- a/app/src/components/layout/scenes/ComparisonSceneProvider.tsx +++ b/app/src/components/layout/scenes/ComparisonSceneProvider.tsx @@ -1,7 +1,16 @@ +import { useEffect } from 'react'; import { ProductProvider } from '../../../modules/simulation/products/productContext' import ComparisonScene from './ComparisonScene'; +import { useSceneContext } from '../../../modules/scene/sceneContext'; function ComparisonSceneProvider() { + const { assetStore } = useSceneContext(); + const { clearAssets } = assetStore(); + + useEffect(() => { + clearAssets(); + }, []) + return ( diff --git a/app/src/components/layout/scenes/MainScene.tsx b/app/src/components/layout/scenes/MainScene.tsx index 67dc35a..eebab29 100644 --- a/app/src/components/layout/scenes/MainScene.tsx +++ b/app/src/components/layout/scenes/MainScene.tsx @@ -30,15 +30,17 @@ import { useMainProduct, } from "../../../store/simulation/useSimulationStore"; import { useProductContext } from "../../../modules/simulation/products/productContext"; -import { useProductStore } from "../../../store/simulation/useProductStore"; import RegularDropDown from "../../ui/inputs/RegularDropDown"; import RenameTooltip from "../../ui/features/RenameTooltip"; -import { setFloorItemApi } from "../../../services/factoryBuilder/assest/floorAsset/setFloorItemApi"; -import { useAssetsStore } from "../../../store/builder/useAssetStore"; +import { setAssetsApi } from "../../../services/factoryBuilder/assest/floorAsset/setAssetsApi"; import { useParams } from "react-router-dom"; +import { useSceneContext } from "../../../modules/scene/sceneContext"; +import { useVersionHistoryStore } from "../../../store/builder/useVersionHistoryStore"; +import { useVersionContext } from "../../../modules/builder/version/versionContext"; +import VersionSaved from "../sidebarRight/versionHisory/VersionSaved"; +import Footer from "../../footer/Footer"; function MainScene() { - const { products } = useProductStore(); const { setMainProduct } = useMainProduct(); const { selectedProductStore } = useProductContext(); const { selectedProduct } = selectedProductStore(); @@ -54,9 +56,14 @@ function MainScene() { const { setFloatingWidget } = useFloatingWidget(); const { clearComparisonProduct } = useComparisonProduct(); const { selectedFloorItem, setSelectedFloorItem } = useSelectedFloorItem(); - const { setName } = useAssetsStore(); + const { assetStore, productStore } = useSceneContext(); + const { products } = productStore(); + const { setName } = assetStore(); const { projectId } = useParams() const { isRenameMode, setIsRenameMode } = useRenameModeStore(); + const { versionHistory } = useVersionHistoryStore(); + const { selectedVersionStore } = useVersionContext(); + const { selectedVersion, setSelectedVersion } = selectedVersionStore(); useEffect(() => { if (activeModule !== 'simulation') { @@ -65,22 +72,33 @@ function MainScene() { } }, [activeModule]) - const handleSelectLayout = (option: string) => { + useEffect(() => { + if (versionHistory.length > 0) { + setSelectedVersion(versionHistory[0]) + } + }, [versionHistory]) + + const handleSelectVersion = (option: string) => { + const version = versionHistory.find((version) => version.versionName === option); + if (version) { + setSelectedVersion(version); + } + }; + + const handleSelectProduct = (option: string) => { const product = products.find((product) => product.productName === option); if (product) { setMainProduct(product.productUuid, product.productName); } }; + const handleObjectRename = async (newName: string) => { if (!projectId) return - const email = localStorage.getItem("email") ?? ""; - const organization = email?.split("@")[1]?.split(".")[0]; - let response = await setFloorItemApi( - organization, - selectedFloorItem.userData.modelUuid, - newName, + let response = await setAssetsApi({ + modelUuid: selectedFloorItem.userData.modelUuid, + modelName: newName, projectId - ); + }); selectedFloorItem.userData = { ...selectedFloorItem.userData, modelName: newName @@ -98,7 +116,7 @@ function MainScene() { {loadingProgress > 0 && } {!isPlaying && ( <> - {toggleThreeD && } + {toggleThreeD && !isVersionSaved && } @@ -137,6 +155,8 @@ function MainScene() { selectedZone, setFloatingWidget, event, + projectId, + versionId: selectedVersion?.versionId || '', }) } onDragOver={(event) => event.preventDefault()} @@ -144,16 +164,28 @@ function MainScene() {
- {selectedProduct && isVersionSaved && !isPlaying && activeModule === "simulation" && ( + {selectedProduct && selectedVersion && isVersionSaved && !isPlaying && activeModule === "simulation" && (
+ v.versionName)} // Pass layout names as options + onSelect={handleSelectVersion} + search={false} + /> +
l.productName)} // Pass layout names as options - onSelect={handleSelectLayout} + onSelect={handleSelectProduct} search={false} />
)} + + {activeModule !== "market" && !selectedUser &&