feat: Implement Zustand stores for machine, simulation, storage unit, vehicle, and visualization management
- Added `useMachineStore` for managing machine statuses, including actions for adding, removing, and updating machines. - Introduced `useSimulationStore` to handle product and event management with actions for adding, removing, and updating products and events. - Created `useStorageUnitStore` for managing storage unit statuses, including load tracking and state updates. - Developed `useVehicleStore` for vehicle management, including load and state updates. - Implemented `useChartStore` for managing measurement data and visualization settings. - Added `useDroppedObjectsStore` for handling dropped objects in visualization zones, including object manipulation actions. - Created `useZone3DWidgetStore` for managing 3D widget data in zones, including position and rotation updates. - Introduced `useZoneStore` for managing selected zone states and widget configurations.
This commit is contained in:
122
app/src/store/visualization/useZone3DWidgetStore.ts
Normal file
122
app/src/store/visualization/useZone3DWidgetStore.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
import { create } from "zustand";
|
||||
|
||||
type WidgetData = {
|
||||
id: string;
|
||||
type: string;
|
||||
position: [number, number, number];
|
||||
rotation?: [number, number, number];
|
||||
tempPosition?: [number, number, number];
|
||||
};
|
||||
|
||||
type ZoneWidgetStore = {
|
||||
zoneWidgetData: Record<string, WidgetData[]>;
|
||||
setZoneWidgetData: (zoneId: string, widgets: WidgetData[]) => void;
|
||||
addWidget: (zoneId: string, widget: WidgetData) => void;
|
||||
tempWidget: (zoneId: string, widget: WidgetData) => void;
|
||||
updateWidgetPosition: (zoneId: string, widgetId: string, newPosition: [number, number, number]) => void;
|
||||
tempWidgetPosition: (zoneId: string, widgetId: string, newPosition: [number, number, number]) => void;
|
||||
updateWidgetRotation: (zoneId: string, widgetId: string, newRotation: [number, number, number]) => void;
|
||||
};
|
||||
|
||||
export const useZoneWidgetStore = create<ZoneWidgetStore>((set) => ({
|
||||
zoneWidgetData: {},
|
||||
|
||||
setZoneWidgetData: (zoneId: string, widgets: WidgetData[]) =>
|
||||
set((state: ZoneWidgetStore) => ({
|
||||
zoneWidgetData: { ...state.zoneWidgetData, [zoneId]: widgets },
|
||||
})),
|
||||
|
||||
addWidget: (zoneId: string, widget: WidgetData) =>
|
||||
set((state: ZoneWidgetStore) => ({
|
||||
zoneWidgetData: {
|
||||
...state.zoneWidgetData,
|
||||
[zoneId]: [...(state.zoneWidgetData[zoneId] || []), { ...widget, rotation: widget.rotation || [0, 0, 0] }],
|
||||
},
|
||||
})),
|
||||
tempWidget: (zoneId: string, widget: WidgetData) =>
|
||||
set((state: ZoneWidgetStore) => ({
|
||||
zoneWidgetData: {
|
||||
...state.zoneWidgetData,
|
||||
[zoneId]: [...(state.zoneWidgetData[zoneId] || []), { ...widget, rotation: widget.rotation || [0, 0, 0] }],
|
||||
},
|
||||
})),
|
||||
|
||||
updateWidgetPosition: (zoneId: string, widgetId: string, newPosition: [number, number, number]) =>
|
||||
set((state: ZoneWidgetStore) => {
|
||||
const widgets = state.zoneWidgetData[zoneId] || [];
|
||||
return {
|
||||
zoneWidgetData: {
|
||||
...state.zoneWidgetData,
|
||||
[zoneId]: widgets.map((widget: WidgetData) =>
|
||||
widget.id === widgetId ? { ...widget, position: newPosition } : widget
|
||||
),
|
||||
},
|
||||
};
|
||||
}),
|
||||
tempWidgetPosition: (zoneId: string, widgetId: string, newPosition: [number, number, number]) =>
|
||||
set((state: ZoneWidgetStore) => {
|
||||
const widgets = state.zoneWidgetData[zoneId] || [];
|
||||
return {
|
||||
zoneWidgetData: {
|
||||
...state.zoneWidgetData,
|
||||
[zoneId]: widgets.map((widget: WidgetData) =>
|
||||
widget.id === widgetId ? { ...widget, position: newPosition } : widget
|
||||
),
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
updateWidgetRotation: (zoneId: string, widgetId: string, newRotation: [number, number, number]) =>
|
||||
set((state: ZoneWidgetStore) => {
|
||||
const widgets = state.zoneWidgetData[zoneId] || [];
|
||||
return {
|
||||
zoneWidgetData: {
|
||||
...state.zoneWidgetData,
|
||||
[zoneId]: widgets.map((widget: WidgetData) =>
|
||||
widget.id === widgetId ? { ...widget, rotation: newRotation } : widget
|
||||
),
|
||||
},
|
||||
};
|
||||
}),
|
||||
}));
|
||||
|
||||
|
||||
interface RightClickStore {
|
||||
rightClickSelected: string | null;
|
||||
setRightClickSelected: (x: string | null) => void;
|
||||
}
|
||||
|
||||
export const useRightClickSelected = create<RightClickStore>((set) => ({
|
||||
rightClickSelected: null, // Default to null
|
||||
setRightClickSelected: (x) => set({ rightClickSelected: x }),
|
||||
}));
|
||||
|
||||
export const useTopData = create<any>((set: any) => ({
|
||||
top: 0,
|
||||
setTop: (x: any) => set({ top: x }),
|
||||
}));
|
||||
|
||||
export const useLeftData = create<any>((set: any) => ({
|
||||
left: 0,
|
||||
setLeft: (x: any) => set({ left: x }),
|
||||
}));
|
||||
|
||||
interface RightSelectStore {
|
||||
rightSelect: string | null;
|
||||
setRightSelect: (x: string | null) => void;
|
||||
}
|
||||
|
||||
export const useRightSelected = create<RightSelectStore>((set) => ({
|
||||
rightSelect: null, // Default state is null
|
||||
setRightSelect: (x) => set({ rightSelect: x }),
|
||||
}));
|
||||
|
||||
interface EditWidgetOptionsStore {
|
||||
editWidgetOptions: boolean;
|
||||
setEditWidgetOptions: (value: boolean) => void;
|
||||
}
|
||||
|
||||
export const useEditWidgetOptionsStore = create<EditWidgetOptionsStore>((set) => ({
|
||||
editWidgetOptions: false, // Initial state
|
||||
setEditWidgetOptions: (value: boolean) => set({ editWidgetOptions: value }),
|
||||
}));
|
||||
Reference in New Issue
Block a user