import { useInfiniteQuery, useQuery } from '@tanstack/react-query' import type { DataSet, DataSetListResponse, DatasetListRequest, RelatedAppResponse } from '@/models/datasets' import { get } from '../base' import { useReset } from '../use-base' import qs from 'qs' const NAME_SPACE = 'dataset' const DatasetListKey = [NAME_SPACE, 'list'] export const useDatasetList = (params: DatasetListRequest) => { const { initialPage, tag_ids, limit, include_all, keyword } = params return useInfiniteQuery({ queryKey: [...DatasetListKey, initialPage, tag_ids, limit, include_all, keyword], queryFn: ({ pageParam = 1 }) => { const urlParams = qs.stringify({ tag_ids, limit, include_all, keyword, page: pageParam, }, { indices: false }) return get(`/datasets?${urlParams}`) }, getNextPageParam: lastPage => lastPage.has_more ? lastPage.page + 1 : null, initialPageParam: initialPage, }) } export const useResetDatasetList = () => { return useReset([...DatasetListKey]) } export const useDatasetDetail = (datasetId: string) => { return useQuery({ queryKey: [NAME_SPACE, 'detail', datasetId], queryFn: () => get(`/datasets/${datasetId}`), }) } export const useDatasetRelatedApps = (datasetId: string) => { return useQuery({ queryKey: [NAME_SPACE, 'related-apps', datasetId], queryFn: () => get(`/datasets/${datasetId}/related-apps`), }) } type NotionPagePreviewRequest = { workspaceID: string pageID: string pageType: string } type NotionPagePreviewResponse = { content: string } export const usePreviewNotionPage = (params: NotionPagePreviewRequest) => { const { workspaceID, pageID, pageType } = params return useQuery({ queryKey: [NAME_SPACE, 'preview-notion-page'], queryFn: () => get(`notion/workspaces/${workspaceID}/pages/${pageID}/${pageType}/preview`), enabled: !!workspaceID && !!pageID && !!pageType, }) }