diff --git a/apps/i15-1/generated/queue/index.ts b/apps/i15-1/generated/queue/index.ts index 7e8658bc..89689a4a 100644 --- a/apps/i15-1/generated/queue/index.ts +++ b/apps/i15-1/generated/queue/index.ts @@ -1,4 +1,4 @@ // This file is auto-generated by @hey-api/openapi-ts -export { addTasksToQueueQueuePost, cancelTasksQueueTasksDelete, clearHistoryHistoryDelete, getAllTasksTasksGet, getCallHistoryCallHistoryGet, getCallQueueCallQueueGet, getCompletedTasksHistoryGet, getConfigConfigGet, getQueuedTasksQueueGet, getQueueStateQueueStateGet, getTaskByIdTasksTaskIdGet, getTaskByPositionQueuePositionGet, healthzHealthzGet, moveTaskQueueMovePost, type Options, readRootGet, streamEventsEventsGet, updateQueueStateQueueStatePatch } from './sdk.gen'; -export type { AddTasksToQueueQueuePostData, AddTasksToQueueQueuePostError, AddTasksToQueueQueuePostErrors, AddTasksToQueueQueuePostResponse, AddTasksToQueueQueuePostResponses, AppConfig, AppConfigWritable, ApplicationConfig, ApplicationConfigWritable, BasicAuthentication, BlueapiCallResponse, CallStatus, CancelTasksQueueTasksDeleteData, CancelTasksQueueTasksDeleteError, CancelTasksQueueTasksDeleteErrors, CancelTasksQueueTasksDeleteResponse, CancelTasksQueueTasksDeleteResponses, ClearHistoryHistoryDeleteData, ClearHistoryHistoryDeleteResponses, ClientOptions, ConverterConfig, CorsConfig, DeviceManagerSource, DeviceSource, DodalSource, EnvironmentConfig, Experiment, ExperimentDefinition, GetAllTasksTasksGetData, GetAllTasksTasksGetError, GetAllTasksTasksGetErrors, GetAllTasksTasksGetResponse, GetAllTasksTasksGetResponses, GetCallHistoryCallHistoryGetData, GetCallHistoryCallHistoryGetResponse, GetCallHistoryCallHistoryGetResponses, GetCallQueueCallQueueGetData, GetCallQueueCallQueueGetResponse, GetCallQueueCallQueueGetResponses, GetCompletedTasksHistoryGetData, GetCompletedTasksHistoryGetError, GetCompletedTasksHistoryGetErrors, GetCompletedTasksHistoryGetResponse, GetCompletedTasksHistoryGetResponses, GetConfigConfigGetData, GetConfigConfigGetResponse, GetConfigConfigGetResponses, GetQueuedTasksQueueGetData, GetQueuedTasksQueueGetError, GetQueuedTasksQueueGetErrors, GetQueuedTasksQueueGetResponse, GetQueuedTasksQueueGetResponses, GetQueueStateQueueStateGetData, GetQueueStateQueueStateGetResponse, GetQueueStateQueueStateGetResponses, GetTaskByIdTasksTaskIdGetData, GetTaskByIdTasksTaskIdGetError, GetTaskByIdTasksTaskIdGetErrors, GetTaskByIdTasksTaskIdGetResponse, GetTaskByIdTasksTaskIdGetResponses, GetTaskByPositionQueuePositionGetData, GetTaskByPositionQueuePositionGetError, GetTaskByPositionQueuePositionGetErrors, GetTaskByPositionQueuePositionGetResponse, GetTaskByPositionQueuePositionGetResponses, GraylogConfig, HealthzHealthzGetData, HealthzHealthzGetResponses, HttpValidationError, LoggingConfig, MetadataConfig, MoveTaskQueueMovePostData, MoveTaskQueueMovePostError, MoveTaskQueueMovePostErrors, MoveTaskQueueMovePostResponse, MoveTaskQueueMovePostResponses, NumtrackerConfig, OidcConfig, PlanSource, QueueState, QueueStateUpdate, ReadRootGetData, ReadRootGetResponses, RestConfig, Sample, ScratchConfig, ScratchRepository, ServiceAccount, ServiceAccountWritable, Status, StompConfig, StreamEventsEventsGetData, StreamEventsEventsGetResponses, TaskCancelRequest, TaskError, TaskKind, TaskRequest, TaskResult, TaskWithPosition, TiledConfig, TiledConfigWritable, UpdateQueueStateQueueStatePatchData, UpdateQueueStateQueueStatePatchError, UpdateQueueStateQueueStatePatchErrors, UpdateQueueStateQueueStatePatchResponse, UpdateQueueStateQueueStatePatchResponses, ValidationError, WorkerEventConfig } from './types.gen'; +export { addTasksToQueueQueuePost, cancelAllTasksQueueDelete, cancelTasksQueueTasksDelete, clearHistoryHistoryDelete, getAllTasksTasksGet, getCallHistoryCallHistoryGet, getCallQueueCallQueueGet, getCompletedTasksHistoryGet, getConfigConfigGet, getQueuedTasksQueueGet, getQueueStateQueueStateGet, getTaskByIdTasksTaskIdGet, getTaskByPositionQueuePositionGet, healthzHealthzGet, moveTaskQueueMovePost, type Options, readRootGet, streamEventsEventsGet, updateQueueStateQueueStatePatch } from './sdk.gen'; +export type { AddTasksToQueueQueuePostData, AddTasksToQueueQueuePostError, AddTasksToQueueQueuePostErrors, AddTasksToQueueQueuePostResponse, AddTasksToQueueQueuePostResponses, AppConfig, AppConfigWritable, ApplicationConfig, ApplicationConfigWritable, BasicAuthentication, BlueapiCallResponse, CallStatus, CancelAllTasksQueueDeleteData, CancelAllTasksQueueDeleteResponse, CancelAllTasksQueueDeleteResponses, CancelTasksQueueTasksDeleteData, CancelTasksQueueTasksDeleteError, CancelTasksQueueTasksDeleteErrors, CancelTasksQueueTasksDeleteResponse, CancelTasksQueueTasksDeleteResponses, ClearHistoryHistoryDeleteData, ClearHistoryHistoryDeleteResponses, ClientOptions, Container, ContainerPosition, ConverterConfig, CorsConfig, DeviceManagerSource, EnvironmentConfig, Experiment, ExperimentDefinition, GetAllTasksTasksGetData, GetAllTasksTasksGetError, GetAllTasksTasksGetErrors, GetAllTasksTasksGetResponse, GetAllTasksTasksGetResponses, GetCallHistoryCallHistoryGetData, GetCallHistoryCallHistoryGetResponse, GetCallHistoryCallHistoryGetResponses, GetCallQueueCallQueueGetData, GetCallQueueCallQueueGetResponse, GetCallQueueCallQueueGetResponses, GetCompletedTasksHistoryGetData, GetCompletedTasksHistoryGetError, GetCompletedTasksHistoryGetErrors, GetCompletedTasksHistoryGetResponse, GetCompletedTasksHistoryGetResponses, GetConfigConfigGetData, GetConfigConfigGetResponse, GetConfigConfigGetResponses, GetQueuedTasksQueueGetData, GetQueuedTasksQueueGetError, GetQueuedTasksQueueGetErrors, GetQueuedTasksQueueGetResponse, GetQueuedTasksQueueGetResponses, GetQueueStateQueueStateGetData, GetQueueStateQueueStateGetResponse, GetQueueStateQueueStateGetResponses, GetTaskByIdTasksTaskIdGetData, GetTaskByIdTasksTaskIdGetError, GetTaskByIdTasksTaskIdGetErrors, GetTaskByIdTasksTaskIdGetResponse, GetTaskByIdTasksTaskIdGetResponses, GetTaskByPositionQueuePositionGetData, GetTaskByPositionQueuePositionGetError, GetTaskByPositionQueuePositionGetErrors, GetTaskByPositionQueuePositionGetResponse, GetTaskByPositionQueuePositionGetResponses, GraylogConfig, HealthzHealthzGetData, HealthzHealthzGetResponses, HttpValidationError, LoggingConfig, MetadataConfig, MoveTaskQueueMovePostData, MoveTaskQueueMovePostError, MoveTaskQueueMovePostErrors, MoveTaskQueueMovePostResponse, MoveTaskQueueMovePostResponses, NumtrackerConfig, OidcConfig, OpaConfig, PauseReason, PlanSource, QueueState, QueueStateUpdate, ReadRootGetData, ReadRootGetResponses, RestConfig, Sample, ScratchConfig, ScratchRepository, ServiceAccount, ServiceAccountWritable, Status, StompConfig, StreamEventsEventsGetData, StreamEventsEventsGetResponses, TaskCancelRequest, TaskError, TaskKind, TaskRequest, TaskResult, TaskWithPosition, TiledConfig, TiledConfigWritable, UpdateQueueStateQueueStatePatchData, UpdateQueueStateQueueStatePatchError, UpdateQueueStateQueueStatePatchErrors, UpdateQueueStateQueueStatePatchResponse, UpdateQueueStateQueueStatePatchResponses, ValidationError, WorkerEventConfig } from './types.gen'; diff --git a/apps/i15-1/generated/queue/sdk.gen.ts b/apps/i15-1/generated/queue/sdk.gen.ts index 09c57c05..1ff5197a 100644 --- a/apps/i15-1/generated/queue/sdk.gen.ts +++ b/apps/i15-1/generated/queue/sdk.gen.ts @@ -2,20 +2,20 @@ import type { Client, ClientMeta, Options as Options2, RequestResult, TDataShape } from './client'; import { client } from './client.gen'; -import type { AddTasksToQueueQueuePostData, AddTasksToQueueQueuePostErrors, AddTasksToQueueQueuePostResponses, CancelTasksQueueTasksDeleteData, CancelTasksQueueTasksDeleteErrors, CancelTasksQueueTasksDeleteResponses, ClearHistoryHistoryDeleteData, ClearHistoryHistoryDeleteResponses, GetAllTasksTasksGetData, GetAllTasksTasksGetErrors, GetAllTasksTasksGetResponses, GetCallHistoryCallHistoryGetData, GetCallHistoryCallHistoryGetResponses, GetCallQueueCallQueueGetData, GetCallQueueCallQueueGetResponses, GetCompletedTasksHistoryGetData, GetCompletedTasksHistoryGetErrors, GetCompletedTasksHistoryGetResponses, GetConfigConfigGetData, GetConfigConfigGetResponses, GetQueuedTasksQueueGetData, GetQueuedTasksQueueGetErrors, GetQueuedTasksQueueGetResponses, GetQueueStateQueueStateGetData, GetQueueStateQueueStateGetResponses, GetTaskByIdTasksTaskIdGetData, GetTaskByIdTasksTaskIdGetErrors, GetTaskByIdTasksTaskIdGetResponses, GetTaskByPositionQueuePositionGetData, GetTaskByPositionQueuePositionGetErrors, GetTaskByPositionQueuePositionGetResponses, HealthzHealthzGetData, HealthzHealthzGetResponses, MoveTaskQueueMovePostData, MoveTaskQueueMovePostErrors, MoveTaskQueueMovePostResponses, ReadRootGetData, ReadRootGetResponses, StreamEventsEventsGetData, StreamEventsEventsGetResponses, UpdateQueueStateQueueStatePatchData, UpdateQueueStateQueueStatePatchErrors, UpdateQueueStateQueueStatePatchResponses } from './types.gen'; +import type { AddTasksToQueueQueuePostData, AddTasksToQueueQueuePostErrors, AddTasksToQueueQueuePostResponses, CancelAllTasksQueueDeleteData, CancelAllTasksQueueDeleteResponses, CancelTasksQueueTasksDeleteData, CancelTasksQueueTasksDeleteErrors, CancelTasksQueueTasksDeleteResponses, ClearHistoryHistoryDeleteData, ClearHistoryHistoryDeleteResponses, GetAllTasksTasksGetData, GetAllTasksTasksGetErrors, GetAllTasksTasksGetResponses, GetCallHistoryCallHistoryGetData, GetCallHistoryCallHistoryGetResponses, GetCallQueueCallQueueGetData, GetCallQueueCallQueueGetResponses, GetCompletedTasksHistoryGetData, GetCompletedTasksHistoryGetErrors, GetCompletedTasksHistoryGetResponses, GetConfigConfigGetData, GetConfigConfigGetResponses, GetQueuedTasksQueueGetData, GetQueuedTasksQueueGetErrors, GetQueuedTasksQueueGetResponses, GetQueueStateQueueStateGetData, GetQueueStateQueueStateGetResponses, GetTaskByIdTasksTaskIdGetData, GetTaskByIdTasksTaskIdGetErrors, GetTaskByIdTasksTaskIdGetResponses, GetTaskByPositionQueuePositionGetData, GetTaskByPositionQueuePositionGetErrors, GetTaskByPositionQueuePositionGetResponses, HealthzHealthzGetData, HealthzHealthzGetResponses, MoveTaskQueueMovePostData, MoveTaskQueueMovePostErrors, MoveTaskQueueMovePostResponses, ReadRootGetData, ReadRootGetResponses, StreamEventsEventsGetData, StreamEventsEventsGetResponses, UpdateQueueStateQueueStatePatchData, UpdateQueueStateQueueStatePatchErrors, UpdateQueueStateQueueStatePatchResponses } from './types.gen'; export type Options = Options2 & { - /** - * You can provide a client instance returned by `createClient()` instead of - * individual options. This might be also useful if you want to implement a - * custom client. - */ - client?: Client; - /** - * You can pass arbitrary values through the `meta` object. This can be - * used to access values that aren't defined as part of the SDK function. - */ - meta?: keyof ClientMeta extends never ? Record : ClientMeta; + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: keyof ClientMeta extends never ? Record : ClientMeta; }; /** @@ -42,14 +42,19 @@ export const getQueueStateQueueStateGet = * Update Queue State */ export const updateQueueStateQueueStatePatch = (options: Options): RequestResult => (options.client ?? client).patch({ - url: '/queue/state', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers - } + url: '/queue/state', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } }); +/** + * Cancel All Tasks + */ +export const cancelAllTasksQueueDelete = (options?: Options): RequestResult => (options?.client ?? client).delete({ url: '/queue', ...options }); + /** * Get Queued Tasks */ @@ -59,12 +64,12 @@ export const getQueuedTasksQueueGet = (opt * Add Tasks To Queue */ export const addTasksToQueueQueuePost = (options: Options): RequestResult => (options.client ?? client).post({ - url: '/queue', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers - } + url: '/queue', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } }); /** @@ -76,12 +81,12 @@ export const moveTaskQueueMovePost = (opti * Cancel Tasks */ export const cancelTasksQueueTasksDelete = (options: Options): RequestResult => (options.client ?? client).delete({ - url: '/queue/tasks', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers - } + url: '/queue/tasks', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } }); /** diff --git a/apps/i15-1/generated/queue/types.gen.ts b/apps/i15-1/generated/queue/types.gen.ts index aba29e61..823f4e3b 100644 --- a/apps/i15-1/generated/queue/types.gen.ts +++ b/apps/i15-1/generated/queue/types.gen.ts @@ -1,7 +1,7 @@ // This file is auto-generated by @hey-api/openapi-ts export type ClientOptions = { - baseUrl: "https://raw.githubusercontent.com" | (string & {}); + baseUrl: 'https://raw.githubusercontent.com' | (string & {}); }; /** @@ -31,6 +31,7 @@ export type ApplicationConfig = { */ auth_token_path?: string | null; numtracker?: NumtrackerConfig | null; + opa?: OpaConfig | null; }; /** @@ -107,13 +108,28 @@ export type CorsConfig = { /** * CallStatus */ -export type CallStatus = - | "Waiting" - | "Claimed" - | "In progress" - | "Success" - | "Error" - | "Skipped"; +export type CallStatus = 'Waiting' | 'Claimed' | 'In progress' | 'Success' | 'Error' | 'Skipped'; + +/** + * Container + */ +export type Container = { + /** + * Id + */ + id: string; + positionInParent: ContainerPosition; +}; + +/** + * ContainerPosition + */ +export type ContainerPosition = { + /** + * Position + */ + position: number; +}; /** * ConverterConfig @@ -142,7 +158,7 @@ export type DeviceManagerSource = { /** * Kind */ - kind?: "deviceManager"; + kind?: 'deviceManager'; /** * Mock * @@ -157,44 +173,6 @@ export type DeviceManagerSource = { name?: string; }; -/** - * DeviceSource - */ -export type DeviceSource = { - /** - * Module - * - * Module to be imported - */ - module: string; - /** - * Kind - */ - kind?: "deviceFunctions"; -}; - -/** - * DodalSource - */ -export type DodalSource = { - /** - * Module - * - * Module to be imported - */ - module: string; - /** - * Kind - */ - kind?: "dodal"; - /** - * Mock - * - * If true, ophyd_async device connections are mocked - */ - mock?: boolean; -}; - /** * EnvironmentConfig * @@ -204,9 +182,7 @@ export type EnvironmentConfig = { /** * Sources */ - sources?: Array< - PlanSource | DeviceSource | DodalSource | DeviceManagerSource - >; + sources?: Array; events?: WorkerEventConfig; metadata?: MetadataConfig | null; }; @@ -278,7 +254,7 @@ export type LoggingConfig = { /** * Level */ - level?: "NOTSET" | "DEBUG" | "INFO" | "WARNING" | "ERROR" | "CRITICAL"; + level?: 'NOTSET' | 'DEBUG' | 'INFO' | 'WARNING' | 'ERROR' | 'CRITICAL'; graylog?: GraylogConfig; }; @@ -314,8 +290,16 @@ export type OidcConfig = { * Well Known Url * * URL to fetch OIDC config from the provider + * + * @deprecated */ - well_known_url: string; + well_known_url?: string | null; + /** + * Issuer + * + * URL of OIDC provider + */ + issuer?: string | null; /** * Client Id * @@ -336,6 +320,37 @@ export type OidcConfig = { logout_redirect_endpoint?: string; }; +/** + * OpaConfig + */ +export type OpaConfig = { + /** + * Root + */ + root?: string; + /** + * Audience + */ + audience?: string; + /** + * Tiled Service Account Check + */ + tiled_service_account_check: string; + /** + * Submit Task Check + */ + submit_task_check: string; + /** + * Admin Check + */ + admin_check: string; +}; + +/** + * PauseReason + */ +export type PauseReason = 'Pause requested by user' | 'Paused as queue completed' | 'Paused as last task errored'; + /** * PlanSource */ @@ -349,7 +364,7 @@ export type PlanSource = { /** * Kind */ - kind?: "planFunctions"; + kind?: 'planFunctions'; }; /** @@ -360,6 +375,7 @@ export type QueueState = { * Paused */ paused: boolean; + last_pause_reason: PauseReason; }; /** @@ -369,7 +385,7 @@ export type QueueStateUpdate = { /** * Paused */ - paused?: boolean | null; + paused: boolean; }; /** @@ -401,6 +417,8 @@ export type Sample = { data: { [key: string]: unknown; }; + container: Container; + positionInContainer: ContainerPosition; }; /** @@ -470,12 +488,7 @@ export type ServiceAccount = { /** * Status */ -export type Status = - | "Queued" - | "In progress" - | "Complete" - | "Error" - | "Cancelled"; +export type Status = 'Queued' | 'In progress' | 'Complete' | 'Error' | 'Cancelled'; /** * StompConfig @@ -518,7 +531,7 @@ export type TaskError = { /** * Outcome */ - outcome?: "error"; + outcome?: 'error'; /** * Type */ @@ -532,7 +545,7 @@ export type TaskError = { /** * TaskKind */ -export type TaskKind = "Experiment" | "Plan"; +export type TaskKind = 'Experiment' | 'Plan'; /** * TaskRequest @@ -575,7 +588,7 @@ export type TaskResult = { /** * Outcome */ - outcome?: "success"; + outcome?: 'success'; /** * Result */ @@ -699,6 +712,7 @@ export type ApplicationConfigWritable = { */ auth_token_path?: string | null; numtracker?: NumtrackerConfig | null; + opa?: OpaConfig | null; }; /** @@ -745,7 +759,7 @@ export type HealthzHealthzGetData = { body?: never; path?: never; query?: never; - url: "/healthz"; + url: '/healthz'; }; export type HealthzHealthzGetResponses = { @@ -759,7 +773,7 @@ export type ReadRootGetData = { body?: never; path?: never; query?: never; - url: "/"; + url: '/'; }; export type ReadRootGetResponses = { @@ -773,7 +787,7 @@ export type GetConfigConfigGetData = { body?: never; path?: never; query?: never; - url: "/config"; + url: '/config'; }; export type GetConfigConfigGetResponses = { @@ -783,14 +797,13 @@ export type GetConfigConfigGetResponses = { 200: AppConfig; }; -export type GetConfigConfigGetResponse = - GetConfigConfigGetResponses[keyof GetConfigConfigGetResponses]; +export type GetConfigConfigGetResponse = GetConfigConfigGetResponses[keyof GetConfigConfigGetResponses]; export type GetQueueStateQueueStateGetData = { body?: never; path?: never; query?: never; - url: "/queue/state"; + url: '/queue/state'; }; export type GetQueueStateQueueStateGetResponses = { @@ -800,14 +813,13 @@ export type GetQueueStateQueueStateGetResponses = { 200: QueueState; }; -export type GetQueueStateQueueStateGetResponse = - GetQueueStateQueueStateGetResponses[keyof GetQueueStateQueueStateGetResponses]; +export type GetQueueStateQueueStateGetResponse = GetQueueStateQueueStateGetResponses[keyof GetQueueStateQueueStateGetResponses]; export type UpdateQueueStateQueueStatePatchData = { body: QueueStateUpdate; path?: never; query?: never; - url: "/queue/state"; + url: '/queue/state'; }; export type UpdateQueueStateQueueStatePatchErrors = { @@ -817,8 +829,7 @@ export type UpdateQueueStateQueueStatePatchErrors = { 422: HttpValidationError; }; -export type UpdateQueueStateQueueStatePatchError = - UpdateQueueStateQueueStatePatchErrors[keyof UpdateQueueStateQueueStatePatchErrors]; +export type UpdateQueueStateQueueStatePatchError = UpdateQueueStateQueueStatePatchErrors[keyof UpdateQueueStateQueueStatePatchErrors]; export type UpdateQueueStateQueueStatePatchResponses = { /** @@ -827,8 +838,25 @@ export type UpdateQueueStateQueueStatePatchResponses = { 200: QueueState; }; -export type UpdateQueueStateQueueStatePatchResponse = - UpdateQueueStateQueueStatePatchResponses[keyof UpdateQueueStateQueueStatePatchResponses]; +export type UpdateQueueStateQueueStatePatchResponse = UpdateQueueStateQueueStatePatchResponses[keyof UpdateQueueStateQueueStatePatchResponses]; + +export type CancelAllTasksQueueDeleteData = { + body?: never; + path?: never; + query?: never; + url: '/queue'; +}; + +export type CancelAllTasksQueueDeleteResponses = { + /** + * Response Cancel All Tasks Queue Delete + * + * Successful Response + */ + 200: Array; +}; + +export type CancelAllTasksQueueDeleteResponse = CancelAllTasksQueueDeleteResponses[keyof CancelAllTasksQueueDeleteResponses]; export type GetQueuedTasksQueueGetData = { body?: never; @@ -839,7 +867,7 @@ export type GetQueuedTasksQueueGetData = { */ status?: Status | null; }; - url: "/queue"; + url: '/queue'; }; export type GetQueuedTasksQueueGetErrors = { @@ -849,8 +877,7 @@ export type GetQueuedTasksQueueGetErrors = { 422: HttpValidationError; }; -export type GetQueuedTasksQueueGetError = - GetQueuedTasksQueueGetErrors[keyof GetQueuedTasksQueueGetErrors]; +export type GetQueuedTasksQueueGetError = GetQueuedTasksQueueGetErrors[keyof GetQueuedTasksQueueGetErrors]; export type GetQueuedTasksQueueGetResponses = { /** @@ -861,8 +888,7 @@ export type GetQueuedTasksQueueGetResponses = { 200: Array; }; -export type GetQueuedTasksQueueGetResponse = - GetQueuedTasksQueueGetResponses[keyof GetQueuedTasksQueueGetResponses]; +export type GetQueuedTasksQueueGetResponse = GetQueuedTasksQueueGetResponses[keyof GetQueuedTasksQueueGetResponses]; export type AddTasksToQueueQueuePostData = { /** @@ -876,7 +902,7 @@ export type AddTasksToQueueQueuePostData = { */ position?: number | null; }; - url: "/queue"; + url: '/queue'; }; export type AddTasksToQueueQueuePostErrors = { @@ -886,8 +912,7 @@ export type AddTasksToQueueQueuePostErrors = { 422: HttpValidationError; }; -export type AddTasksToQueueQueuePostError = - AddTasksToQueueQueuePostErrors[keyof AddTasksToQueueQueuePostErrors]; +export type AddTasksToQueueQueuePostError = AddTasksToQueueQueuePostErrors[keyof AddTasksToQueueQueuePostErrors]; export type AddTasksToQueueQueuePostResponses = { /** @@ -898,8 +923,7 @@ export type AddTasksToQueueQueuePostResponses = { 200: Array; }; -export type AddTasksToQueueQueuePostResponse = - AddTasksToQueueQueuePostResponses[keyof AddTasksToQueueQueuePostResponses]; +export type AddTasksToQueueQueuePostResponse = AddTasksToQueueQueuePostResponses[keyof AddTasksToQueueQueuePostResponses]; export type MoveTaskQueueMovePostData = { body?: never; @@ -914,7 +938,7 @@ export type MoveTaskQueueMovePostData = { */ new_position: number; }; - url: "/queue/move"; + url: '/queue/move'; }; export type MoveTaskQueueMovePostErrors = { @@ -924,8 +948,7 @@ export type MoveTaskQueueMovePostErrors = { 422: HttpValidationError; }; -export type MoveTaskQueueMovePostError = - MoveTaskQueueMovePostErrors[keyof MoveTaskQueueMovePostErrors]; +export type MoveTaskQueueMovePostError = MoveTaskQueueMovePostErrors[keyof MoveTaskQueueMovePostErrors]; export type MoveTaskQueueMovePostResponses = { /** @@ -936,14 +959,13 @@ export type MoveTaskQueueMovePostResponses = { 200: number; }; -export type MoveTaskQueueMovePostResponse = - MoveTaskQueueMovePostResponses[keyof MoveTaskQueueMovePostResponses]; +export type MoveTaskQueueMovePostResponse = MoveTaskQueueMovePostResponses[keyof MoveTaskQueueMovePostResponses]; export type CancelTasksQueueTasksDeleteData = { body: TaskCancelRequest; path?: never; query?: never; - url: "/queue/tasks"; + url: '/queue/tasks'; }; export type CancelTasksQueueTasksDeleteErrors = { @@ -953,8 +975,7 @@ export type CancelTasksQueueTasksDeleteErrors = { 422: HttpValidationError; }; -export type CancelTasksQueueTasksDeleteError = - CancelTasksQueueTasksDeleteErrors[keyof CancelTasksQueueTasksDeleteErrors]; +export type CancelTasksQueueTasksDeleteError = CancelTasksQueueTasksDeleteErrors[keyof CancelTasksQueueTasksDeleteErrors]; export type CancelTasksQueueTasksDeleteResponses = { /** @@ -965,8 +986,7 @@ export type CancelTasksQueueTasksDeleteResponses = { 200: Array; }; -export type CancelTasksQueueTasksDeleteResponse = - CancelTasksQueueTasksDeleteResponses[keyof CancelTasksQueueTasksDeleteResponses]; +export type CancelTasksQueueTasksDeleteResponse = CancelTasksQueueTasksDeleteResponses[keyof CancelTasksQueueTasksDeleteResponses]; export type GetTaskByPositionQueuePositionGetData = { body?: never; @@ -977,7 +997,7 @@ export type GetTaskByPositionQueuePositionGetData = { position: number; }; query?: never; - url: "/queue/{position}"; + url: '/queue/{position}'; }; export type GetTaskByPositionQueuePositionGetErrors = { @@ -987,8 +1007,7 @@ export type GetTaskByPositionQueuePositionGetErrors = { 422: HttpValidationError; }; -export type GetTaskByPositionQueuePositionGetError = - GetTaskByPositionQueuePositionGetErrors[keyof GetTaskByPositionQueuePositionGetErrors]; +export type GetTaskByPositionQueuePositionGetError = GetTaskByPositionQueuePositionGetErrors[keyof GetTaskByPositionQueuePositionGetErrors]; export type GetTaskByPositionQueuePositionGetResponses = { /** @@ -999,8 +1018,7 @@ export type GetTaskByPositionQueuePositionGetResponses = { 200: TaskWithPosition | null; }; -export type GetTaskByPositionQueuePositionGetResponse = - GetTaskByPositionQueuePositionGetResponses[keyof GetTaskByPositionQueuePositionGetResponses]; +export type GetTaskByPositionQueuePositionGetResponse = GetTaskByPositionQueuePositionGetResponses[keyof GetTaskByPositionQueuePositionGetResponses]; export type GetAllTasksTasksGetData = { body?: never; @@ -1011,7 +1029,7 @@ export type GetAllTasksTasksGetData = { */ status?: Status | null; }; - url: "/tasks"; + url: '/tasks'; }; export type GetAllTasksTasksGetErrors = { @@ -1021,8 +1039,7 @@ export type GetAllTasksTasksGetErrors = { 422: HttpValidationError; }; -export type GetAllTasksTasksGetError = - GetAllTasksTasksGetErrors[keyof GetAllTasksTasksGetErrors]; +export type GetAllTasksTasksGetError = GetAllTasksTasksGetErrors[keyof GetAllTasksTasksGetErrors]; export type GetAllTasksTasksGetResponses = { /** @@ -1033,8 +1050,7 @@ export type GetAllTasksTasksGetResponses = { 200: Array; }; -export type GetAllTasksTasksGetResponse = - GetAllTasksTasksGetResponses[keyof GetAllTasksTasksGetResponses]; +export type GetAllTasksTasksGetResponse = GetAllTasksTasksGetResponses[keyof GetAllTasksTasksGetResponses]; export type GetTaskByIdTasksTaskIdGetData = { body?: never; @@ -1045,7 +1061,7 @@ export type GetTaskByIdTasksTaskIdGetData = { task_id: string; }; query?: never; - url: "/tasks/{task_id}"; + url: '/tasks/{task_id}'; }; export type GetTaskByIdTasksTaskIdGetErrors = { @@ -1055,8 +1071,7 @@ export type GetTaskByIdTasksTaskIdGetErrors = { 422: HttpValidationError; }; -export type GetTaskByIdTasksTaskIdGetError = - GetTaskByIdTasksTaskIdGetErrors[keyof GetTaskByIdTasksTaskIdGetErrors]; +export type GetTaskByIdTasksTaskIdGetError = GetTaskByIdTasksTaskIdGetErrors[keyof GetTaskByIdTasksTaskIdGetErrors]; export type GetTaskByIdTasksTaskIdGetResponses = { /** @@ -1065,14 +1080,13 @@ export type GetTaskByIdTasksTaskIdGetResponses = { 200: TaskWithPosition; }; -export type GetTaskByIdTasksTaskIdGetResponse = - GetTaskByIdTasksTaskIdGetResponses[keyof GetTaskByIdTasksTaskIdGetResponses]; +export type GetTaskByIdTasksTaskIdGetResponse = GetTaskByIdTasksTaskIdGetResponses[keyof GetTaskByIdTasksTaskIdGetResponses]; export type ClearHistoryHistoryDeleteData = { body?: never; path?: never; query?: never; - url: "/history"; + url: '/history'; }; export type ClearHistoryHistoryDeleteResponses = { @@ -1091,7 +1105,7 @@ export type GetCompletedTasksHistoryGetData = { */ status?: Status | null; }; - url: "/history"; + url: '/history'; }; export type GetCompletedTasksHistoryGetErrors = { @@ -1101,8 +1115,7 @@ export type GetCompletedTasksHistoryGetErrors = { 422: HttpValidationError; }; -export type GetCompletedTasksHistoryGetError = - GetCompletedTasksHistoryGetErrors[keyof GetCompletedTasksHistoryGetErrors]; +export type GetCompletedTasksHistoryGetError = GetCompletedTasksHistoryGetErrors[keyof GetCompletedTasksHistoryGetErrors]; export type GetCompletedTasksHistoryGetResponses = { /** @@ -1113,14 +1126,13 @@ export type GetCompletedTasksHistoryGetResponses = { 200: Array; }; -export type GetCompletedTasksHistoryGetResponse = - GetCompletedTasksHistoryGetResponses[keyof GetCompletedTasksHistoryGetResponses]; +export type GetCompletedTasksHistoryGetResponse = GetCompletedTasksHistoryGetResponses[keyof GetCompletedTasksHistoryGetResponses]; export type GetCallQueueCallQueueGetData = { body?: never; path?: never; query?: never; - url: "/call_queue"; + url: '/call_queue'; }; export type GetCallQueueCallQueueGetResponses = { @@ -1132,14 +1144,13 @@ export type GetCallQueueCallQueueGetResponses = { 200: Array; }; -export type GetCallQueueCallQueueGetResponse = - GetCallQueueCallQueueGetResponses[keyof GetCallQueueCallQueueGetResponses]; +export type GetCallQueueCallQueueGetResponse = GetCallQueueCallQueueGetResponses[keyof GetCallQueueCallQueueGetResponses]; export type GetCallHistoryCallHistoryGetData = { body?: never; path?: never; query?: never; - url: "/call_history"; + url: '/call_history'; }; export type GetCallHistoryCallHistoryGetResponses = { @@ -1151,14 +1162,13 @@ export type GetCallHistoryCallHistoryGetResponses = { 200: Array; }; -export type GetCallHistoryCallHistoryGetResponse = - GetCallHistoryCallHistoryGetResponses[keyof GetCallHistoryCallHistoryGetResponses]; +export type GetCallHistoryCallHistoryGetResponse = GetCallHistoryCallHistoryGetResponses[keyof GetCallHistoryCallHistoryGetResponses]; export type StreamEventsEventsGetData = { body?: never; path?: never; query?: never; - url: "/events"; + url: '/events'; }; export type StreamEventsEventsGetResponses = { diff --git a/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentTable.test.tsx b/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentTable.test.tsx index 47110932..ff9ca5f8 100644 --- a/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentTable.test.tsx +++ b/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentTable.test.tsx @@ -4,6 +4,7 @@ import { ExperimentList } from "./ULIMSExperimentsTable"; import * as apollo from "@apollo/client/react"; import { MemoryRouter } from "react-router-dom"; import * as queueService from "../../queue/queueService"; +import { ThemeProvider, createTheme } from "@mui/material/styles"; import * as appShell from "@atlas/app-shell"; vi.mock("@apollo/client/react", async (importOriginal) => { @@ -59,6 +60,9 @@ const mockExperiments = { name: "Exp 1", sample: { name: "Sample A", + container: { + parent: null, + }, data: { density: 1.2, composition: "H2O", @@ -79,6 +83,12 @@ const mockExperiments = { name: "Exp 2", sample: { name: "Sample B", + container: { + parent: { + id: "container-parent-id", + name: "i15-1 robot table", + }, + }, data: { density: 1.2, composition: "CO2", @@ -98,11 +108,15 @@ const mockExperiments = { }, }; +const testTheme = createTheme(); + const renderComponent = () => render( - - - , + + + + + , ); describe("ExperimentList", () => { @@ -214,6 +228,9 @@ describe("ExperimentList", () => { sample: { data: { composition: "H2O", density: 1.2 }, name: "Sample A", + container: { + parent: null, + }, }, }, }); @@ -250,6 +267,9 @@ describe("ExperimentList", () => { sample: { data: { composition: "H2O", density: 1.2 }, name: "Sample A", + container: { + parent: null, + }, }, }, }); @@ -264,19 +284,50 @@ describe("ExperimentList", () => { sample: { data: { composition: "CO2", density: 1.2 }, name: "Sample B", + container: { + parent: { + id: "container-parent-id", + name: "i15-1 robot table", + }, + }, }, }, }); }); }); - it("re-queries with new proposal/session when the instrument session changes", () => { + it("highlights rows amber when the sample container has no parent", () => { mockedUseQuery.mockReturnValue({ data: mockExperiments, loading: false, error: undefined, } as unknown as ReturnType); + renderComponent(); + + const missingParentRow = screen.getByText("Exp 1").closest("tr"); + const hasParentRow = screen.getByText("Exp 2").closest("tr"); + + expect(missingParentRow).toHaveStyle({ + backgroundColor: testTheme.palette.warning.light, + }); + expect(missingParentRow).toHaveAttribute( + "title", + "Sample container is not mounted on the robot table.", + ); + + expect(hasParentRow).not.toHaveStyle({ + backgroundColor: testTheme.palette.warning.light, + }); + expect(hasParentRow).not.toHaveAttribute("title"); + }); + + it("re-queries with new proposal/session when the instrument session changes", () => { + mockedUseQuery.mockReturnValue({ + data: mockExperiments, + loading: false, + error: undefined, + } as unknown as ReturnType); const { rerender } = render( diff --git a/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentsTable.tsx b/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentsTable.tsx index 77be34a1..1496797c 100644 --- a/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentsTable.tsx +++ b/apps/i15-1/src/components/ExperimentTable/ULIMSExperimentsTable.tsx @@ -1,5 +1,5 @@ import { useQuery } from "@apollo/client/react"; -import { Button, Stack, Typography } from "@mui/material"; +import { Button, Stack, Typography, useTheme } from "@mui/material"; import { MaterialReactTable, useMaterialReactTable, @@ -17,9 +17,9 @@ import type { GetSessionPlaylistQuery, } from "../../graphql/getSessionPlaylistQuery.generated"; import type { ExperimentDefinition, Sample } from "../../../generated/queue"; +import { ROBOT_TABLE_NAME } from "../PucksTable/PucksTable"; import { useInstrumentSession, visitTextToVisit } from "@atlas/app-shell"; - export type ExperimentDefinitionData = { q_max: number; frames: number; @@ -35,6 +35,9 @@ export type SampleData = { packing_fraction: number; }; +const SAMPLE_NOT_ON_TABLE = + "Sample container is not mounted on the robot table."; + const convertNodeToTableData = ( node: ExperimentNode, ): ExperimentTableData => ({ @@ -80,7 +83,10 @@ export function ExperimentList() { const { data, loading, error } = useQuery(GET_EXPERIMENTS, { skip: !visit, - variables: { proposal: visit?.proposalNumber ?? 0, session: visit?.number ?? 0 }, + variables: { + proposal: visit?.proposalNumber ?? 0, + session: visit?.number ?? 0, + }, fetchPolicy: "cache-and-network", context: { pathname: location.pathname }, }); @@ -97,6 +103,16 @@ export function ExperimentList() { ); }, [typedExperiments]); + const hasContainerNotOnTable = (experiment: ExperimentTableData) => { + const container = experiment.experiment?.sample?.container; + return ( + container != null && + (container.parent == null || container.parent.name !== ROBOT_TABLE_NAME) + ); + }; + + const theme = useTheme(); + const table = useMaterialReactTable({ columns, data: flatExperiments, @@ -106,6 +122,16 @@ export function ExperimentList() { enableSorting: false, enableDensityToggle: false, enableFullScreenToggle: false, + muiTableBodyRowProps: ({ row }) => { + const showWarning = hasContainerNotOnTable(row.original); + + return { + sx: showWarning + ? { backgroundColor: theme.palette.warning.light } + : undefined, + title: showWarning ? SAMPLE_NOT_ON_TABLE : undefined, + }; + }, renderTopToolbarCustomActions: ({ table }) => { const selectedCount = table.getSelectedRowModel().rows.length; @@ -162,9 +188,9 @@ export function ExperimentList() { }, muiToolbarAlertBannerProps: error ? { - color: "error", - children: `Error: ${error.message}`, - } + color: "error", + children: `Error: ${error.message}`, + } : undefined, }); diff --git a/apps/i15-1/src/components/PucksTable/PucksTable.tsx b/apps/i15-1/src/components/PucksTable/PucksTable.tsx index 209c9d66..02a8656c 100644 --- a/apps/i15-1/src/components/PucksTable/PucksTable.tsx +++ b/apps/i15-1/src/components/PucksTable/PucksTable.tsx @@ -63,7 +63,7 @@ const REMOVE_PUCK_FROM_TABLE: TypedDocumentNode< RemovePuckFromTableMutationVariables > = removePuckFromTableMutation; -const ROBOT_TABLE_NAME = "i15-1 robot table"; +export const ROBOT_TABLE_NAME = "i15-1 robot table"; const INSTRUMENT_KEY = "I15-1"; const PUCK_CONTAINER_TYPE = "i15-1 puck"; diff --git a/apps/i15-1/src/graphql/getSessionPlaylistQuery.generated.ts b/apps/i15-1/src/graphql/getSessionPlaylistQuery.generated.ts index 2d9f3bf7..aa63ab01 100644 --- a/apps/i15-1/src/graphql/getSessionPlaylistQuery.generated.ts +++ b/apps/i15-1/src/graphql/getSessionPlaylistQuery.generated.ts @@ -8,4 +8,4 @@ export type GetSessionPlaylistQueryVariables = Exact<{ }>; -export type GetSessionPlaylistQuery = { experiments: { __typename: 'ExperimentConnection', edges: Array<{ __typename: 'ExperimentEdge', node: { __typename: 'Experiment', name: string, sample: { __typename: 'Sample', name: string, id: unknown, data: unknown, instrumentSessions: Array<{ __typename: 'InstrumentSession', instrumentSessionReference: string | null }> }, experimentDefinition: { __typename: 'ExperimentDefinition', name: string, id: unknown, data: unknown } } }> } | null }; +export type GetSessionPlaylistQuery = { experiments: { __typename: 'ExperimentConnection', edges: Array<{ __typename: 'ExperimentEdge', node: { __typename: 'Experiment', name: string, sample: { __typename: 'Sample', name: string, id: unknown, data: unknown, container: { __typename: 'Container', id: unknown, positionInParent: { __typename: 'ContainerPosition', position: number | null } | null, parent: { __typename: 'Container', id: unknown, name: string } | null } | null, positionInContainer: { __typename: 'ContainerPosition', position: number | null } | null, instrumentSessions: Array<{ __typename: 'InstrumentSession', instrumentSessionReference: string | null }> }, experimentDefinition: { __typename: 'ExperimentDefinition', name: string, id: unknown, data: unknown } } }> } | null }; diff --git a/apps/i15-1/src/graphql/getSessionPlaylistQuery.ts b/apps/i15-1/src/graphql/getSessionPlaylistQuery.ts index 5ec3639e..4fd8095b 100644 --- a/apps/i15-1/src/graphql/getSessionPlaylistQuery.ts +++ b/apps/i15-1/src/graphql/getSessionPlaylistQuery.ts @@ -1,31 +1,44 @@ import { gql } from "@apollo/client"; export const getSessionPlaylistQuery = gql` -query GetSessionPlaylist($proposal: Int!, $session: Int!) { - experiments( - instrumentSessions: { - proposalNumber: $proposal - instrumentSessionNumber: $session - } - ) { - edges { - node { - name - sample { + query GetSessionPlaylist($proposal: Int!, $session: Int!) { + experiments( + instrumentSessions: { + proposalNumber: $proposal + instrumentSessionNumber: $session + } + ) { + edges { + node { name - id - data - instrumentSessions { - instrumentSessionReference + sample { + container { + id + positionInParent { + position + } + parent { + id + name + } + } + positionInContainer { + position + } + name + id + data + instrumentSessions { + instrumentSessionReference + } + } + experimentDefinition { + name + id + data } - } - experimentDefinition { - name - id - data } } } } -} `; diff --git a/apps/i15-1/src/mocks/handlers.ts b/apps/i15-1/src/mocks/handlers.ts index 09f5e5e1..e2fd227e 100644 --- a/apps/i15-1/src/mocks/handlers.ts +++ b/apps/i15-1/src/mocks/handlers.ts @@ -1,5 +1,6 @@ import { http, HttpResponse, ws, passthrough } from "msw"; import plansResponse from "./plans-response.json"; +import { ROBOT_TABLE_NAME } from "../components/PucksTable/PucksTable"; const USE_LOCAL = import.meta.env.VITE_USE_LOCAL === "true"; @@ -14,6 +15,14 @@ const fakeExperiments = { node: { name: "Test experiment", sample: { + container: { + id: "019fae86-1551-74f2-b876-f2b5dd4dbb43", + positionInParent: null, + parent: null, + }, + positionInContainer: { + position: 3, + }, name: "Test_8_1", id: "a47cd8af-03f4-430b-9858-749c61f6e14c", instrumentSessions: [ @@ -45,6 +54,19 @@ const fakeExperiments = { node: { name: "Test experiment 2", sample: { + container: { + id: "019fae86-1551-74f2-b876-f2b5dd4dbb43", + positionInParent: { + position: 1, + }, + parent: { + id: "019fae86-9deb-7c71-ac6b-2a846f4f2bee", + name: ROBOT_TABLE_NAME, + }, + }, + positionInContainer: { + position: 2, + }, name: "Test_8_2", id: "19ad91f0-a155-4c5c-b5ba-175bb6f7c057", instrumentSessions: [ diff --git a/apps/i15-1/src/queue/queueUtils.ts b/apps/i15-1/src/queue/queueUtils.ts index 573921df..34aa9f9e 100644 --- a/apps/i15-1/src/queue/queueUtils.ts +++ b/apps/i15-1/src/queue/queueUtils.ts @@ -1,5 +1,6 @@ import type { Experiment, + Sample, TaskRequest, TaskWithPosition, } from "../../generated/queue"; @@ -15,9 +16,10 @@ export function calculateNewPosition( return newPosition; } -export function positionFromName(name: string): string { - const parts = name.split("_"); - return "Puck " + parts[1] + " | Pin " + parts[2]; +export function positionFromSample(sample: Sample): string { + const pin = sample.positionInContainer.position; + const puck = sample.container.positionInParent.position; + return `Puck ${puck} | Pin ${pin}`; } export function getTableData( @@ -35,7 +37,7 @@ export function getTableData( id: task.id, instrumentSession: task.experiment.instrument_session, sampleId: exp.sample.id, - samplePosition: positionFromName(exp.sample.name), + samplePosition: positionFromSample(exp.sample), density: exp.sample.data.density as number, beamSize: exp.experiment_definition.data.focused_beam_size as number, timePerPDF: exp.experiment_definition.data.time_per_pdf as number, diff --git a/apps/i15-1/src/routes/QueueView.test.tsx b/apps/i15-1/src/routes/QueueView.test.tsx index 4813346f..819f001b 100644 --- a/apps/i15-1/src/routes/QueueView.test.tsx +++ b/apps/i15-1/src/routes/QueueView.test.tsx @@ -77,7 +77,13 @@ describe("QueueView", () => { experiment: { name: "Exp 1", instrument_session: "session2", - sample: { id: "sample2", name: "my_sample", data: {} }, + sample: { + id: "sample2", + name: "my_sample", + data: {}, + container: { positionInParent: { position: 1 }, id: "" }, + positionInContainer: { position: 1 }, + }, experiment_definition: { name: "PlanB", id: "123", @@ -140,7 +146,13 @@ describe("QueueView", () => { experiment: { name: "exp_2", instrument_session: "session2", - sample: { id: "sample2", name: "my_sample", data: {} }, + sample: { + id: "sample2", + name: "my_sample", + data: {}, + container: { positionInParent: { position: 1 }, id: "" }, + positionInContainer: { position: 1 }, + }, experiment_definition: { name: "planB", id: "123", @@ -176,7 +188,13 @@ describe("QueueView", () => { experiment: { name: "exp_1", instrument_session: "session1", - sample: { id: "sample1", name: "my_sample", data: {} }, + sample: { + id: "sample1", + name: "my_sample", + data: {}, + container: { positionInParent: { position: 1 }, id: "" }, + positionInContainer: { position: 1 }, + }, experiment_definition: { name: "planA", id: "123", @@ -218,7 +236,13 @@ describe("QueueView", () => { experiment: { name: "exp_1", instrument_session: "session1", - sample: { id: "sample1", name: "my_sample", data: {} }, + sample: { + id: "sample1", + name: "my_sample", + data: {}, + container: { positionInParent: { position: 1 }, id: "" }, + positionInContainer: { position: 1 }, + }, experiment_definition: { name: "planA", id: "123",