import { queryOptions } from '@tanstack/react-query'; import { axiosGet, axiosPatch, axiosPost } from '@/backend/api-transport'; import { DELAYS, KEYS } from '@/backend/configuration'; import { infoMsg } from '@/utils/labels'; import { type IConstituentaReference, type ICstRelocateDTO, type IInputCreatedResponse, type IInputUpdateDTO, type IOperationCreatedResponse, type IOperationCreateDTO, type IOperationDeleteDTO, type IOperationPosition, type IOperationSchemaDTO, type IOperationUpdateDTO, type ITargetOperation, schemaConstituentaReference, schemaOperationCreatedResponse, schemaOperationSchema } from './types'; export const ossApi = { baseKey: KEYS.oss, getOssQueryOptions: ({ itemID }: { itemID?: number }) => { return queryOptions({ queryKey: KEYS.composite.ossItem({ itemID }), staleTime: DELAYS.staleShort, queryFn: meta => !itemID ? undefined : axiosGet({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/details`, options: { signal: meta.signal } }) }); }, updateLayout: ({ itemID, positions, isSilent }: { itemID: number; positions: IOperationPosition[]; isSilent?: boolean; }) => axiosPatch({ endpoint: `/api/oss/${itemID}/update-layout`, request: { data: { positions: positions }, successMessage: isSilent ? undefined : infoMsg.changesSaved } }), operationCreate: ({ itemID, data }: { itemID: number; data: IOperationCreateDTO }) => axiosPost({ schema: schemaOperationCreatedResponse, endpoint: `/api/oss/${itemID}/create-operation`, request: { data: data, successMessage: response => infoMsg.newOperation(response.new_operation.alias) } }), operationDelete: ({ itemID, data }: { itemID: number; data: IOperationDeleteDTO }) => axiosPatch({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/delete-operation`, request: { data: data, successMessage: infoMsg.operationDestroyed } }), inputCreate: ({ itemID, data }: { itemID: number; data: ITargetOperation }) => axiosPatch({ endpoint: `/api/oss/${itemID}/create-input`, request: { data: data, successMessage: infoMsg.newLibraryItem } }), inputUpdate: ({ itemID, data }: { itemID: number; data: IInputUpdateDTO }) => axiosPatch({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/set-input`, request: { data: data, successMessage: infoMsg.changesSaved } }), operationUpdate: ({ itemID, data }: { itemID: number; data: IOperationUpdateDTO }) => axiosPatch({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/update-operation`, request: { data: data, successMessage: infoMsg.changesSaved } }), operationExecute: ({ itemID, data }: { itemID: number; data: ITargetOperation }) => axiosPost({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/execute-operation`, request: { data: data, successMessage: infoMsg.operationExecuted } }), relocateConstituents: (data: ICstRelocateDTO) => axiosPost({ schema: schemaOperationSchema, endpoint: `/api/oss/relocate-constituents`, request: { data: data, successMessage: infoMsg.changesSaved } }), getPredecessor: (cstID: number) => axiosPost<{ target: number }, IConstituentaReference>({ schema: schemaConstituentaReference, endpoint: '/api/oss/get-predecessor', request: { data: { target: cstID } } }) };