diff --git a/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentTable.test.tsx b/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentTable.test.tsx index 47110932..f378b018 100644 --- a/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentTable.test.tsx +++ b/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentTable.test.tsx @@ -19,7 +19,7 @@ vi.mock("../../queue/queueService", async (importOriginal) => { await importOriginal(); return { ...actual, - useSumbitQueueTask: vi.fn(), + useSumbitQueueTasks: vi.fn(), }; }); @@ -31,7 +31,7 @@ vi.mock("@atlas/app-shell", async (importOriginal) => { }; }); -const mockedUseSubmitTask = queueService.useSumbitQueueTask as unknown as Mock; +const mockedUseSubmitTask = queueService.useSumbitQueueTasks as unknown as Mock; const mockedUseQuery = apollo.useQuery as unknown as Mock; const mockedUseInstrumentSession = appShell.useInstrumentSession as unknown as Mock; @@ -204,18 +204,20 @@ describe("ExperimentList", () => { await waitFor(() => { expect(mutateAsync).toHaveBeenCalledTimes(1); expect(mutateAsync).toHaveBeenCalledWith({ - experiment: { - name: "Exp 1", - instrument_session: "", - experiment_definition: { - data: { beam_energy: 20, focused_beam_size: 5, time_per_pdf: 10 }, - name: "Def 1", - }, - sample: { - data: { composition: "H2O", density: 1.2 }, - name: "Sample A", + experiments: [ + { + name: "Exp 1", + instrument_session: "", + experiment_definition: { + data: { beam_energy: 20, focused_beam_size: 5, time_per_pdf: 10 }, + name: "Def 1", + }, + sample: { + data: { composition: "H2O", density: 1.2 }, + name: "Sample A", + }, }, - }, + ], }); }); }); @@ -238,34 +240,34 @@ describe("ExperimentList", () => { fireEvent.click(screen.getByRole("button", { name: /add all to queue/i })); await waitFor(() => { - expect(mutateAsync).toHaveBeenCalledTimes(2); + expect(mutateAsync).toHaveBeenCalledTimes(1); expect(mutateAsync).toHaveBeenNthCalledWith(1, { - experiment: { - name: "Exp 1", - instrument_session: "", - experiment_definition: { - data: { beam_energy: 20, focused_beam_size: 5, time_per_pdf: 10 }, - name: "Def 1", - }, - sample: { - data: { composition: "H2O", density: 1.2 }, - name: "Sample A", - }, - }, - }); - expect(mutateAsync).toHaveBeenNthCalledWith(2, { - experiment: { - name: "Exp 2", - instrument_session: "", - experiment_definition: { - data: { beam_energy: 20, focused_beam_size: 5, time_per_pdf: 10 }, - name: "Def 2", + experiments: [ + { + name: "Exp 1", + instrument_session: "", + experiment_definition: { + data: { beam_energy: 20, focused_beam_size: 5, time_per_pdf: 10 }, + name: "Def 1", + }, + sample: { + data: { composition: "H2O", density: 1.2 }, + name: "Sample A", + }, }, - sample: { - data: { composition: "CO2", density: 1.2 }, - name: "Sample B", + { + name: "Exp 2", + instrument_session: "", + experiment_definition: { + data: { beam_energy: 20, focused_beam_size: 5, time_per_pdf: 10 }, + name: "Def 2", + }, + sample: { + data: { composition: "CO2", density: 1.2 }, + name: "Sample B", + }, }, - }, + ], }); }); }); diff --git a/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentsTable.tsx b/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentsTable.tsx index 77be34a1..0667b97c 100644 --- a/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentsTable.tsx +++ b/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentsTable.tsx @@ -9,7 +9,7 @@ import { columns, type ExperimentTableData } from "./columns"; import { useLocation } from "react-router-dom"; import { useMemo } from "react"; import QueueIcon from "@mui/icons-material/Queue"; -import { useSumbitQueueTask } from "../../queue/queueService"; +import { useSumbitQueueTasks } from "../../queue/queueService"; import { getSessionPlaylistQuery } from "../../graphql/getSessionPlaylistQuery"; import { type ExperimentNode } from "../../graphql/getSessionPlaylistQueryTyped"; import type { @@ -56,24 +56,20 @@ const GET_EXPERIMENTS: TypedDocumentNode< export function ExperimentList() { const location = useLocation(); const { instrumentSession } = useInstrumentSession(); - const { mutateAsync: submitTaskAsync } = useSumbitQueueTask(); + const { mutateAsync: submitTasksAsync } = useSumbitQueueTasks(); async function submitQueueTasks(selected: ExperimentTableData[]) { - await Promise.all( - selected.map((exp) => - submitTaskAsync({ - experiment: { - name: exp.experiment.name, - experiment_definition: exp.experiment - .experimentDefinition as ExperimentDefinition, - sample: exp.experiment.sample as Sample, - instrument_session: - exp.experiment.sample.instrumentSessions?.[0]?.instrumentSessionReference?.toLowerCase() ?? - "", - }, - }), - ), - ); + await submitTasksAsync({ + experiments: selected.map((exp) => ({ + name: exp.experiment.name, + experiment_definition: exp.experiment + .experimentDefinition as ExperimentDefinition, + sample: exp.experiment.sample as Sample, + instrument_session: + exp.experiment.sample.instrumentSessions?.[0]?.instrumentSessionReference?.toLowerCase() ?? + "", + })), + }); } const visit = visitTextToVisit(instrumentSession); diff --git a/apps/i15-1/src/queue/queueService.ts b/apps/i15-1/src/queue/queueService.ts index 213c25c1..9837fe4c 100644 --- a/apps/i15-1/src/queue/queueService.ts +++ b/apps/i15-1/src/queue/queueService.ts @@ -270,16 +270,16 @@ export const clearHistory = async (): Promise => { return response.data; }; -export const submitQueueTask = async ({ - experiment, +export const submitQueueTasks = async ({ + experiments, taskPosition, }: { - experiment: Experiment | TaskRequest; + experiments: (Experiment | TaskRequest)[]; taskPosition?: number; }) => { const data: AddTasksToQueueQueuePostData = { url: `/queue`, - body: [experiment], + body: experiments, query: { position: taskPosition, }, @@ -288,10 +288,10 @@ export const submitQueueTask = async ({ return await addTasksToQueueQueuePost(data); }; -export function useSumbitQueueTask() { +export function useSumbitQueueTasks() { const client = useQueryClient(); return useMutation({ - mutationFn: submitQueueTask, + mutationFn: submitQueueTasks, onSuccess: async () => { await Promise.all([ client.invalidateQueries({ queryKey: ["queue"] }),