diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index eb3645af..7be83950 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -11,8 +11,10 @@ import { SvgIcon } from "@mui/material"; import SettingsIcon from "@mui/icons-material/Settings"; import { ParameterDisplayGroupsContext } from "./contexts/ParameterDisplayGroupsContext"; import { reducer, JobsContext } from "./contexts/JobsContext"; +import { reducer as jobRunsReducer, JobRunsContext } from "./contexts/JobRunsContext"; import { ParameterStoreProvider } from "./contexts/ParameterStoreContext"; import { useJobsSync } from "./hooks/useJobsSync"; +import { useJobRunsSync } from "./hooks/useJobRunsSync"; import { deviceInfoReducer, DeviceInfoContext } from "./contexts/DeviceInfoContext"; import { useDevicesSync } from "./hooks/useDevicesSync"; import { DeviceStateContext, deviceStateReducer } from "./contexts/DeviceStateContext"; @@ -74,6 +76,7 @@ export const BRANDING = { export default function App() { const [scheduledJobs, schedulerDispatch] = useReducer(reducer, {}); + const [jobRuns, jobRunsDispatch] = useReducer(jobRunsReducer, {}); const [deviceInfo, deviceInfoDispatch] = useReducer(deviceInfoReducer, {}); const [deviceStates, deviceStateDispatch] = useReducer(deviceStateReducer, null); const parameterStore = useParameterStore(); @@ -82,6 +85,7 @@ export default function App() { const experiments = useExperiments(); useJobsSync(schedulerDispatch); + useJobRunsSync(jobRunsDispatch); useDevicesSync(deviceStateDispatch, deviceInfoDispatch); return ( @@ -91,16 +95,18 @@ export default function App() { - - - - - + + + + + + + diff --git a/frontend/src/components/JobStatusIndicator.tsx b/frontend/src/components/JobStatusIndicator.tsx index 76e5c7ec..196a473e 100644 --- a/frontend/src/components/JobStatusIndicator.tsx +++ b/frontend/src/components/JobStatusIndicator.tsx @@ -7,6 +7,7 @@ const statusColorMap: Record = { [JobRunStatus.DONE]: "grey", [JobRunStatus.PROCESSING]: "green", [JobRunStatus.FAILED]: "red", + [JobRunStatus.PAUSED]: "orange", }; const capitalize = (s: string | undefined) => diff --git a/frontend/src/components/JobView.tsx b/frontend/src/components/JobView.tsx index 3b3eb7e1..dbcf6499 100644 --- a/frontend/src/components/JobView.tsx +++ b/frontend/src/components/JobView.tsx @@ -22,10 +22,12 @@ import { useJobInfo } from "../hooks/useJobInfo"; import { runMethod } from "../socket"; import { ExperimentMetadata } from "../types/ExperimentMetadata"; import { SerializedObject } from "../types/SerializedObject"; -import { JobStatus } from "../types/enums"; +import { JobRunStatus, JobStatus } from "../types/enums"; import { deserialize } from "../utils/deserializer"; import { updateJobParams } from "../utils/updateJobParams"; import { cancelJob } from "../utils/cancelJob"; +import { pauseJob } from "../utils/pauseJob"; +import { resumeJob } from "../utils/resumeJob"; import HistogramPlot from "./jobView/HistogramPlot"; import FitPanel from "./jobView/FitPanel"; @@ -226,11 +228,35 @@ export const JobView = ({ {jobInfo?.status !== JobStatus.PROCESSED && ( <>
+ +