diff --git a/apps/i15-1/src/components/RunPlanButton.tsx b/apps/i15-1/src/components/RunPlanButton.tsx index 673a39d..74dd8d3 100644 --- a/apps/i15-1/src/components/RunPlanButton.tsx +++ b/apps/i15-1/src/components/RunPlanButton.tsx @@ -1,7 +1,11 @@ import { Button } from "@mui/material"; import { useState } from "react"; -import { useSetActiveTask, useSubmitTask } from "@atlas/blueapi-query"; +import { + useGetWorkerState, + useSetActiveTask, + useSubmitTask, +} from "@atlas/blueapi-query"; import type { TaskRequest } from "@atlas/blueapi"; type RunPlanButtonProps = { @@ -38,12 +42,19 @@ const RunPlanButton = ({ setLoading(false); }; + const isButtonDisabled = () => { + const workerState = useGetWorkerState(); + const disable = workerState.data !== "IDLE"; + return disable; + }; + return ( diff --git a/apps/i15-1/src/mocks/handlers.ts b/apps/i15-1/src/mocks/handlers.ts index a2a3aa7..e2aa2b2 100644 --- a/apps/i15-1/src/mocks/handlers.ts +++ b/apps/i15-1/src/mocks/handlers.ts @@ -1,9 +1,11 @@ import { http, HttpResponse, graphql } from "msw"; const fakeTaskId = "7304e8e0-81c6-4978-9a9d-9046ab79ce3c"; +let workerStatus = { status: "IDLE", duration: 0 }; export const handlers = [ http.put("/api/worker/task", () => { + workerStatus.status = "RUNNING"; return HttpResponse.json({ task_id: fakeTaskId, }); @@ -18,4 +20,12 @@ export const handlers = [ http.put("/api/worker/state", () => { return HttpResponse.json("IDLE"); }), + + http.get("/api/worker/state", () => { + if (workerStatus.duration >= 10) { + workerStatus.status = "IDLE"; + workerStatus.duration = 0; + } else workerStatus.duration++; + return HttpResponse.json(workerStatus.status); + }), ];