Skip to content

Commit 8b1d7af

Browse files
Seperate query status from result
1 parent 6dae2fd commit 8b1d7af

3 files changed

Lines changed: 26 additions & 70 deletions

File tree

frontend/src/components/LabResultSimulationRunsStatus.tsx

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
1+
import { SimulationStatus } from "@/hooks/useSimulationQueriesResult";
12
import { Accordion } from "@equinor/eds-core-react";
23
import { EdsDataGrid } from "@equinor/eds-data-grid-react";
34
import React from "react";
45

56
interface LabResultSimulationRunsStatusProps {
6-
modelIds?: string[];
7-
experimentNames?: string[];
8-
simulationStatuses?: string[];
7+
simulationStatuses: SimulationStatus[];
98
}
109

11-
const LabResultSimulationRunsStatus: React.FC<LabResultSimulationRunsStatusProps> = ({
12-
modelIds,
13-
experimentNames,
14-
simulationStatuses,
15-
}) => (
10+
const LabResultSimulationRunsStatus: React.FC<LabResultSimulationRunsStatusProps> = ({ simulationStatuses }) => (
1611
<div>
1712
<Accordion>
1813
<Accordion.Item>
1914
<Accordion.Header>Show calculation status</Accordion.Header>
2015
<Accordion.Panel>
2116
{(() => {
22-
const rows = createRows(modelIds, experimentNames, simulationStatuses);
17+
const rows = createRows(simulationStatuses);
2318

2419
return (
2520
<EdsDataGrid
@@ -38,18 +33,12 @@ const LabResultSimulationRunsStatus: React.FC<LabResultSimulationRunsStatusProps
3833
</div>
3934
);
4035

41-
const createRows = (modelIds?: string[], experimentNames?: string[], simulationStatuses?: string[]) => {
42-
if (!modelIds?.length && !experimentNames?.length && !simulationStatuses?.length) {
43-
return [];
44-
}
45-
46-
const maxLength = Math.max(modelIds?.length ?? 0, experimentNames?.length ?? 0, simulationStatuses?.length ?? 0);
47-
48-
return Array.from({ length: maxLength }, (_, index) => ({
36+
const createRows = (simulationStatuses: SimulationStatus[]) => {
37+
return Object.entries(simulationStatuses).map(([index, status]) => ({
4938
id: index,
50-
modelId: modelIds?.[index] ?? "",
51-
experimentName: experimentNames?.[index] ?? "",
52-
status: simulationStatuses?.[index] ?? "",
39+
modelId: status.modelId,
40+
experimentName: status.experimentName,
41+
status: status.status,
5342
}));
5443
};
5544

frontend/src/hooks/useSimulationQueriesResult.ts

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@ import { ExperimentResult } from "@/dto/ExperimentResult";
55
import { filterValidModels } from "@/functions/Filtering";
66
import { SimulationResults } from "@/dto/SimulationResults";
77
import { ModelConfig } from "@/dto/FormConfig";
8+
export interface SimulationStatus {
9+
modelId: string;
10+
experimentName: string;
11+
status: "pending" | "done";
12+
}
813

914
export type UseSimulationQueriesResult = {
1015
data: Record<string, SimulationResults[]>;
11-
isLoading: boolean;
16+
statuses: SimulationStatus[];
1217
};
1318

1419
export type QueryResult<T> = {
@@ -65,42 +70,28 @@ export const useSimulationQueries = (experiments: ExperimentResult[]): UseSimula
6570
})),
6671
combine: (queryResults) => {
6772
const data: Record<string, SimulationResults[]> = {};
68-
73+
const statuses: SimulationStatus[] = [];
6974
queryResults.forEach((result, simulationIndex) => {
7075
const simulation = simulationsToRun[simulationIndex];
7176
if (result.isLoading) {
72-
(data[simulation.experiment.name] ??= []).push({
77+
statuses.push({
78+
modelId: simulation.model.modelId,
79+
experimentName: simulation.experiment.name,
7380
status: "pending",
74-
finalConcentrations: {},
75-
modelInput: {
76-
modelId: simulation.model.modelId,
77-
parameters: simulation.model.parameters
78-
? Object.fromEntries(
79-
Object.entries(simulation.model.parameters).map(([key, value]) => [
80-
key,
81-
value.default,
82-
])
83-
)
84-
: {},
85-
concentrations: Object.fromEntries(
86-
Object.entries(simulation.experiment.initialConcentrations).filter(
87-
([, value]) => Number(value) !== 0
88-
)
89-
),
90-
},
91-
panels: [],
9281
});
9382
}
9483

9584
if (result.data) {
9685
(data[result.data.experiment.name] ??= []).push(result.data.result);
86+
statuses.push({
87+
modelId: simulation.model.modelId,
88+
experimentName: simulation.experiment.name,
89+
status: "done",
90+
});
9791
}
9892
});
9993

100-
const isLoading =
101-
queryResults.length !== simulationsToRun.length || queryResults.some((value) => value.isLoading);
102-
103-
return { data, isLoading };
94+
return { data, statuses };
10495
},
10596
});
10697
};

frontend/src/pages/LabResults.tsx

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,6 @@ const LabResults: React.FC = () => {
3030

3131
const simulationQueryResults = useSimulationQueries(selectedExperiments);
3232

33-
const simulationStatusData = useMemo(() => {
34-
const modelIds: string[] = [];
35-
const experimentNames: string[] = [];
36-
const statuses: string[] = [];
37-
38-
Object.entries(simulationQueryResults.data).forEach(([experimentName, simulations]) => {
39-
simulations.forEach((simulation) => {
40-
modelIds.push(simulation.modelInput.modelId);
41-
experimentNames.push(experimentName);
42-
statuses.push(simulation.status);
43-
});
44-
});
45-
46-
return {
47-
modelIds,
48-
experimentNames,
49-
statuses,
50-
};
51-
}, [simulationQueryResults.data]);
52-
5333
if (isLoading) return <>Fetching results ...</>;
5434

5535
let issueRetrievingDataInfo = null;
@@ -75,11 +55,7 @@ const LabResults: React.FC = () => {
7555
<Typography variant="h1">Lab results</Typography>
7656
{issueRetrievingDataInfo}
7757

78-
<LabResultSimulationRunsStatus
79-
modelIds={simulationStatusData.modelIds}
80-
experimentNames={simulationStatusData.experimentNames}
81-
simulationStatuses={simulationStatusData.statuses}
82-
/>
58+
<LabResultSimulationRunsStatus simulationStatuses={simulationQueryResults.statuses} />
8359

8460
<LabResultsPlot
8561
selectedExperiments={selectedExperiments}

0 commit comments

Comments
 (0)