feat: Integrate ProductsDuplicate component into ComparisonScene and update Project to use SceneProvider

This commit is contained in:
Jerald-Golden-B 2025-06-13 19:18:32 +05:30
parent 73bf97d8af
commit 11aea042fd
6 changed files with 37 additions and 54 deletions

View File

@ -8,6 +8,7 @@ import { useComparisonProduct, useMainProduct } from '../../../store/simulation/
import { usePlayButtonStore } from '../../../store/usePlayButtonStore'; import { usePlayButtonStore } from '../../../store/usePlayButtonStore';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useDuplicateProductStore } from '../../../modules/duplicate/duplicateStores/duplicateProductStore'; import { useDuplicateProductStore } from '../../../modules/duplicate/duplicateStores/duplicateProductStore';
import ProductsDuplicate from '../../../modules/duplicate/duplicateSimulation/duplicateProduct/duplicateProduct';
function ComparisonScene() { function ComparisonScene() {
const { isPlaying } = usePlayButtonStore(); const { isPlaying } = usePlayButtonStore();
@ -119,6 +120,8 @@ function ComparisonScene() {
} }
<CompareLayOut /> <CompareLayOut />
<ProductsDuplicate projectId={"684bcd620a64bc2a815a88d6"} />
{(shouldShowComparisonResult && !loadingProgress) && <ComparisonResult />} {(shouldShowComparisonResult && !loadingProgress) && <ComparisonResult />}
</> </>
)} )}

View File

