Decal Properties
- { handleRotationChange(parseFloat(e)) }}
+ handleRotationChange(value)}
/>
- { handleScaleChange(parseFloat(e)) }}
+
+ handleScaleChange(value)}
/>
diff --git a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arcAisle.tsx b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arcAisle.tsx
index bc09b68..d791f8f 100644
--- a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arcAisle.tsx
+++ b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arcAisle.tsx
@@ -1,5 +1,5 @@
import * as THREE from 'three';
-import { useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from 'react';
import { Extrude } from '@react-three/drei';
import * as Constants from '../../../../../../types/world/worldConstants';
import { useToolMode } from '../../../../../../store/builder/store';
@@ -8,7 +8,13 @@ import { useBuilderStore } from '../../../../../../store/builder/useBuilderStore
function ArcAisle({ aisle }: { readonly aisle: Aisle }) {
const aisleRef = useRef
(null);
const { toolMode } = useToolMode();
- const { setSelectedAisle, hoveredPoint } = useBuilderStore();
+ const { setSelectedAisle, hoveredPoint, selectedAisle } = useBuilderStore();
+
+ useEffect(() => {
+ if (selectedAisle?.aisleData.aisleUuid === aisle.aisleUuid && !selectedAisle.aisleMesh) {
+ setSelectedAisle({ aisleData: selectedAisle.aisleData, aisleMesh: aisleRef.current });
+ }
+ }, [selectedAisle])
const arc = useMemo(() => {
if (aisle.points.length < 2 || aisle.type.aisleType !== 'arc-aisle') return null;
@@ -63,8 +69,8 @@ function ArcAisle({ aisle }: { readonly aisle: Aisle }) {
}, [aisle]);
const handleClick = () => {
- if (toolMode === 'move' && !hoveredPoint) {
- setSelectedAisle(aisleRef.current);
+ if ((toolMode === 'move' || toolMode === 'cursor') && !hoveredPoint) {
+ setSelectedAisle({ aisleMesh: aisleRef.current, aisleData: aisle });
}
}
diff --git a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arrowAisle.tsx b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arrowAisle.tsx
index 49bf666..115edc6 100644
--- a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arrowAisle.tsx
+++ b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arrowAisle.tsx
@@ -1,5 +1,5 @@
import * as THREE from 'three';
-import { useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from 'react';
import { Extrude } from '@react-three/drei';
import * as Constants from '../../../../../../types/world/worldConstants';
import { useToolMode } from '../../../../../../store/builder/store';
@@ -8,7 +8,13 @@ import { useBuilderStore } from '../../../../../../store/builder/useBuilderStore
function ArrowAisle({ aisle }: { readonly aisle: Aisle }) {
const aisleRef = useRef(null);
const { toolMode } = useToolMode();
- const { setSelectedAisle, hoveredPoint } = useBuilderStore();
+ const { setSelectedAisle, hoveredPoint, selectedAisle } = useBuilderStore();
+
+ useEffect(() => {
+ if (selectedAisle?.aisleData.aisleUuid === aisle.aisleUuid && !selectedAisle.aisleMesh) {
+ setSelectedAisle({ aisleData: selectedAisle.aisleData, aisleMesh: aisleRef.current });
+ }
+ }, [selectedAisle])
const arrow = useMemo(() => {
if (aisle.points.length < 2 || aisle.type.aisleType !== 'arrow-aisle') return null;
@@ -50,8 +56,8 @@ function ArrowAisle({ aisle }: { readonly aisle: Aisle }) {
}, [aisle]);
const handleClick = () => {
- if (toolMode === 'move' && !hoveredPoint) {
- setSelectedAisle(aisleRef.current);
+ if ((toolMode === 'move' || toolMode === 'cursor') && !hoveredPoint) {
+ setSelectedAisle({ aisleMesh: aisleRef.current, aisleData: aisle });
}
}
diff --git a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arrowsAisle.tsx b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arrowsAisle.tsx
index 6908cf3..3700d55 100644
--- a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arrowsAisle.tsx
+++ b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/arrowsAisle.tsx
@@ -1,5 +1,5 @@
import * as THREE from 'three';
-import { useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from 'react';
import { Instances, Instance } from '@react-three/drei';
import * as Constants from '../../../../../../types/world/worldConstants';
import { useToolMode } from '../../../../../../store/builder/store';
@@ -8,7 +8,13 @@ import { useBuilderStore } from '../../../../../../store/builder/useBuilderStore
function ArrowsAisle({ aisle }: { readonly aisle: Aisle }) {
const aisleRef = useRef(null);
const { toolMode } = useToolMode();
- const { setSelectedAisle, hoveredPoint } = useBuilderStore();
+ const { setSelectedAisle, hoveredPoint, selectedAisle } = useBuilderStore();
+
+ useEffect(() => {
+ if (selectedAisle?.aisleData.aisleUuid === aisle.aisleUuid && !selectedAisle.aisleMesh) {
+ setSelectedAisle({ aisleData: selectedAisle.aisleData, aisleMesh: aisleRef.current });
+ }
+ }, [selectedAisle])
const { arrowGeometry, arrowInstances } = useMemo(() => {
const result = {
@@ -68,8 +74,8 @@ function ArrowsAisle({ aisle }: { readonly aisle: Aisle }) {
}, [aisle]);
const handleClick = () => {
- if (toolMode === 'move' && !hoveredPoint) {
- setSelectedAisle(aisleRef.current);
+ if ((toolMode === 'move' || toolMode === 'cursor') && !hoveredPoint) {
+ setSelectedAisle({ aisleMesh: aisleRef.current, aisleData: aisle });
}
};
diff --git a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/circleAisle.tsx b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/circleAisle.tsx
index af852e8..d9bc2d2 100644
--- a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/circleAisle.tsx
+++ b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/circleAisle.tsx
@@ -1,5 +1,5 @@
import * as THREE from 'three';
-import { useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from 'react';
import { Extrude } from '@react-three/drei';
import * as Constants from '../../../../../../types/world/worldConstants';
import { useToolMode } from '../../../../../../store/builder/store';
@@ -8,7 +8,13 @@ import { useBuilderStore } from '../../../../../../store/builder/useBuilderStore
function CircleAisle({ aisle }: { readonly aisle: Aisle }) {
const aisleRef = useRef(null);
const { toolMode } = useToolMode();
- const { setSelectedAisle, hoveredPoint } = useBuilderStore();
+ const { setSelectedAisle, hoveredPoint, selectedAisle } = useBuilderStore();
+
+ useEffect(() => {
+ if (selectedAisle?.aisleData.aisleUuid === aisle.aisleUuid && !selectedAisle.aisleMesh) {
+ setSelectedAisle({ aisleData: selectedAisle.aisleData, aisleMesh: aisleRef.current });
+ }
+ }, [selectedAisle])
const circle = useMemo(() => {
if (aisle.points.length < 2 || aisle.type.aisleType !== 'circle-aisle') return null;
@@ -38,8 +44,8 @@ function CircleAisle({ aisle }: { readonly aisle: Aisle }) {
}, [aisle]);
const handleClick = () => {
- if (toolMode === 'move' && !hoveredPoint) {
- setSelectedAisle(aisleRef.current);
+ if ((toolMode === 'move' || toolMode === 'cursor') && !hoveredPoint) {
+ setSelectedAisle({ aisleMesh: aisleRef.current, aisleData: aisle });
}
}
diff --git a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/dashedAisle.tsx b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/dashedAisle.tsx
index 72fb3c7..b00c87b 100644
--- a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/dashedAisle.tsx
+++ b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/dashedAisle.tsx
@@ -1,5 +1,5 @@
import * as THREE from 'three';
-import { useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from 'react';
import { Instances, Instance } from '@react-three/drei';
import * as Constants from '../../../../../../types/world/worldConstants';
import { useToolMode } from '../../../../../../store/builder/store';
@@ -8,7 +8,13 @@ import { useBuilderStore } from '../../../../../../store/builder/useBuilderStore
function DashedAisle({ aisle }: { readonly aisle: Aisle }) {
const aisleRef = useRef(null);
const { toolMode } = useToolMode();
- const { setSelectedAisle, hoveredPoint } = useBuilderStore();
+ const { setSelectedAisle, hoveredPoint, selectedAisle } = useBuilderStore();
+
+ useEffect(() => {
+ if (selectedAisle?.aisleData.aisleUuid === aisle.aisleUuid && !selectedAisle.aisleMesh) {
+ setSelectedAisle({ aisleData: selectedAisle.aisleData, aisleMesh: aisleRef.current });
+ }
+ }, [selectedAisle])
const dashInstances = useMemo(() => {
if (aisle.points.length < 2 || aisle.type.aisleType !== 'dashed-aisle') return [];
@@ -43,8 +49,8 @@ function DashedAisle({ aisle }: { readonly aisle: Aisle }) {
}, [aisle]);
const handleClick = () => {
- if (toolMode === 'move' && !hoveredPoint) {
- setSelectedAisle(aisleRef.current);
+ if ((toolMode === 'move' || toolMode === 'cursor') && !hoveredPoint) {
+ setSelectedAisle({ aisleMesh: aisleRef.current, aisleData: aisle });
}
};
diff --git a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/dottedAisle.tsx b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/dottedAisle.tsx
index e2b264a..09557aa 100644
--- a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/dottedAisle.tsx
+++ b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/dottedAisle.tsx
@@ -1,5 +1,5 @@
import * as THREE from 'three';
-import { useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from 'react';
import { Instance, Instances } from '@react-three/drei';
import * as Constants from '../../../../../../types/world/worldConstants';
import { useToolMode } from '../../../../../../store/builder/store';
@@ -8,7 +8,13 @@ import { useBuilderStore } from '../../../../../../store/builder/useBuilderStore
function DottedAisle({ aisle }: { readonly aisle: Aisle }) {
const aisleRef = useRef(null);
const { toolMode } = useToolMode();
- const { setSelectedAisle, hoveredPoint } = useBuilderStore();
+ const { setSelectedAisle, hoveredPoint, selectedAisle } = useBuilderStore();
+
+ useEffect(() => {
+ if (selectedAisle?.aisleData.aisleUuid === aisle.aisleUuid && !selectedAisle.aisleMesh) {
+ setSelectedAisle({ aisleData: selectedAisle.aisleData, aisleMesh: aisleRef.current });
+ }
+ }, [selectedAisle])
const dotPositions = useMemo(() => {
if (aisle.points.length < 2 || aisle.type.aisleType !== 'dotted-aisle') return [];
@@ -27,8 +33,8 @@ function DottedAisle({ aisle }: { readonly aisle: Aisle }) {
}, [aisle]);
const handleClick = () => {
- if (toolMode === 'move' && !hoveredPoint) {
- setSelectedAisle(aisleRef.current);
+ if ((toolMode === 'move' || toolMode === 'cursor') && !hoveredPoint) {
+ setSelectedAisle({ aisleMesh: aisleRef.current, aisleData: aisle });
}
}
diff --git a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/junctionAisle.tsx b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/junctionAisle.tsx
index a3f8bdf..8d45763 100644
--- a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/junctionAisle.tsx
+++ b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/junctionAisle.tsx
@@ -1,5 +1,5 @@
import * as THREE from 'three';
-import { useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from 'react';
import { Extrude } from '@react-three/drei';
import * as Constants from '../../../../../../types/world/worldConstants';
import { useToolMode } from '../../../../../../store/builder/store';
@@ -8,7 +8,13 @@ import { useBuilderStore } from '../../../../../../store/builder/useBuilderStore
function JunctionAisle({ aisle }: { readonly aisle: Aisle }) {
const aisleRef = useRef(null);
const { toolMode } = useToolMode();
- const { setSelectedAisle, hoveredPoint } = useBuilderStore();
+ const { setSelectedAisle, hoveredPoint, selectedAisle } = useBuilderStore();
+
+ useEffect(() => {
+ if (selectedAisle?.aisleData.aisleUuid === aisle.aisleUuid && !selectedAisle.aisleMesh) {
+ setSelectedAisle({ aisleData: selectedAisle.aisleData, aisleMesh: aisleRef.current });
+ }
+ }, [selectedAisle])
const arrows = useMemo(() => {
if (aisle.points.length < 2 || aisle.type.aisleType !== 'junction-aisle') return null;
@@ -85,8 +91,8 @@ function JunctionAisle({ aisle }: { readonly aisle: Aisle }) {
}, [aisle]);
const handleClick = () => {
- if (toolMode === 'move' && !hoveredPoint) {
- setSelectedAisle(aisleRef.current);
+ if ((toolMode === 'move' || toolMode === 'cursor') && !hoveredPoint) {
+ setSelectedAisle({ aisleMesh: aisleRef.current, aisleData: aisle });
}
}
diff --git a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/solidAisle.tsx b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/solidAisle.tsx
index e9321b0..e43f717 100644
--- a/app/src/modules/builder/aisle/Instances/instance/aisleTypes/solidAisle.tsx
+++ b/app/src/modules/builder/aisle/Instances/instance/aisleTypes/solidAisle.tsx
@@ -1,5 +1,5 @@
import * as THREE from 'three';
-import { useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from 'react';
import { Extrude } from '@react-three/drei';
import * as Constants from '../../../../../../types/world/worldConstants';
import { useToolMode } from '../../../../../../store/builder/store';
@@ -8,7 +8,14 @@ import { useBuilderStore } from '../../../../../../store/builder/useBuilderStore
function SolidAisle({ aisle }: { readonly aisle: Aisle }) {
const aisleRef = useRef(null);
const { toolMode } = useToolMode();
- const { setSelectedAisle, hoveredPoint } = useBuilderStore();
+ const { setSelectedAisle, hoveredPoint, selectedAisle } = useBuilderStore();
+
+ useEffect(() => {
+ if (selectedAisle?.aisleData.aisleUuid === aisle.aisleUuid && !selectedAisle.aisleMesh) {
+ setSelectedAisle({ aisleData: selectedAisle.aisleData, aisleMesh: aisleRef.current });
+ }
+ }, [selectedAisle])
+
const shape = useMemo(() => {
if (aisle.points.length < 2 || aisle.type.aisleType !== 'solid-aisle') return null;
@@ -35,8 +42,8 @@ function SolidAisle({ aisle }: { readonly aisle: Aisle }) {
}, [aisle]);
const handleClick = () => {
- if (toolMode === 'move' && !hoveredPoint) {
- setSelectedAisle(aisleRef.current);
+ if ((toolMode === 'move' || toolMode === 'cursor') && !hoveredPoint) {
+ setSelectedAisle({ aisleMesh: aisleRef.current, aisleData: aisle });
}
}
diff --git a/app/src/modules/scene/postProcessing/postProcessing.tsx b/app/src/modules/scene/postProcessing/postProcessing.tsx
index 24f7428..e6d656d 100644
--- a/app/src/modules/scene/postProcessing/postProcessing.tsx
+++ b/app/src/modules/scene/postProcessing/postProcessing.tsx
@@ -120,7 +120,7 @@ export default function PostProcessing() {
)}
{selectedAisle && (
void;
- addAisle: (aisle: Aisle) => void;
- updateAisle: (uuid: string, updated: Partial) => void;
- removeAisle: (uuid: string) => void;
+ setAisles: (aisles: Aisles) => Aisles;
+ addAisle: (aisle: Aisle) => Aisle;
+ updateAisle: (uuid: string, updated: Partial) => Aisle | undefined;
+ removeAisle: (uuid: string) => Aisle | undefined;
removePoint: (uuid: string) => Aisles;
- clearAisles: () => void;
+ clearAisles: () => Aisles;
setPosition: (
pointUuid: string,
position: [number, number, number]
) => Aisle | undefined;
- setLayer: (pointUuid: string, layer: number) => void;
- setColor: (aisleUuid: string, color: AisleColors) => void;
+ setLayer: (pointUuid: string, layer: number) => Aisle | undefined;
+ setColor: (aisleUuid: string, color: AisleColors) => Aisle | undefined;
- // Type-specific setters
- setSolidAisleWidth: (aisleUuid: string, width: number) => void;
+ setSolidAisleWidth: (aisleUuid: string, width: number) => Aisle | undefined;
setDashedAisleProperties: (
aisleUuid: string,
props: { aisleWidth?: number; dashLength?: number; gapLength?: number }
- ) => void;
+ ) => Aisle | undefined;
setDottedAisleProperties: (
aisleUuid: string,
props: { dotRadius?: number; gapLength?: number }
- ) => void;
- setArrowAisleWidth: (aisleUuid: string, width: number) => void;
+ ) => Aisle | undefined;
+ setArrowAisleWidth: (aisleUuid: string, width: number) => Aisle | undefined;
setArrowsAisleProperties: (
aisleUuid: string,
props: { aisleWidth?: number; aisleLength?: number; gapLength?: number }
- ) => void;
+ ) => Aisle | undefined;
setArcAisleWidth: (
aisleUuid: string,
props: { aisleWidth?: number; isFlipped: boolean }
- ) => void;
- setCircleAisleWidth: (aisleUuid: string, width: number) => void;
+ ) => Aisle | undefined;
+ setCircleAisleWidth: (aisleUuid: string, width: number) => Aisle | undefined;
setJunctionAisleProperties: (
aisleUuid: string,
props: { aisleWidth?: number; isFlipped: boolean }
- ) => void;
+ ) => Aisle | undefined;
getAisleById: (uuid: string) => Aisle | undefined;
getAislesByPointId: (uuid: string) => Aisle[] | [];
@@ -53,28 +52,43 @@ export const createAisleStore = () => {
immer((set, get) => ({
aisles: [],
- setAisles: (aisles) =>
+ setAisles: (aisles) => {
set((state) => {
state.aisles = aisles;
- }),
+ });
+ return aisles;
+ },
- addAisle: (aisle) =>
+ addAisle: (aisle) => {
set((state) => {
state.aisles.push(aisle);
- }),
+ });
+ return aisle;
+ },
- updateAisle: (uuid, updated) =>
+ updateAisle: (uuid, updated) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === uuid);
if (aisle) {
Object.assign(aisle, updated);
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
- removeAisle: (uuid) =>
+ removeAisle: (uuid) => {
+ let removedAisle: Aisle | undefined;
set((state) => {
- state.aisles = state.aisles.filter((a) => a.aisleUuid !== uuid);
- }),
+ const index = state.aisles.findIndex((a) => a.aisleUuid === uuid);
+ if (index !== -1) {
+ removedAisle = JSON.parse(JSON.stringify(state.aisles[index]));
+ state.aisles.splice(index, 1);
+ }
+ });
+ return removedAisle;
+ },
removePoint: (uuid) => {
const removedAisles: Aisle[] = [];
@@ -94,9 +108,11 @@ export const createAisleStore = () => {
},
clearAisles: () => {
+ const clearedAisles = get().aisles;
set((state) => {
state.aisles = [];
- })
+ });
+ return clearedAisles;
},
setPosition: (pointUuid, position) => {
@@ -113,34 +129,46 @@ export const createAisleStore = () => {
return updatedAisle;
},
- setLayer: (pointUuid, layer) =>
+ setLayer: (pointUuid, layer) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
for (const aisle of state.aisles) {
const point = aisle.points.find((p) => p.pointUuid === pointUuid);
if (point) {
point.layer = layer;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
}
- }),
+ });
+ return updatedAisle;
+ },
- setColor: (aisleUuid, color) =>
+ setColor: (aisleUuid, color) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === aisleUuid);
if (aisle) {
aisle.type.aisleColor = color;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
- // Type-specific property setters
- setSolidAisleWidth: (aisleUuid, width) =>
+ setSolidAisleWidth: (aisleUuid, width) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === aisleUuid);
if (aisle && aisle.type.aisleType === "solid-aisle") {
aisle.type.aisleWidth = width;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
- setDashedAisleProperties: (aisleUuid, props) =>
+ setDashedAisleProperties: (aisleUuid, props) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === aisleUuid);
if (aisle && aisle.type.aisleType === "dashed-aisle") {
@@ -150,10 +178,14 @@ export const createAisleStore = () => {
aisle.type.dashLength = props.dashLength;
if (props.gapLength !== undefined)
aisle.type.gapLength = props.gapLength;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
- setDottedAisleProperties: (aisleUuid, props) =>
+ setDottedAisleProperties: (aisleUuid, props) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === aisleUuid);
if (aisle && aisle.type.aisleType === "dotted-aisle") {
@@ -161,18 +193,26 @@ export const createAisleStore = () => {
aisle.type.dotRadius = props.dotRadius;
if (props.gapLength !== undefined)
aisle.type.gapLength = props.gapLength;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
- setArrowAisleWidth: (aisleUuid, width) =>
+ setArrowAisleWidth: (aisleUuid, width) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === aisleUuid);
if (aisle && aisle.type.aisleType === "arrow-aisle") {
aisle.type.aisleWidth = width;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
- setArrowsAisleProperties: (aisleUuid, props) =>
+ setArrowsAisleProperties: (aisleUuid, props) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === aisleUuid);
if (aisle && aisle.type.aisleType === "arrows-aisle") {
@@ -182,10 +222,14 @@ export const createAisleStore = () => {
aisle.type.aisleLength = props.aisleLength;
if (props.gapLength !== undefined)
aisle.type.gapLength = props.gapLength;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
- setArcAisleWidth: (aisleUuid, props) =>
+ setArcAisleWidth: (aisleUuid, props) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === aisleUuid);
if (aisle && aisle.type.aisleType === "arc-aisle") {
@@ -193,18 +237,26 @@ export const createAisleStore = () => {
aisle.type.aisleWidth = props.aisleWidth;
if (props.isFlipped !== undefined)
aisle.type.isFlipped = props.isFlipped;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
- setCircleAisleWidth: (aisleUuid, width) =>
+ setCircleAisleWidth: (aisleUuid, width) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === aisleUuid);
if (aisle && aisle.type.aisleType === "circle-aisle") {
aisle.type.aisleWidth = width;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
- setJunctionAisleProperties: (aisleUuid, props) =>
+ setJunctionAisleProperties: (aisleUuid, props) => {
+ let updatedAisle: Aisle | undefined;
set((state) => {
const aisle = state.aisles.find((a) => a.aisleUuid === aisleUuid);
if (aisle && aisle.type.aisleType === "junction-aisle") {
@@ -212,8 +264,11 @@ export const createAisleStore = () => {
aisle.type.aisleWidth = props.aisleWidth;
if (props.isFlipped !== undefined)
aisle.type.isFlipped = props.isFlipped;
+ updatedAisle = JSON.parse(JSON.stringify(aisle));
}
- }),
+ });
+ return updatedAisle;
+ },
getAisleById: (uuid) => {
return get().aisles.find((a) => a.aisleUuid === uuid);
diff --git a/app/src/store/builder/useBuilderStore.ts b/app/src/store/builder/useBuilderStore.ts
index 476631d..376689b 100644
--- a/app/src/store/builder/useBuilderStore.ts
+++ b/app/src/store/builder/useBuilderStore.ts
@@ -47,7 +47,7 @@ interface BuilderState {
},
// Aisle General
- selectedAisle: Object3D | null;
+ selectedAisle: {aisleMesh: Object3D | null, aisleData: Aisle} | null;
aisleType: AisleTypes;
aisleWidth: number;
aisleColor: AisleColors;
@@ -97,7 +97,7 @@ interface BuilderState {
setDecalDragState: (isDragging: boolean, draggingDecalUuid: string | null, dragOffset: Vector3 | null) => void;
// Setters - Aisle General
- setSelectedAisle: (aisle: Object3D | null) => void;
+ setSelectedAisle: (aisle: {aisleMesh: Object3D | null, aisleData: Aisle} | null) => void;
setAisleType: (type: AisleTypes) => void;
setAisleWidth: (width: number) => void;
setAisleColor: (color: AisleColors) => void;
@@ -325,7 +325,7 @@ export const useBuilderStore = create()(
// === Setters: Aisle General ===
- setSelectedAisle: (aisle: Object3D | null) => {
+ setSelectedAisle: (aisle: {aisleMesh: Object3D | null, aisleData: Aisle} | null) => {
set((state) => {
state.selectedAisle = aisle;
});