2025-07-22 16:33:33 +05:30
|
|
|
import { createContext, useContext, useMemo, useRef } from 'react';
|
2025-06-23 09:37:53 +05:30
|
|
|
|
|
|
|
|
import { createAssetStore, AssetStoreType } from '../../store/builder/useAssetStore';
|
2025-06-25 15:26:53 +05:30
|
|
|
import { createWallAssetStore, WallAssetStoreType } from '../../store/builder/useWallAssetStore';
|
|
|
|
|
import { createWallStore, WallStoreType } from '../../store/builder/useWallStore';
|
2025-06-23 09:37:53 +05:30
|
|
|
import { createAisleStore, AisleStoreType } from '../../store/builder/useAisleStore';
|
2025-06-25 15:26:53 +05:30
|
|
|
import { createZoneStore, ZoneStoreType } from '../../store/builder/useZoneStore';
|
|
|
|
|
import { createFloorStore, FloorStoreType } from '../../store/builder/useFloorStore';
|
2025-06-23 09:37:53 +05:30
|
|
|
|
2025-07-29 17:20:34 +05:30
|
|
|
import { createUndoRedo2DStore, UndoRedo2DStoreType } from '../../store/builder/useUndoRedo2DStore';
|
|
|
|
|
|
2025-06-23 09:37:53 +05:30
|
|
|
import { createEventStore, EventStoreType } from '../../store/simulation/useEventsStore';
|
|
|
|
|
import { createProductStore, ProductStoreType } from '../../store/simulation/useProductStore';
|
|
|
|
|
|
2025-06-10 15:28:23 +05:30
|
|
|
import { createMaterialStore, MaterialStoreType } from '../../store/simulation/useMaterialStore';
|
|
|
|
|
import { createArmBotStore, ArmBotStoreType } from '../../store/simulation/useArmBotStore';
|
|
|
|
|
import { createMachineStore, MachineStoreType } from '../../store/simulation/useMachineStore';
|
|
|
|
|
import { createConveyorStore, ConveyorStoreType } from '../../store/simulation/useConveyorStore';
|
|
|
|
|
import { createVehicleStore, VehicleStoreType } from '../../store/simulation/useVehicleStore';
|
|
|
|
|
import { createStorageUnitStore, StorageUnitStoreType } from '../../store/simulation/useStorageUnitStore';
|
2025-07-02 15:07:31 +05:30
|
|
|
import { createHumanStore, HumanStoreType } from '../../store/simulation/useHumanStore';
|
2025-08-06 18:19:54 +05:30
|
|
|
import { createCraneStore, CraneStoreType } from '../../store/simulation/useCraneStore';
|
2025-06-10 15:28:23 +05:30
|
|
|
|
|
|
|
|
type SceneContextValue = {
|
2025-06-23 09:37:53 +05:30
|
|
|
|
|
|
|
|
assetStore: AssetStoreType,
|
2025-06-25 15:26:53 +05:30
|
|
|
wallAssetStore: WallAssetStoreType,
|
|
|
|
|
wallStore: WallStoreType,
|
2025-06-23 09:37:53 +05:30
|
|
|
aisleStore: AisleStoreType,
|
2025-06-25 15:26:53 +05:30
|
|
|
zoneStore: ZoneStoreType,
|
|
|
|
|
floorStore: FloorStoreType,
|
2025-06-23 09:37:53 +05:30
|
|
|
|
2025-07-29 17:20:34 +05:30
|
|
|
undoRedo2DStore: UndoRedo2DStoreType,
|
|
|
|
|
|
2025-06-23 09:37:53 +05:30
|
|
|
eventStore: EventStoreType,
|
|
|
|
|
productStore: ProductStoreType,
|
|
|
|
|
|
2025-06-10 15:28:23 +05:30
|
|
|
materialStore: MaterialStoreType;
|
|
|
|
|
armBotStore: ArmBotStoreType;
|
|
|
|
|
machineStore: MachineStoreType;
|
|
|
|
|
conveyorStore: ConveyorStoreType;
|
|
|
|
|
vehicleStore: VehicleStoreType;
|
|
|
|
|
storageUnitStore: StorageUnitStoreType;
|
2025-07-02 15:07:31 +05:30
|
|
|
humanStore: HumanStoreType;
|
2025-08-06 18:19:54 +05:30
|
|
|
craneStore: CraneStoreType;
|
2025-06-23 09:37:53 +05:30
|
|
|
|
2025-07-22 16:33:33 +05:30
|
|
|
humanEventManagerRef: React.RefObject<HumanEventManagerState>;
|
|
|
|
|
|
2025-06-24 11:04:56 +05:30
|
|
|
clearStores: () => void;
|
|
|
|
|
|
2025-06-10 15:28:23 +05:30
|
|
|
layout: 'Main Layout' | 'Comparison Layout';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const SceneContext = createContext<SceneContextValue | null>(null);
|
|
|
|
|
|
|
|
|
|
export function SceneProvider({
|
|
|
|
|
children,
|
|
|
|
|
layout
|
|
|
|
|
}: {
|
|
|
|
|
readonly children: React.ReactNode;
|
|
|
|
|
readonly layout: 'Main Layout' | 'Comparison Layout';
|
|
|
|
|
}) {
|
2025-06-23 09:37:53 +05:30
|
|
|
|
|
|
|
|
const assetStore = useMemo(() => createAssetStore(), []);
|
2025-06-25 15:26:53 +05:30
|
|
|
const wallAssetStore = useMemo(() => createWallAssetStore(), []);
|
|
|
|
|
const wallStore = useMemo(() => createWallStore(), []);
|
2025-06-23 09:37:53 +05:30
|
|
|
const aisleStore = useMemo(() => createAisleStore(), []);
|
2025-06-25 15:26:53 +05:30
|
|
|
const zoneStore = useMemo(() => createZoneStore(), []);
|
|
|
|
|
const floorStore = useMemo(() => createFloorStore(), []);
|
2025-06-23 09:37:53 +05:30
|
|
|
|
2025-07-29 17:20:34 +05:30
|
|
|
const undoRedo2DStore = useMemo(() => createUndoRedo2DStore(), []);
|
|
|
|
|
|
2025-06-23 09:37:53 +05:30
|
|
|
const eventStore = useMemo(() => createEventStore(), []);
|
|
|
|
|
const productStore = useMemo(() => createProductStore(), []);
|
|
|
|
|
|
2025-06-10 15:28:23 +05:30
|
|
|
const materialStore = useMemo(() => createMaterialStore(), []);
|
|
|
|
|
const armBotStore = useMemo(() => createArmBotStore(), []);
|
|
|
|
|
const machineStore = useMemo(() => createMachineStore(), []);
|
|
|
|
|
const conveyorStore = useMemo(() => createConveyorStore(), []);
|
|
|
|
|
const vehicleStore = useMemo(() => createVehicleStore(), []);
|
|
|
|
|
const storageUnitStore = useMemo(() => createStorageUnitStore(), []);
|
2025-07-02 15:07:31 +05:30
|
|
|
const humanStore = useMemo(() => createHumanStore(), []);
|
2025-08-06 18:19:54 +05:30
|
|
|
const craneStore = useMemo(() => createCraneStore(), []);
|
2025-06-10 15:28:23 +05:30
|
|
|
|
2025-07-22 16:33:33 +05:30
|
|
|
const humanEventManagerRef = useRef<HumanEventManagerState>({ humanStates: [] });
|
|
|
|
|
|
2025-06-23 09:37:53 +05:30
|
|
|
const clearStores = useMemo(() => () => {
|
2025-06-24 11:04:56 +05:30
|
|
|
assetStore.getState().clearAssets();
|
2025-06-25 15:26:53 +05:30
|
|
|
wallAssetStore.getState().clearWallAssets();
|
|
|
|
|
wallStore.getState().clearWalls();
|
2025-06-24 11:04:56 +05:30
|
|
|
aisleStore.getState().clearAisles();
|
2025-06-25 15:26:53 +05:30
|
|
|
zoneStore.getState().clearZones();
|
|
|
|
|
floorStore.getState().clearFloors();
|
2025-07-29 17:20:34 +05:30
|
|
|
undoRedo2DStore.getState().clearUndoRedo2D();
|
2025-06-24 11:04:56 +05:30
|
|
|
eventStore.getState().clearEvents();
|
|
|
|
|
productStore.getState().clearProducts();
|
|
|
|
|
materialStore.getState().clearMaterials();
|
|
|
|
|
armBotStore.getState().clearArmBots();
|
|
|
|
|
machineStore.getState().clearMachines();
|
|
|
|
|
conveyorStore.getState().clearConveyors();
|
|
|
|
|
vehicleStore.getState().clearVehicles();
|
|
|
|
|
storageUnitStore.getState().clearStorageUnits();
|
2025-07-02 15:07:31 +05:30
|
|
|
humanStore.getState().clearHumans();
|
2025-08-06 18:19:54 +05:30
|
|
|
craneStore.getState().clearCranes();
|
2025-07-22 16:33:33 +05:30
|
|
|
humanEventManagerRef.current.humanStates = [];
|
2025-08-06 18:19:54 +05:30
|
|
|
}, [assetStore, wallAssetStore, wallStore, aisleStore, zoneStore, undoRedo2DStore, floorStore, eventStore, productStore, materialStore, armBotStore, machineStore, conveyorStore, vehicleStore, storageUnitStore, humanStore, craneStore]);
|
2025-06-23 09:37:53 +05:30
|
|
|
|
2025-06-10 15:28:23 +05:30
|
|
|
const contextValue = useMemo(() => (
|
|
|
|
|
{
|
2025-06-23 09:37:53 +05:30
|
|
|
assetStore,
|
2025-06-25 15:26:53 +05:30
|
|
|
wallAssetStore,
|
|
|
|
|
wallStore,
|
2025-06-23 09:37:53 +05:30
|
|
|
aisleStore,
|
2025-06-25 15:26:53 +05:30
|
|
|
zoneStore,
|
|
|
|
|
floorStore,
|
2025-07-29 17:20:34 +05:30
|
|
|
undoRedo2DStore,
|
2025-06-23 09:37:53 +05:30
|
|
|
eventStore,
|
|
|
|
|
productStore,
|
2025-06-10 15:28:23 +05:30
|
|
|
materialStore,
|
|
|
|
|
armBotStore,
|
|
|
|
|
machineStore,
|
|
|
|
|
conveyorStore,
|
|
|
|
|
vehicleStore,
|
|
|
|
|
storageUnitStore,
|
2025-07-02 15:07:31 +05:30
|
|
|
humanStore,
|
2025-08-06 18:19:54 +05:30
|
|
|
craneStore,
|
2025-07-22 16:33:33 +05:30
|
|
|
humanEventManagerRef,
|
2025-06-23 09:37:53 +05:30
|
|
|
clearStores,
|
2025-06-10 15:28:23 +05:30
|
|
|
layout
|
|
|
|
|
}
|
2025-08-06 18:19:54 +05:30
|
|
|
), [assetStore, wallAssetStore, wallStore, aisleStore, zoneStore, floorStore, undoRedo2DStore, eventStore, productStore, materialStore, armBotStore, machineStore, conveyorStore, vehicleStore, storageUnitStore, humanStore, craneStore, clearStores, layout]);
|
2025-06-10 15:28:23 +05:30
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<SceneContext.Provider value={contextValue}>
|
|
|
|
|
{children}
|
|
|
|
|
</SceneContext.Provider>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Base hook to get the context
|
|
|
|
|
export function useSceneContext() {
|
|
|
|
|
const context = useContext(SceneContext);
|
|
|
|
|
if (!context) {
|
|
|
|
|
throw new Error('useSceneContext must be used within a SceneProvider');
|
|
|
|
|
}
|
|
|
|
|
return context;
|
|
|
|
|
}
|