-
+
diff --git a/web/models/datasets.ts b/web/models/datasets.ts
index 6b0a00182a..bbe6f2dc24 100644
--- a/web/models/datasets.ts
+++ b/web/models/datasets.ts
@@ -175,6 +175,14 @@ export type FetchDatasetsParams = {
}
}
+export type DatasetListRequest = {
+ initialPage: number
+ tag_ids: string[]
+ limit: number
+ include_all: boolean
+ keyword: string
+}
+
export type DataSetListResponse = {
data: DataSet[]
has_more: boolean
diff --git a/web/service/knowledge/use-dataset.ts b/web/service/knowledge/use-dataset.ts
new file mode 100644
index 0000000000..8fe4447a7a
--- /dev/null
+++ b/web/service/knowledge/use-dataset.ts
@@ -0,0 +1,32 @@
+import { useInfiniteQuery } from '@tanstack/react-query'
+import type { DataSetListResponse, DatasetListRequest } 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])
+}