added selectedAisleProperties and its backend updation

This commit is contained in:
2025-08-28 18:00:00 +05:30
parent cb87cd067b
commit 94bec4f2f0
14 changed files with 765 additions and 105 deletions

View File

@@ -3,43 +3,42 @@ import { immer } from "zustand/middleware/immer";
interface AisleStore {
aisles: Aisles;
setAisles: (aisles: Aisles) => void;
addAisle: (aisle: Aisle) => void;
updateAisle: (uuid: string, updated: Partial<Aisle>) => void;
removeAisle: (uuid: string) => void;
setAisles: (aisles: Aisles) => Aisles;
addAisle: (aisle: Aisle) => Aisle;
updateAisle: (uuid: string, updated: Partial<Aisle>) => 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);