2025-01-23 19:41:31 +03:00
|
|
|
import { useQuery, useQueryClient, useSuspenseQuery } from '@tanstack/react-query';
|
|
|
|
|
2025-01-26 22:24:34 +03:00
|
|
|
import { useLibrary, useLibrarySuspense } from '@/backend/library/useLibrary';
|
2025-01-23 19:41:31 +03:00
|
|
|
import { LibraryItemID } from '@/models/library';
|
|
|
|
import { IOperationSchema, IOperationSchemaData } from '@/models/oss';
|
|
|
|
import { OssLoader } from '@/models/OssLoader';
|
|
|
|
|
|
|
|
import { ossApi } from './api';
|
|
|
|
|
|
|
|
export function useOss({ itemID }: { itemID?: LibraryItemID }) {
|
|
|
|
const { items: libraryItems, isLoading: libraryLoading } = useLibrary();
|
|
|
|
const { data, isLoading, error } = useQuery({
|
|
|
|
...ossApi.getOssQueryOptions({ itemID })
|
|
|
|
});
|
|
|
|
|
|
|
|
const schema = data && !libraryLoading ? new OssLoader(data, libraryItems).produceOSS() : undefined;
|
|
|
|
return { schema: schema, isLoading: isLoading || libraryLoading, error: error };
|
|
|
|
}
|
|
|
|
|
2025-01-26 22:24:34 +03:00
|
|
|
export function useOssSuspense({ itemID }: { itemID: LibraryItemID }) {
|
2025-01-23 19:41:31 +03:00
|
|
|
const { items: libraryItems } = useLibrarySuspense();
|
|
|
|
const { data } = useSuspenseQuery({
|
|
|
|
...ossApi.getOssQueryOptions({ itemID })
|
|
|
|
});
|
2025-01-26 22:24:34 +03:00
|
|
|
const schema = new OssLoader(data!, libraryItems).produceOSS();
|
2025-01-23 19:41:31 +03:00
|
|
|
return { schema };
|
|
|
|
}
|
|
|
|
|
|
|
|
export function useOssUpdate({ itemID }: { itemID?: LibraryItemID }) {
|
|
|
|
const { items: libraryItems } = useLibrary();
|
|
|
|
const client = useQueryClient();
|
|
|
|
const queryKey = [ossApi.getOssQueryOptions({ itemID }).queryKey];
|
|
|
|
return {
|
|
|
|
update: (data: IOperationSchemaData) =>
|
|
|
|
client.setQueryData(queryKey, new OssLoader(data, libraryItems).produceOSS()),
|
|
|
|
partialUpdate: (data: Partial<IOperationSchema>) =>
|
|
|
|
client.setQueryData(queryKey, (prev: IOperationSchema) => (prev ? { ...prev, ...data } : prev))
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export function useOssInvalidate({ itemID }: { itemID?: LibraryItemID }) {
|
|
|
|
const client = useQueryClient();
|
|
|
|
const queryKey = [ossApi.getOssQueryOptions({ itemID }).queryKey];
|
|
|
|
return {
|
|
|
|
invalidate: () => client.invalidateQueries({ queryKey })
|
|
|
|
};
|
|
|
|
}
|