You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

use-dataset.ts 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { useInfiniteQuery, useQuery } from '@tanstack/react-query'
  2. import type { DataSet, DataSetListResponse, DatasetListRequest, RelatedAppResponse } from '@/models/datasets'
  3. import { get } from '../base'
  4. import { useReset } from '../use-base'
  5. import qs from 'qs'
  6. const NAME_SPACE = 'dataset'
  7. const DatasetListKey = [NAME_SPACE, 'list']
  8. export const useDatasetList = (params: DatasetListRequest) => {
  9. const { initialPage, tag_ids, limit, include_all, keyword } = params
  10. return useInfiniteQuery({
  11. queryKey: [...DatasetListKey, initialPage, tag_ids, limit, include_all, keyword],
  12. queryFn: ({ pageParam = 1 }) => {
  13. const urlParams = qs.stringify({
  14. tag_ids,
  15. limit,
  16. include_all,
  17. keyword,
  18. page: pageParam,
  19. }, { indices: false })
  20. return get<DataSetListResponse>(`/datasets?${urlParams}`)
  21. },
  22. getNextPageParam: lastPage => lastPage.has_more ? lastPage.page + 1 : null,
  23. initialPageParam: initialPage,
  24. })
  25. }
  26. export const useResetDatasetList = () => {
  27. return useReset([...DatasetListKey])
  28. }
  29. export const useDatasetDetail = (datasetId: string) => {
  30. return useQuery({
  31. queryKey: [NAME_SPACE, 'detail', datasetId],
  32. queryFn: () => get<DataSet>(`/datasets/${datasetId}`),
  33. })
  34. }
  35. export const useDatasetRelatedApps = (datasetId: string) => {
  36. return useQuery({
  37. queryKey: [NAME_SPACE, 'related-apps', datasetId],
  38. queryFn: () => get<RelatedAppResponse>(`/datasets/${datasetId}/related-apps`),
  39. })
  40. }
  41. type NotionPagePreviewRequest = {
  42. workspaceID: string
  43. pageID: string
  44. pageType: string
  45. }
  46. type NotionPagePreviewResponse = {
  47. content: string
  48. }
  49. export const usePreviewNotionPage = (params: NotionPagePreviewRequest) => {
  50. const { workspaceID, pageID, pageType } = params
  51. return useQuery({
  52. queryKey: [NAME_SPACE, 'preview-notion-page'],
  53. queryFn: () => get<NotionPagePreviewResponse>(`notion/workspaces/${workspaceID}/pages/${pageID}/${pageType}/preview`),
  54. enabled: !!workspaceID && !!pageID && !!pageType,
  55. })
  56. }