add simulations data
This commit is contained in:
136
app/src/store/rough/useSimulationManagerStore.ts
Normal file
136
app/src/store/rough/useSimulationManagerStore.ts
Normal file
@@ -0,0 +1,136 @@
|
||||
|
||||
import { create } from "zustand";
|
||||
|
||||
|
||||
interface SimulationUsageRecord {
|
||||
activeTime: number;
|
||||
isActive: boolean;
|
||||
idleTime: number;
|
||||
type:
|
||||
| "roboticArm"
|
||||
| "vehicle"
|
||||
| "transfer"
|
||||
| "storageUnit"
|
||||
| "crane"
|
||||
| "human"
|
||||
| "machine";
|
||||
}
|
||||
|
||||
// Product → holds multiple usage records
|
||||
interface ProductSimulation {
|
||||
productId: string;
|
||||
data: SimulationUsageRecord[];
|
||||
}
|
||||
|
||||
// Version → holds multiple products
|
||||
interface VersionSimulation {
|
||||
versionId: string;
|
||||
products: ProductSimulation[];
|
||||
}
|
||||
|
||||
// Project → holds multiple versions
|
||||
interface ProjectSimulation {
|
||||
projectId: string | undefined;
|
||||
versions: VersionSimulation[];
|
||||
}
|
||||
// or same file
|
||||
|
||||
interface SimulationManagerStore {
|
||||
simulationData: ProjectSimulation[];
|
||||
|
||||
addData: (
|
||||
projectId: string | undefined,
|
||||
versionId: string,
|
||||
productId: string,
|
||||
record: SimulationUsageRecord
|
||||
) => void;
|
||||
|
||||
resetProductData: (
|
||||
projectId: string,
|
||||
versionId: string,
|
||||
productId: string
|
||||
) => void;
|
||||
}
|
||||
|
||||
export const useSimulationManager = create<SimulationManagerStore>((set) => ({
|
||||
simulationData: [],
|
||||
|
||||
addData: (projectId, versionId, productId, record) =>
|
||||
set((state) => {
|
||||
const projects = state.simulationData.map((project) => {
|
||||
if (project.projectId !== projectId) return project;
|
||||
|
||||
return {
|
||||
...project,
|
||||
versions: project.versions.map((version) => {
|
||||
if (version.versionId !== versionId) return version;
|
||||
|
||||
return {
|
||||
...version,
|
||||
products: version.products.map((product) =>
|
||||
product.productId === productId
|
||||
? { ...product, data: [...product.data, record] }
|
||||
: product
|
||||
),
|
||||
};
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
||||
// If project doesn't exist, create it
|
||||
if (!state.simulationData.find((p) => p.projectId === projectId)) {
|
||||
projects.push({
|
||||
projectId,
|
||||
versions: [
|
||||
{
|
||||
versionId,
|
||||
products: [{ productId, data: [record] }],
|
||||
},
|
||||
],
|
||||
});
|
||||
} else {
|
||||
const project = projects.find((p) => p.projectId === projectId)!;
|
||||
if (!project.versions.find((v) => v.versionId === versionId)) {
|
||||
project.versions.push({
|
||||
versionId,
|
||||
products: [{ productId, data: [record] }],
|
||||
});
|
||||
} else {
|
||||
const version = project.versions.find(
|
||||
(v) => v.versionId === versionId
|
||||
)!;
|
||||
if (!version.products.find((p) => p.productId === productId)) {
|
||||
version.products.push({ productId, data: [record] });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return { simulationData: projects };
|
||||
}),
|
||||
|
||||
resetProductData: (projectId, versionId, productId) =>
|
||||
set((state) => {
|
||||
const projects = state.simulationData.map((project) => {
|
||||
if (project.projectId !== projectId) return project;
|
||||
|
||||
return {
|
||||
...project,
|
||||
versions: project.versions.map((version) => {
|
||||
if (version.versionId !== versionId) return version;
|
||||
|
||||
return {
|
||||
...version,
|
||||
products: version.products.map((product) =>
|
||||
product.productId === productId
|
||||
? { ...product, data: [] }
|
||||
: product
|
||||
),
|
||||
};
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
||||
return { simulationData: projects };
|
||||
}),
|
||||
}));
|
||||
///////////////////////////
|
||||
Reference in New Issue
Block a user