@ -10,15 +10,15 @@ import {
} from "../../../store/builder/store"; } from "../../../store/builder/store";
import Search from "../inputs/Search"; import Search from "../inputs/Search";
import OuterClick from "../../../utils/outerClick"; import OuterClick from "../../../utils/outerClick";
import { useProductStore } from "../../../store/simulation/useProductStore";
import Scene from "../../../modules/scene/scene"; import Scene from "../../../modules/scene/scene";
import { useComparisonProduct } from "../../../store/simulation/useSimulationStore"; import { useComparisonProduct } from "../../../store/simulation/useSimulationStore";
import { usePauseButtonStore, usePlayButtonStore } from "../../../store/usePlayButtonStore"; import { usePauseButtonStore, usePlayButtonStore } from "../../../store/usePlayButtonStore";
import DuplicateScene from "../../../modules/duplicate/sceneDuplicate"; import DuplicateScene from "../../../modules/duplicate/sceneDuplicate";
import { useDuplicateProductStore } from "../../../modules/duplicate/duplicateStores/duplicateProductStore";
const CompareLayOut = () => { const CompareLayOut = () => {
const { comparisonProduct, setComparisonProduct, clearComparisonProduct } = useComparisonProduct(); const { comparisonProduct, setComparisonProduct, clearComparisonProduct } = useComparisonProduct();
const { products } = useProductStore(); const { products } = useDuplicateProductStore();
const { setLoadingProgress } = useLoadingProgress(); const { setLoadingProgress } = useLoadingProgress();
const [width, setWidth] = useState("50vw"); const [width, setWidth] = useState("50vw");
const [isResizing, setIsResizing] = useState(false); const [isResizing, setIsResizing] = useState(false);

View File

@ -5,14 +5,13 @@ import { getAllProductsApi } from '../../../../services/simulation/products/geta
import { usePlayButtonStore, useResetButtonStore } from '../../../../store/usePlayButtonStore'; import { usePlayButtonStore, useResetButtonStore } from '../../../../store/usePlayButtonStore';
import { useSceneContext } from '../../../scene/sceneContext'; import { useSceneContext } from '../../../scene/sceneContext';
import { useProductContext } from '../../../simulation/products/productContext'; import { useProductContext } from '../../../simulation/products/productContext';
import { useComparisonProduct, useMainProduct } from '../../../../store/simulation/useSimulationStore'; import { useComparisonProduct } from '../../../../store/simulation/useSimulationStore';
import { useDuplicateProductStore } from '../../duplicateStores/duplicateProductStore'; import { useDuplicateProductStore } from '../../duplicateStores/duplicateProductStore';
function ProductsDuplicate({ projectId }: { projectId: string }) { function ProductsDuplicate({ projectId }: { projectId: string }) {
const { armBotStore, machineStore, conveyorStore, vehicleStore, storageUnitStore, layout } = useSceneContext(); const { armBotStore, machineStore, conveyorStore, vehicleStore, storageUnitStore, layout } = useSceneContext();
const { products, getProductById, addProduct, setProducts } = useDuplicateProductStore(); const { products, getProductById, setProducts } = useDuplicateProductStore();
const { selectedProductStore } = useProductContext(); const { selectedProductStore } = useProductContext();
const { setMainProduct } = useMainProduct();
const { selectedProduct, setSelectedProduct } = selectedProductStore(); const { selectedProduct, setSelectedProduct } = selectedProductStore();
const { addVehicle, clearvehicles } = vehicleStore(); const { addVehicle, clearvehicles } = vehicleStore();
const { addArmBot, clearArmBots } = armBotStore(); const { addArmBot, clearArmBots } = armBotStore();
@ -31,25 +30,8 @@ function ProductsDuplicate({ projectId }: { projectId: string }) {
useEffect(() => { useEffect(() => {
getAllProductsApi(projectId || '').then((data) => { getAllProductsApi(projectId || '').then((data) => {
if (data.length === 0) { if (data.length > 0) {
const id = THREE.MathUtils.generateUUID();
const name = 'Product 1';
addProduct(name, id);
upsertProductOrEventApi({
productName: name,
productUuid: id,
projectId: projectId || ''
})
if (layout === 'Main Layout') {
setSelectedProduct(id, name);
setMainProduct(id, name);
}
} else {
setProducts(data); setProducts(data);
if (layout === 'Main Layout') {
setSelectedProduct(data[0].productUuid, data[0].productName);
setMainProduct(data[0].productUuid, data[0].productName);
}
} }
}) })
}, []) }, [])

View File

@ -3,12 +3,10 @@ import ProductsDuplicate from './duplicateProduct/duplicateProduct'
import PointsDuplicate from './duplicatePoint/duplicatePoint' import PointsDuplicate from './duplicatePoint/duplicatePoint'
import TriggerDuplicate from './duplicateTrigger/duplicateTrigger' import TriggerDuplicate from './duplicateTrigger/duplicateTrigger'
function SimulationDuplicate({ projectId }: { projectId: string }) { function SimulationDuplicate() {
return ( return (
<> <>
<ProductsDuplicate projectId={projectId} />
<PointsDuplicate /> <PointsDuplicate />
<TriggerDuplicate /> <TriggerDuplicate />

View File

@ -9,45 +9,42 @@ import background from "../../assets/textures/hdr/mudroadpuresky2k.hdr";
import ControlsDuplicate from "./duplicateSetup/controlsDuplicate"; import ControlsDuplicate from "./duplicateSetup/controlsDuplicate";
import PostProcessingDuplicate from "./duplicateSetup/postProcessingDuplicate"; import PostProcessingDuplicate from "./duplicateSetup/postProcessingDuplicate";
import { Color } from "three"; import { Color } from "three";
import { SceneProvider } from "../scene/sceneContext";
import SimulationDuplicate from "./duplicateSimulation/duplicateSimulation"; import SimulationDuplicate from "./duplicateSimulation/duplicateSimulation";
export default function DuplicateScene() { export default function DuplicateScene() {
const projectId = "684bcd620a64bc2a815a88d6"; const projectId = "684bcd620a64bc2a815a88d6";
return ( return (
<SceneProvider layout='Comparison Layout'> <Canvas
<Canvas id="sceneCanvas"
id="sceneCanvas" shadows
shadows color="#aaaa"
color="#aaaa" eventPrefix="client"
eventPrefix="client" style={{
style={{ pointerEvents: 'none'
pointerEvents: 'none' }}
}} onContextMenu={(e) => {
onContextMenu={(e) => { e.preventDefault();
e.preventDefault(); }}
}} onCreated={(e) => {
onCreated={(e) => { e.scene.background = new Color(0x19191d);
e.scene.background = new Color(0x19191d); }}
}} gl={{ powerPreference: "high-performance", antialias: true, preserveDrawingBuffer: true }}
gl={{ powerPreference: "high-performance", antialias: true, preserveDrawingBuffer: true }} >
>
<Sun /> <Sun />
<Shadows /> <Shadows />
<ControlsDuplicate /> <ControlsDuplicate />
<PostProcessingDuplicate /> <PostProcessingDuplicate />
<Environment files={background} environmentIntensity={1.5} /> <Environment files={background} environmentIntensity={1.5} />
<BuilderDuplicate projectId={projectId} /> <BuilderDuplicate projectId={projectId} />
<SimulationDuplicate projectId={projectId} /> <SimulationDuplicate />
</Canvas> </Canvas>
</SceneProvider>
); );
} }

View File

@ -34,6 +34,7 @@ import { setFloorItemApi } from "../services/factoryBuilder/assest/floorAsset/se
import { useAssetsStore } from "../store/builder/useAssetStore"; import { useAssetsStore } from "../store/builder/useAssetStore";
import ComparisonSceneProvider from "../components/layout/scenes/ComparisonSceneProvider"; import ComparisonSceneProvider from "../components/layout/scenes/ComparisonSceneProvider";
import MainSceneProvider from "../components/layout/scenes/MainSceneProvider"; import MainSceneProvider from "../components/layout/scenes/MainSceneProvider";
import { SceneProvider } from "../modules/scene/sceneContext";
const Project: React.FC = () => { const Project: React.FC = () => {
let navigate = useNavigate(); let navigate = useNavigate();
@ -127,7 +128,9 @@ const Project: React.FC = () => {
return ( return (
<div className="project-main"> <div className="project-main">
<ComparisonSceneProvider /> <SceneProvider layout='Comparison Layout'>
<ComparisonSceneProvider />
</SceneProvider>
<MainSceneProvider /> <MainSceneProvider />
{selectedUser && <FollowPerson />} {selectedUser && <FollowPerson />}
{isLogListVisible && ( {isLogListVisible && (