From 81b353307b01bee7c6f15ff3eb2d755a76e7c456 Mon Sep 17 00:00:00 2001
From: Jerald-Golden-B <jerald@hexrfactory.com>
Date: Fri, 25 Apr 2025 18:29:01 +0530
Subject: [PATCH] feat: Integrate upsertProductOrEventApi in Simulations and
 Products components; adjust loadInitialFloorItems to accept renderDistance
 parameter; update material handling in addAssetModel and Vehicles components

---
 .../sidebarRight/simulation/Simulations.tsx       |  6 ++++++
 .../builder/IntialLoad/loadInitialFloorItems.ts   |  4 ++--
 .../builder/geomentries/assets/addAssetModel.ts   | 15 +++++++--------
 .../modules/builder/groups/floorItemsGroup.tsx    |  4 ++--
 app/src/modules/simulation/products/products.tsx  | 14 ++++++++++++++
 .../roboticArm/instances/roboticArmInstances.tsx  |  1 -
 .../modules/simulation/roboticArm/roboticArm.tsx  |  9 ++-------
 app/src/modules/simulation/vehicle/vehicles.tsx   |  2 --
 .../simulation/UpsertProductOrEventApi.ts         |  2 +-
 app/src/types/simulationTypes.d.ts                |  1 -
 10 files changed, 34 insertions(+), 24 deletions(-)

diff --git a/app/src/components/layout/sidebarRight/simulation/Simulations.tsx b/app/src/components/layout/sidebarRight/simulation/Simulations.tsx
index d6b4ac8..926ce44 100644
--- a/app/src/components/layout/sidebarRight/simulation/Simulations.tsx
+++ b/app/src/components/layout/sidebarRight/simulation/Simulations.tsx
@@ -12,6 +12,7 @@ import { useProductStore } from "../../../../store/simulation/useProductStore";
 import { generateUUID } from "three/src/math/MathUtils";
 import RenderOverlay from "../../../templates/Overlay";
 import EditWidgetOption from "../../../ui/menu/EditWidgetOption";
