From c71b25c407c1a8574caa676381c34cb4fda457b6 Mon Sep 17 00:00:00 2001 From: Gomathi9520 Date: Tue, 12 Aug 2025 09:54:42 +0530 Subject: [PATCH 1/4] Add context menu and context controls for asset manipulation --- .../components/layout/scenes/MainScene.tsx | 47 ++-- app/src/components/ui/menu/contextMenu.tsx | 207 ++++++++++++++++++ .../contextControls/contextControls.tsx | 194 ++++++++++++++++ app/src/modules/scene/controls/controls.tsx | 3 + .../selection3D/copyPasteControls3D.tsx | 13 +- .../selection3D/duplicationControls3D.tsx | 10 +- .../selection3D/moveControls3D.tsx | 10 +- .../selection3D/rotateControls3D.tsx | 15 +- .../selection3D/selectionControls3D.tsx | 14 +- .../undoRedo2D/undoRedo2DControls.tsx | 2 +- app/src/store/builder/store.ts | 14 +- .../utils/shortcutkeys/handleShortcutKeys.ts | 5 +- 12 files changed, 505 insertions(+), 29 deletions(-) create mode 100644 app/src/components/ui/menu/contextMenu.tsx create mode 100644 app/src/modules/scene/controls/contextControls/contextControls.tsx diff --git a/app/src/components/layout/scenes/MainScene.tsx b/app/src/components/layout/scenes/MainScene.tsx index 6b55a26..d078765 100644 --- a/app/src/components/layout/scenes/MainScene.tsx +++ b/app/src/components/layout/scenes/MainScene.tsx @@ -3,6 +3,7 @@ import { useLoadingProgress, useRenameModeStore, useSaveVersion, + useSelectedAssets, useSelectedComment, useSelectedFloorItem, useSocketStore, @@ -58,6 +59,7 @@ function MainScene() { const { setFloatingWidget } = useFloatingWidget(); const { clearComparisonProduct } = useComparisonProduct(); const { selectedFloorItem, setSelectedFloorItem } = useSelectedFloorItem(); + const { selectedAssets } = useSelectedAssets(); const { assetStore, productStore } = useSceneContext(); const { products } = productStore(); const { setName } = assetStore(); @@ -97,18 +99,35 @@ function MainScene() { const handleObjectRename = async (newName: string) => { if (!projectId) return - let response = await setAssetsApi({ - modelUuid: selectedFloorItem.userData.modelUuid, - modelName: newName, - projectId - }); - selectedFloorItem.userData = { - ...selectedFloorItem.userData, - modelName: newName - }; - setSelectedFloorItem(selectedFloorItem); - setIsRenameMode(false); - setName(selectedFloorItem.userData.modelUuid, response.modelName); + if (selectedFloorItem) { + setAssetsApi({ + modelUuid: selectedFloorItem.userData.modelUuid, + modelName: newName, + projectId + }).then(() => { + selectedFloorItem.userData = { + ...selectedFloorItem.userData, + modelName: newName + }; + setSelectedFloorItem(selectedFloorItem); + setIsRenameMode(false); + setName(selectedFloorItem.userData.modelUuid, newName); + }) + } else if (selectedAssets.length === 1) { + setAssetsApi({ + modelUuid: selectedAssets[0].userData.modelUuid, + modelName: newName, + projectId + }).then(() => { + selectedAssets[0].userData = { + ...selectedAssets[0].userData, + modelName: newName + }; + setAssetsApi(selectedAssets); + setIsRenameMode(false); + setName(selectedAssets[0].userData.modelUuid, newName); + }) + } } return ( @@ -135,7 +154,7 @@ function MainScene() { {(isPlaying) && activeModule !== "simulation" && } - {isRenameMode && selectedFloorItem?.userData.modelName && } + {isRenameMode && (selectedFloorItem?.userData.modelName || selectedAssets.length === 1) && } {/* remove this later */} {activeModule === "builder" && !toggleThreeD && } @@ -188,7 +207,7 @@ function MainScene() { {activeModule !== "market" && !selectedUser &&