add simulations data

This commit is contained in:
2025-09-04 17:26:18 +05:30
parent 1cef2987a6
commit f6a63c20d7
11 changed files with 736 additions and 346 deletions

View 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 };
}),
}));
///////////////////////////