+import { upsertProductOrEventApi } from "../../../../services/simulation/UpsertProductOrEventApi";
 
 interface Event {
     pathName: string;
@@ -75,6 +76,11 @@ const Simulations: React.FC = () => {
     const handleAddEventToProduct = () => {
         if (selectedAsset) {
             addEvent(selectedProduct.productId, selectedAsset);
+            // upsertProductOrEventApi({
+            //     productName: selectedProduct.productName,
+            //     productId: selectedProduct.productId,
+            //     eventDatas: selectedAsset
+            // });
             clearSelectedAsset();
         }
     };
diff --git a/app/src/modules/builder/IntialLoad/loadInitialFloorItems.ts b/app/src/modules/builder/IntialLoad/loadInitialFloorItems.ts
index 0359f1f..c46c0e7 100644
--- a/app/src/modules/builder/IntialLoad/loadInitialFloorItems.ts
+++ b/app/src/modules/builder/IntialLoad/loadInitialFloorItems.ts
@@ -14,6 +14,7 @@ async function loadInitialFloorItems(
     itemsGroup: Types.RefGroup,
     setFloorItems: Types.setFloorItemSetState,
     addEvent: (event: EventsSchema) => void,
+    renderDistance: number
 ): Promise<void> {
     if (!itemsGroup.current) return;
     let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_MARKETPLACE_URL}`;
@@ -65,7 +66,7 @@ async function loadInitialFloorItems(
 
             const cameraPosition = new THREE.Vector3(storedPosition.x, storedPosition.y, storedPosition.z);
 
-            if (cameraPosition.distanceTo(itemPosition) < 50) {
+            if (cameraPosition.distanceTo(itemPosition) < renderDistance) {
                 await new Promise<void>(async (resolve) => {
 
                     // Check Three.js Cache
@@ -210,7 +211,6 @@ function processLoadedModel(
                     actionUuid: THREE.MathUtils.generateUUID(),
                     actionName: "Vehicle Action",
                     actionType: "travel",
-                    material: null,
                     unLoadDuration: 5,
                     loadCapacity: 10,
                     pickUpPoint: null,
diff --git a/app/src/modules/builder/geomentries/assets/addAssetModel.ts b/app/src/modules/builder/geomentries/assets/addAssetModel.ts
index 670c7b5..d7c278c 100644
--- a/app/src/modules/builder/geomentries/assets/addAssetModel.ts
+++ b/app/src/modules/builder/geomentries/assets/addAssetModel.ts
@@ -202,7 +202,7 @@ async function handleModelLoad(
                         actionUuid: THREE.MathUtils.generateUUID(),
                         actionName: `Action ${index}`,
                         actionType: 'default',
-                        material: 'inherit',
+                        material: 'Default Material',
                         delay: 0,
                         spawnInterval: 5,
                         spawnCount: 1,
@@ -226,9 +226,8 @@ async function handleModelLoad(
                     rotation: [0, 0, 0],
                     action: {
                         actionUuid: THREE.MathUtils.generateUUID(),
-                        actionName: "Vehicle Action",
+                        actionName: "Action 1",
                         actionType: "travel",
-                        material: null,
                         unLoadDuration: 5,
                         loadCapacity: 10,
                         pickUpPoint: null,
@@ -254,11 +253,11 @@ async function handleModelLoad(
                     actions: [
                         {
                             actionUuid: THREE.MathUtils.generateUUID(),
-                            actionName: "Pick and Place",
+                            actionName: "Action 1",
                             actionType: "pickAndPlace",
                             process: {
-                                startPoint: [0, 0, 0],
-                                endPoint: [0, 0, 0]
+                                startPoint: null,
+                                endPoint: null
                             },
                             triggers: []
                         }
@@ -280,10 +279,10 @@ async function handleModelLoad(
                     rotation: [0, 0, 0],
                     action: {
                         actionUuid: THREE.MathUtils.generateUUID(),
-                        actionName: "Process Action",
+                        actionName: "Action 1",
                         actionType: "process",
                         processTime: 10,
-                        swapMaterial: "material-id",
+                        swapMaterial: "Default Material",
                         triggers: []
                     }
                 }
diff --git a/app/src/modules/builder/groups/floorItemsGroup.tsx b/app/src/modules/builder/groups/floorItemsGroup.tsx
index 241f628..f3f5050 100644
--- a/app/src/modules/builder/groups/floorItemsGroup.tsx
+++ b/app/src/modules/builder/groups/floorItemsGroup.tsx
@@ -75,7 +75,7 @@ const FloorItemsGroup = ({ itemsGroup, hoveredDeletableFloorItem, AttachedObject
                 gltfLoaderWorker.postMessage({ floorItems: data });
             } else {
                 gltfLoaderWorker.postMessage({ floorItems: [] });
-                loadInitialFloorItems(itemsGroup, setFloorItems, addEvent);
+                loadInitialFloorItems(itemsGroup, setFloorItems, addEvent, renderDistance);
                 updateLoadingProgress(100);
             }
         });
@@ -94,7 +94,7 @@ const FloorItemsGroup = ({ itemsGroup, hoveredDeletableFloorItem, AttachedObject
                     updateLoadingProgress(progress);
 
                     if (loadedAssets === totalAssets) {
-                        loadInitialFloorItems(itemsGroup, setFloorItems, addEvent);
+                        loadInitialFloorItems(itemsGroup, setFloorItems, addEvent, renderDistance);
                         updateLoadingProgress(100);
                     }
                 });
diff --git a/app/src/modules/simulation/products/products.tsx b/app/src/modules/simulation/products/products.tsx
index 2ddd7d1..b883824 100644
--- a/app/src/modules/simulation/products/products.tsx
+++ b/app/src/modules/simulation/products/products.tsx
@@ -2,6 +2,8 @@ import React, { useEffect } from 'react'
 import { useProductStore } from '../../../store/simulation/useProductStore'
 import * as THREE from 'three';
 import { useSelectedProduct } from '../../../store/simulation/useSimulationStore';
+import { upsertProductOrEventApi } from '../../../services/simulation/UpsertProductOrEventApi';
+import { getAllProductsApi } from '../../../services/simulation/getallProductsApi';
 
 function Products() {
     const { products, addProduct } = useProductStore();
@@ -12,10 +14,22 @@ function Products() {
             const id = THREE.MathUtils.generateUUID();
             const name = 'Product 1';
             addProduct(name, id);
+            // upsertProductOrEventApi({ productName: name, productId: id }).then((data) => {
+            //     console.log('data: ', data);
+            // });
             setSelectedProduct(id, name);
         }
     }, [products])
 
+    useEffect(() => {
+        // const email = localStorage.getItem('email')
+        // const organization = (email!.split("@")[1]).split(".")[0];
+        // console.log(organization);
+        // getAllProductsApi(organization).then((data) => {
+        //     console.log('data: ', data);
+        // })
+    }, [])
+
     return (
         <>
         </>
diff --git a/app/src/modules/simulation/roboticArm/instances/roboticArmInstances.tsx b/app/src/modules/simulation/roboticArm/instances/roboticArmInstances.tsx
index 415c1d3..46125db 100644
--- a/app/src/modules/simulation/roboticArm/instances/roboticArmInstances.tsx
+++ b/app/src/modules/simulation/roboticArm/instances/roboticArmInstances.tsx
@@ -5,7 +5,6 @@ import { useArmBotStore } from '../../../../store/simulation/useArmBotStore';
 function RoboticArmInstances() {
     const { armBots } = useArmBotStore();
 
-
     return (
         <>
 
diff --git a/app/src/modules/simulation/roboticArm/roboticArm.tsx b/app/src/modules/simulation/roboticArm/roboticArm.tsx
index d403c6a..52382db 100644
--- a/app/src/modules/simulation/roboticArm/roboticArm.tsx
+++ b/app/src/modules/simulation/roboticArm/roboticArm.tsx
@@ -3,15 +3,11 @@ import RoboticArmInstances from "./instances/roboticArmInstances";
 import { useArmBotStore } from "../../../store/simulation/useArmBotStore";
 
 function RoboticArm() {
-    const { armBots, addArmBot, addCurrentAction } = useArmBotStore();
+    const { armBots, addArmBot, removeArmBot, addCurrentAction } = useArmBotStore();
 
     const armBotStatusSample: RoboticArmEventSchema[] = [
         {
             state: "idle",
-            // currentAction: {
-            //     actionUuid: "action-001",
-            //     actionName: "Pick Component",
-            // },
             modelUuid: "armbot-xyz-001",
             modelName: "ArmBot-X200",
             position: [0, 0, 0],
@@ -80,6 +76,7 @@ function RoboticArm() {
     ];
 
     useEffect(() => {
+        removeArmBot(armBotStatusSample[0].modelUuid);
         addArmBot('123', armBotStatusSample[0]);
         // addCurrentAction('armbot-xyz-001', 'action-001');
     }, []);
@@ -94,8 +91,6 @@ function RoboticArm() {
 
             <RoboticArmInstances />
 
-            <></>
-
         </>
     );
 }
diff --git a/app/src/modules/simulation/vehicle/vehicles.tsx b/app/src/modules/simulation/vehicle/vehicles.tsx
index 3364717..1da7ced 100644
--- a/app/src/modules/simulation/vehicle/vehicles.tsx
+++ b/app/src/modules/simulation/vehicle/vehicles.tsx
@@ -24,7 +24,6 @@ function Vehicles() {
                     actionUuid: "action-456",
                     actionName: "Deliver to Zone A",
                     actionType: "travel",
-                    material: "crate",
                     unLoadDuration: 15,
                     loadCapacity: 5,
                     pickUpPoint: { x: 5, y: 0, z: 3 },
@@ -68,7 +67,6 @@ function Vehicles() {
                     actionUuid: "action-456",
                     actionName: "Deliver to Zone A",
                     actionType: "travel",
-                    material: "crate",
                     unLoadDuration: 15,
                     loadCapacity: 5,
                     pickUpPoint: { x: 5, y: 0, z: 3 },
diff --git a/app/src/services/simulation/UpsertProductOrEventApi.ts b/app/src/services/simulation/UpsertProductOrEventApi.ts
index 27fa126..e2f45d1 100644
--- a/app/src/services/simulation/UpsertProductOrEventApi.ts
+++ b/app/src/services/simulation/UpsertProductOrEventApi.ts
@@ -1,6 +1,6 @@
 let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
 
-export const addProductOrEventApi = async (body: any) => {
+export const upsertProductOrEventApi = async (body: any) => {
     try {
         const response = await fetch(`${url_Backend_dwinzo}/api/v2/UpsertProductOrEvent`, {
             method: "POST",
diff --git a/app/src/types/simulationTypes.d.ts b/app/src/types/simulationTypes.d.ts
index eb49368..3293699 100644
--- a/app/src/types/simulationTypes.d.ts
+++ b/app/src/types/simulationTypes.d.ts
@@ -42,7 +42,6 @@ interface VehiclePointSchema {
         actionUuid: string;
         actionName: string;
         actionType: "travel";
-        material: string | null;
         unLoadDuration: number;
         loadCapacity: number;
         pickUpPoint: { x: number; y: number, z: number } | null;