Portal/rsconcept/frontend/src/features/library/backend/api.ts

173 lines
5.2 KiB
TypeScript
Raw Normal View History

2025-01-23 19:41:31 +03:00
import { queryOptions } from '@tanstack/react-query';
import {
2025-02-20 20:22:05 +03:00
type IRSFormDTO,
type IVersionCreatedResponse,
schemaRSForm,
schemaVersionCreatedResponse
2025-02-26 00:16:22 +03:00
} from '@/features/rsform';
2025-02-12 21:36:03 +03:00
2025-03-12 11:54:32 +03:00
import { axiosDelete, axiosGet, axiosPatch, axiosPost } from '@/backend/api-transport';
import { DELAYS, KEYS } from '@/backend/configuration';
import { infoMsg } from '@/utils/labels';
import {
2025-02-22 14:03:13 +03:00
type AccessPolicy,
2025-02-20 20:22:05 +03:00
type ICloneLibraryItemDTO,
type ICreateLibraryItemDTO,
type ILibraryItem,
type IRenameLocationDTO,
type IUpdateLibraryItemDTO,
type IVersionCreateDTO,
2025-03-09 21:57:21 +03:00
type IVersionExInfo,
2025-02-20 20:22:05 +03:00
type IVersionUpdateDTO,
schemaLibraryItem,
schemaLibraryItemArray,
2025-03-11 11:00:52 +03:00
schemaVersionExInfo
} from './types';
2025-02-07 15:21:40 +03:00
2025-01-23 19:41:31 +03:00
export const libraryApi = {
baseKey: KEYS.library,
libraryListKey: KEYS.composite.libraryList,
2025-01-23 19:41:31 +03:00
getLibraryQueryOptions: ({ isAdmin }: { isAdmin: boolean }) =>
queryOptions({
2025-01-29 23:18:08 +03:00
queryKey: [...libraryApi.libraryListKey, isAdmin ? 'admin' : 'user'],
2025-01-23 19:41:31 +03:00
staleTime: DELAYS.staleMedium,
queryFn: meta =>
axiosGet<ILibraryItem[]>({
schema: schemaLibraryItemArray,
endpoint: isAdmin ? '/api/library/all' : '/api/library/active',
options: { signal: meta.signal }
})
2025-01-23 19:41:31 +03:00
}),
getTemplatesQueryOptions: () =>
queryOptions({
queryKey: [libraryApi.baseKey, 'templates'],
staleTime: DELAYS.staleMedium,
queryFn: meta =>
axiosGet<ILibraryItem[]>({
schema: schemaLibraryItemArray,
endpoint: '/api/library/templates',
options: { signal: meta.signal }
})
2025-01-23 19:41:31 +03:00
}),
2025-02-04 23:33:35 +03:00
createItem: (data: ICreateLibraryItemDTO) =>
axiosPost<ICreateLibraryItemDTO, ILibraryItem>({
schema: schemaLibraryItem,
endpoint: !data.file ? '/api/library' : '/api/rsforms/create-detailed',
request: {
data: data,
successMessage: infoMsg.newLibraryItem
},
options: !data.file
? undefined
: {
2025-01-23 19:41:31 +03:00
headers: {
'Content-Type': 'multipart/form-data'
}
}
}),
2025-02-04 23:33:35 +03:00
updateItem: (data: IUpdateLibraryItemDTO) =>
axiosPatch<IUpdateLibraryItemDTO, ILibraryItem>({
schema: schemaLibraryItem,
endpoint: `/api/library/${data.id}`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
setOwner: ({ itemID, owner }: { itemID: number; owner: number }) =>
axiosPatch({
endpoint: `/api/library/${itemID}/set-owner`,
request: {
data: { user: owner },
successMessage: infoMsg.changesSaved
}
}),
setLocation: ({ itemID, location }: { itemID: number; location: string }) =>
axiosPatch({
endpoint: `/api/library/${itemID}/set-location`,
request: {
data: { location: location },
successMessage: infoMsg.moveComplete
}
}),
setAccessPolicy: ({ itemID, policy }: { itemID: number; policy: AccessPolicy }) =>
axiosPatch({
endpoint: `/api/library/${itemID}/set-access-policy`,
request: {
data: { access_policy: policy },
successMessage: infoMsg.changesSaved
}
}),
setEditors: ({ itemID, editors }: { itemID: number; editors: number[] }) =>
axiosPatch({
endpoint: `/api/library/${itemID}/set-editors`,
request: {
data: { users: editors },
successMessage: infoMsg.changesSaved
}
}),
2025-01-23 19:41:31 +03:00
deleteItem: (data: { target: number; beforeInvalidate?: () => void | Promise<void> }) =>
axiosDelete({
endpoint: `/api/library/${data.target}`,
request: {
successMessage: infoMsg.itemDestroyed
}
}),
2025-02-06 14:09:20 +03:00
cloneItem: (data: ICloneLibraryItemDTO) =>
axiosPost<ICloneLibraryItemDTO, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/library/${data.id}/clone`,
request: {
data: data,
successMessage: newSchema => infoMsg.cloneComplete(newSchema.alias)
}
}),
2025-01-23 19:41:31 +03:00
renameLocation: (data: IRenameLocationDTO) =>
axiosPatch({
endpoint: '/api/library/rename-location',
request: {
data: data,
successMessage: infoMsg.locationRenamed
}
}),
2025-01-23 19:41:31 +03:00
versionCreate: ({ itemID, data }: { itemID: number; data: IVersionCreateDTO }) =>
2025-02-06 14:09:20 +03:00
axiosPost<IVersionCreateDTO, IVersionCreatedResponse>({
schema: schemaVersionCreatedResponse,
endpoint: `/api/library/${itemID}/create-version`,
request: {
data: data,
successMessage: infoMsg.newVersion(data.version)
}
}),
versionRestore: ({ versionID }: { versionID: number }) =>
axiosPatch<undefined, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/versions/${versionID}/restore`,
request: {
successMessage: infoMsg.versionRestored
}
}),
versionUpdate: (data: { itemID: number; version: IVersionUpdateDTO }) =>
2025-03-09 21:57:21 +03:00
axiosPatch<IVersionUpdateDTO, IVersionExInfo>({
2025-03-11 11:00:52 +03:00
schema: schemaVersionExInfo,
endpoint: `/api/versions/${data.version.id}`,
request: {
data: data.version,
successMessage: infoMsg.changesSaved
}
}),
versionDelete: (data: { itemID: number; versionID: number }) =>
axiosDelete({
endpoint: `/api/versions/${data.versionID}`,
request: {
successMessage: infoMsg.versionDestroyed
}
})
2025-01-23 19:41:31 +03:00
};