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 IBlockCreatedResponse, type IConstituentaReference, type ICreateBlockDTO, type ICreateOperationDTO, type IDeleteBlockDTO, type IDeleteOperationDTO, type IInputCreatedResponse, type IOperationCreatedResponse, type IOperationSchemaDTO, type IOssLayout, type IRelocateConstituentsDTO, type ITargetOperation, type IUpdateBlockDTO, type IUpdateInputDTO, type IUpdateOperationDTO, schemaBlockCreatedResponse, schemaConstituentaReference, schemaInputCreatedResponse, 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, data, isSilent }: { itemID: number; data: IOssLayout; isSilent?: boolean }) => axiosPatch({ endpoint: `/api/oss/${itemID}/update-layout`, request: { data: data, successMessage: isSilent ? undefined : infoMsg.changesSaved } }), createBlock: ({ itemID, data }: { itemID: number; data: ICreateBlockDTO }) => axiosPost({ schema: schemaBlockCreatedResponse, endpoint: `/api/oss/${itemID}/create-block`, request: { data: data, successMessage: infoMsg.changesSaved } }), updateBlock: ({ itemID, data }: { itemID: number; data: IUpdateBlockDTO }) => axiosPatch({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/update-operation`, request: { data: data, successMessage: infoMsg.changesSaved } }), deleteBlock: ({ itemID, data }: { itemID: number; data: IDeleteBlockDTO }) => axiosPatch({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/delete-block`, request: { data: data, successMessage: infoMsg.operationDestroyed } }), createOperation: ({ itemID, data }: { itemID: number; data: ICreateOperationDTO }) => axiosPost({ schema: schemaOperationCreatedResponse, endpoint: `/api/oss/${itemID}/create-operation`, request: { data: data, successMessage: response => infoMsg.newOperation(response.new_operation.alias) } }), updateOperation: ({ itemID, data }: { itemID: number; data: IUpdateOperationDTO }) => axiosPatch({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/update-operation`, request: { data: data, successMessage: infoMsg.changesSaved } }), deleteOperation: ({ itemID, data }: { itemID: number; data: IDeleteOperationDTO }) => axiosPatch({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/delete-operation`, request: { data: data, successMessage: infoMsg.operationDestroyed } }), createInput: ({ itemID, data }: { itemID: number; data: ITargetOperation }) => axiosPatch({ schema: schemaInputCreatedResponse, endpoint: `/api/oss/${itemID}/create-input`, request: { data: data, successMessage: infoMsg.newLibraryItem } }), updateInput: ({ itemID, data }: { itemID: number; data: IUpdateInputDTO }) => axiosPatch({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/set-input`, request: { data: data, successMessage: infoMsg.changesSaved } }), executeOperation: ({ itemID, data }: { itemID: number; data: ITargetOperation }) => axiosPost({ schema: schemaOperationSchema, endpoint: `/api/oss/${itemID}/execute-operation`, request: { data: data, successMessage: infoMsg.operationExecuted } }), relocateConstituents: (data: IRelocateConstituentsDTO) => 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 } } }) };