2025-09-06 14:05:29 +05:30
|
|
|
import { useEffect } from "react";
|
|
|
|
|
import { useActionHandler } from "../actions/useActionHandler";
|
2025-09-05 15:54:38 +05:30
|
|
|
import { usePlayButtonStore, useResetButtonStore } from "../../../store/ui/usePlayButtonStore";
|
2025-09-06 14:05:29 +05:30
|
|
|
import { determineExecutionOrder } from "./functions/determineExecutionOrder";
|
|
|
|
|
import { useSceneContext } from "../../scene/sceneContext";
|
|
|
|
|
import SimulationHandler from "./SimulationHandler";
|
|
|
|
|
import { useParams } from "react-router-dom";
|
2025-09-08 11:40:27 +05:30
|
|
|
import {
|
|
|
|
|
getSimulationData,
|
|
|
|
|
saveSimulationData,
|
|
|
|
|
} from "../../../components/layout/scenes/functions/simulationStorage";
|
2025-09-06 14:05:29 +05:30
|
|
|
import { useSimulationManager } from "../../../store/rough/useSimulationManagerStore";
|
2025-09-06 18:19:02 +05:30
|
|
|
import { useSimulateId } from "../../../store/builder/store";
|
2025-06-10 15:28:23 +05:30
|
|
|
|
|
|
|
|
function Simulator() {
|
2025-09-06 18:19:02 +05:30
|
|
|
const { productStore, versionStore } = useSceneContext();
|
2025-09-05 15:54:38 +05:30
|
|
|
const { products, getProductById, selectedProduct } = productStore();
|
2025-06-10 15:28:23 +05:30
|
|
|
const { handleAction } = useActionHandler();
|
|
|
|
|
const { isPlaying } = usePlayButtonStore();
|
|
|
|
|
const { isReset } = useResetButtonStore();
|
2025-09-06 14:05:29 +05:30
|
|
|
const { projectId } = useParams();
|
2025-09-06 16:03:45 +05:30
|
|
|
const { selectedVersion } = versionStore();
|
2025-09-06 18:19:02 +05:30
|
|
|
const { setSimulateId } = useSimulateId();
|
|
|
|
|
const { addSimulationRecords } = useSimulationManager();
|
2025-06-10 15:28:23 +05:30
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (!isPlaying || isReset || !selectedProduct.productUuid) return;
|
|
|
|
|
|
|
|
|
|
const product = getProductById(selectedProduct.productUuid);
|
|
|
|
|
if (!product) return;
|
|
|
|
|
|
|
|
|
|
const executionOrder = determineExecutionOrder([product]);
|
2025-08-22 09:52:02 +05:30
|
|
|
|
2025-09-06 14:05:29 +05:30
|
|
|
executionOrder.forEach((action) => {
|
2025-06-10 15:28:23 +05:30
|
|
|
handleAction(action);
|
|
|
|
|
});
|
|
|
|
|
}, [products, isPlaying, isReset, selectedProduct]);
|
2025-09-08 11:40:27 +05:30
|
|
|
|
2025-09-06 14:05:29 +05:30
|
|
|
useEffect(() => {
|
|
|
|
|
if (!projectId || !selectedVersion || !selectedProduct?.productUuid) return;
|
|
|
|
|
const fetchSimulateData = async () => {
|
2025-09-08 11:40:27 +05:30
|
|
|
const getData = await getSimulationData(
|
|
|
|
|
projectId,
|
|
|
|
|
selectedVersion.versionId,
|
|
|
|
|
selectedProduct?.productUuid
|
|
|
|
|
);
|
2025-09-06 14:05:29 +05:30
|
|
|
const product = getProductById(selectedProduct.productUuid);
|
|
|
|
|
if (!product) return;
|
2025-09-08 11:40:27 +05:30
|
|
|
const products: ProductsSchema = [product];
|
2025-09-06 14:05:29 +05:30
|
|
|
const getSimulate = getData?.data;
|
2025-09-08 11:40:27 +05:30
|
|
|
// console.log("getSimulate: ", getSimulate);
|
2025-09-06 14:05:29 +05:30
|
|
|
if (getData && getSimulate && getSimulate.productTimestamp === products[0]?.timestamp) {
|
2025-09-06 18:19:02 +05:30
|
|
|
setSimulateId(getSimulate._id);
|
2025-09-08 11:40:27 +05:30
|
|
|
// console.log(" getSimulate.data: ", getSimulate.data);
|
2025-09-06 18:19:02 +05:30
|
|
|
addSimulationRecords(
|
|
|
|
|
projectId,
|
|
|
|
|
selectedVersion?.versionId || "",
|
|
|
|
|
selectedProduct?.productUuid || "",
|
|
|
|
|
getSimulate.data // ✅ this is already an array
|
|
|
|
|
);
|
|
|
|
|
echo.log("Simulation data is up to date");
|
2025-09-06 14:05:29 +05:30
|
|
|
return;
|
|
|
|
|
} else {
|
|
|
|
|
//call create API
|
|
|
|
|
const data = {
|
|
|
|
|
projectId: projectId,
|
|
|
|
|
versionId: selectedVersion.versionId,
|
|
|
|
|
productUuid: selectedProduct.productUuid,
|
2025-09-08 11:40:27 +05:30
|
|
|
simulateData: useSimulationManager
|
|
|
|
|
.getState()
|
|
|
|
|
.getProductById(
|
|
|
|
|
projectId,
|
|
|
|
|
selectedVersion?.versionId,
|
|
|
|
|
selectedProduct.productUuid
|
|
|
|
|
)?.simulateData,
|
2025-09-06 14:05:29 +05:30
|
|
|
};
|
|
|
|
|
const simulations = await saveSimulationData(data);
|
2025-09-08 11:40:27 +05:30
|
|
|
// console.log("simulations: ", simulations);
|
2025-09-06 14:05:29 +05:30
|
|
|
echo.log("Simulation data saved successfully");
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
fetchSimulateData();
|
|
|
|
|
}, []);
|
2025-09-08 11:40:27 +05:30
|
|
|
|
2025-06-10 15:28:23 +05:30
|
|
|
return (
|
|
|
|
|
<>
|
2025-09-04 17:26:18 +05:30
|
|
|
{/* <simulationHandler/> */}
|
|
|
|
|
<SimulationHandler />
|
2025-06-10 15:28:23 +05:30
|
|
|
</>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-06 14:05:29 +05:30
|
|
|
export default Simulator;
|