From 9d29b471bc2a98806ba6e1fe3d289af665801e12 Mon Sep 17 00:00:00 2001 From: Finley Ge <32237950+FinleyGe@users.noreply.github.com> Date: Mon, 24 Jun 2024 19:04:42 +0800 Subject: [PATCH] chore: dataset fe adjusting (#1833) --- .../app/src/pages/api/core/dataset/list.ts | 17 +- .../src/pages/dataset/list/component/List.tsx | 602 ++++++------------ .../app/src/pages/dataset/list/context.tsx | 67 +- projects/app/src/pages/dataset/list/index.tsx | 233 ++++++- projects/app/src/web/core/dataset/api.ts | 4 +- 5 files changed, 490 insertions(+), 433 deletions(-) diff --git a/projects/app/src/pages/api/core/dataset/list.ts b/projects/app/src/pages/api/core/dataset/list.ts index ab414b2f6..2373e929c 100644 --- a/projects/app/src/pages/api/core/dataset/list.ts +++ b/projects/app/src/pages/api/core/dataset/list.ts @@ -11,11 +11,12 @@ import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant'; import { MongoResourcePermission } from '@fastgpt/service/support/permission/schema'; -import { parseParentIdInMongo } from '@fastgpt/global/common/parentFolder/utils'; import { DatasetDefaultPermission } from '@fastgpt/global/support/permission/dataset/constant'; +import { ParentIdType } from '@fastgpt/global/common/parentFolder/type'; +import { parseParentIdInMongo } from '@fastgpt/global/common/parentFolder/utils'; async function handler(req: NextApiRequest) { - const { parentId, type } = req.query as { parentId?: string; type?: DatasetTypeEnum }; + const { parentId, type } = req.body as { parentId: ParentIdType; type?: DatasetTypeEnum }; // 凭证校验 const { teamId, @@ -27,6 +28,18 @@ async function handler(req: NextApiRequest) { authApiKey: true, per: ReadPermissionVal }); + console.log( + 'parentId', + parentId, + 'type', + type, + 'teamId', + teamId, + 'tmbId', + tmbId, + 'tmbPer', + tmbPer + ); const [myDatasets, rpList] = await Promise.all([ MongoDataset.find({ diff --git a/projects/app/src/pages/dataset/list/component/List.tsx b/projects/app/src/pages/dataset/list/component/List.tsx index be4e39370..c35774db1 100644 --- a/projects/app/src/pages/dataset/list/component/List.tsx +++ b/projects/app/src/pages/dataset/list/component/List.tsx @@ -1,16 +1,7 @@ import React, { useMemo, useRef, useState } from 'react'; -import { - delDatasetById, - getDatasetById, - putDatasetById, - postCreateDataset -} from '@/web/core/dataset/api'; -import { EditFolderFormType } from '@fastgpt/web/components/common/MyModal/EditFolderModal'; -import { FolderImgUrl } from '@fastgpt/global/common/file/image/constants'; -import { useUserStore } from '@/web/support/user/useUserStore'; +import { putDatasetById } from '@/web/core/dataset/api'; import { useDatasetStore } from '@/web/core/dataset/store/dataset'; -import { FolderIcon } from '@fastgpt/global/common/file/image/constants'; -import { Box, Flex, Grid, Button, Image, useDisclosure } from '@chakra-ui/react'; +import { Box, Flex, Grid } from '@chakra-ui/react'; import { DatasetTypeEnum, DatasetTypeMap } from '@fastgpt/global/core/dataset/constants'; import MyMenu from '@fastgpt/web/components/common/MyMenu'; import MyIcon from '@fastgpt/web/components/common/Icon'; @@ -19,7 +10,7 @@ import PermissionIconText from '@/components/support/permission/IconText'; import DatasetTypeTag from '@/components/core/dataset/DatasetTypeTag'; import Avatar from '@/components/Avatar'; import { useConfirm } from '@fastgpt/web/hooks/useConfirm'; -import { useRequest, useRequest2 } from '@fastgpt/web/hooks/useRequest'; +import { useRequest } from '@fastgpt/web/hooks/useRequest'; import { DatasetItemType } from '@fastgpt/global/core/dataset/type'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useToast } from '@fastgpt/web/hooks/useToast'; @@ -27,7 +18,6 @@ import { checkTeamExportDatasetLimit } from '@/web/support/user/team/api'; import { downloadFetch } from '@/web/common/system/utils'; import MyTooltip from '@fastgpt/web/components/common/MyTooltip'; import dynamic from 'next/dynamic'; -import { EditResourceInfoFormType } from '@/components/common/Modal/EditResourceModal'; import { useContextSelector } from 'use-context-selector'; import { DatasetContext } from '../context'; import { @@ -40,37 +30,28 @@ import { getCollaboratorList, postUpdateDatasetCollaborators } from '@/web/core/dataset/api/collaborator'; -import FolderSlideCard from '@/components/common/folder/SlideCard'; import EmptyTip from '@fastgpt/web/components/common/EmptyTip'; import { useFolderDrag } from '@/components/common/folder/useFolderDrag'; import MyBox from '@fastgpt/web/components/common/MyBox'; import { useI18n } from '@/web/context/I18n'; import { useTranslation } from 'react-i18next'; -import { AddIcon } from '@chakra-ui/icons'; - -const CreateModal = dynamic(() => import('./CreateModal')); - -const EditFolderModal = dynamic( - () => import('@fastgpt/web/components/common/MyModal/EditFolderModal') -); function List() { - const { setLoading, isPc } = useSystemStore(); + const { setLoading } = useSystemStore(); const { toast } = useToast(); const { t } = useTranslation(); const { commonT } = useI18n(); - const { refetchDatasets, setMoveDatasetId, refetchPaths } = useContextSelector( - DatasetContext, - (v) => v - ); - const [editPerDatasetIndex, setEditPerDatasetIndex] = useState(); - const { myDatasets, loadMyDatasets, setMyDatasets } = useDatasetStore(); - const { userInfo } = useUserStore(); const { - isOpen: isOpenCreateModal, - onOpen: onOpenCreateModal, - onClose: onCloseCreateModal - } = useDisclosure(); + refetchDatasets, + setMoveDatasetId, + refetchPaths, + refetchFolderDetail, + editedDataset, + setEditedDataset, + onDelDataset + } = useContextSelector(DatasetContext, (v) => v); + const [editPerDatasetIndex, setEditPerDatasetIndex] = useState(); + const { myDatasets, loadMyDatasets } = useDatasetStore(); const { getBoxProps } = useFolderDrag({ activeStyles: { @@ -98,14 +79,6 @@ function List() { const { parentId = null } = router.query as { parentId?: string | null }; - const { data: folderDetail, runAsync: refetchFolderDetail } = useRequest2( - () => (parentId ? getDatasetById(parentId) : Promise.resolve(undefined)), - { - manual: false, - refreshDeps: [parentId, myDatasets] - } - ); - const { mutate: exportDataset } = useRequest({ mutationFn: async (dataset: DatasetItemType) => { setLoading(true); @@ -128,25 +101,7 @@ function List() { errorToast: t('dataset.Export Dataset Limit Error') }); - const { mutate: onDelDataset } = useRequest({ - mutationFn: async (id: string) => { - setLoading(true); - await delDatasetById(id); - return id; - }, - onSuccess(id: string) { - setMyDatasets(myDatasets.filter((item) => item._id !== id)); - router.push('/dataset/list'); - }, - onSettled() { - setLoading(false); - }, - successToast: t('common.Delete Success'), - errorToast: t('dataset.Delete Dataset Error') - }); - const EditResourceModal = dynamic(() => import('@/components/common/Modal/EditResourceModal')); - const [editedDataset, setEditedDataset] = useState(); const DeleteTipsMap = useRef({ [DatasetTypeEnum.folder]: t('dataset.deleteFolderTips'), @@ -173,322 +128,212 @@ function List() { const onClickDeleteDataset = (id: string) => { openConfirm( - () => onDelDataset(id), + () => + onDelDataset(id).then(() => { + refetchPaths(); + refetchDatasets(); + }), undefined, DeleteTipsMap.current[DatasetTypeEnum.dataset] )(); }; - const [editFolderData, setEditFolderData] = useState(); - return ( <> - - {formatDatasets.length > 0 && ( - - {formatDatasets.map((dataset, index) => ( - - - {dataset.type === DatasetTypeEnum.folder ? '打开文件夹' : '打开知识库'} - - - } + {formatDatasets.length > 0 && ( + + {formatDatasets.map((dataset, index) => ( + + + {dataset.type === DatasetTypeEnum.folder ? '打开文件夹' : '打开知识库'} + + + } + > + { + if (dataset.type === DatasetTypeEnum.folder) { + router.push({ + pathname: '/dataset/list', + query: { + parentId: dataset._id + } + }); + } else { + router.push({ + pathname: '/dataset/detail', + query: { + datasetId: dataset._id + } + }); + } + }} > - { - if (dataset.type === DatasetTypeEnum.folder) { - router.push({ - pathname: '/dataset/list', - query: { - parentId: dataset._id - } - }); - } else { - router.push({ - pathname: '/dataset/detail', - query: { - datasetId: dataset._id - } - }); - } - }} - > - {dataset.permission.hasWritePer && ( - { - e.stopPropagation(); - }} - > - - - - } - menuList={[ - { - children: [ - { - icon: 'edit', - label: '编辑信息', - onClick: () => - setEditedDataset({ - id: dataset._id, - name: dataset.name, - intro: dataset.intro, - avatar: dataset.avatar - }) - }, - { - icon: 'common/file/move', - label: t('Move'), - onClick: () => setMoveDatasetId(dataset._id) - }, + {dataset.permission.hasWritePer && ( + { + e.stopPropagation(); + }} + > + + + + } + menuList={[ + { + children: [ + { + icon: 'edit', + label: commonT('dataset.Edit Info'), + onClick: () => + setEditedDataset({ + id: dataset._id, + name: dataset.name, + intro: dataset.intro, + avatar: dataset.avatar + }) + }, + { + icon: 'common/file/move', + label: t('Move'), + onClick: () => setMoveDatasetId(dataset._id) + }, - ...(dataset.type !== DatasetTypeEnum.folder - ? [ - { - icon: 'export', - label: t('Export'), - onClick: () => { - exportDataset(dataset); - } + ...(dataset.type != DatasetTypeEnum.folder + ? [ + { + icon: 'export', + label: t('Export'), + onClick: () => { + exportDataset(dataset); } - ] - : []), - ...(dataset.permission.hasManagePer - ? [ - { - icon: 'support/team/key', - label: t('permission.Permission'), - onClick: () => setEditPerDatasetIndex(index) - } - ] - : []) - ] - }, - { - children: [ + } + ] + : []), + ...(dataset.permission.hasManagePer + ? [ + { + icon: 'support/team/key', + label: t('permission.Permission'), + onClick: () => setEditPerDatasetIndex(index) + } + ] + : []) + ] + }, + ...(dataset.permission.hasManagePer + ? [ { - icon: 'export', - label: t('Export'), - onClick: () => { - exportDataset(dataset); - } + children: [ + { + icon: 'delete', + label: t('common.Delete'), + type: 'danger' as 'danger', + onClick: () => onClickDeleteDataset(dataset._id) + } + ] } ] - }, - ...(dataset.permission.hasManagePer - ? [ - { - children: [ - { - icon: 'delete', - label: t('common.Delete'), - type: 'danger' as 'danger', - onClick: () => onClickDeleteDataset(dataset._id) - } - ] - } - ] - : []) - ]} - /> - - )} - - - - - {dataset.name} - - - - {dataset.intro || - (dataset.type === DatasetTypeEnum.folder - ? t('core.dataset.Folder placeholder') - : t('core.dataset.Intro Placeholder'))} + : []) + ]} + /> + + )} + + + + + {dataset.name} - - - - - {dataset.type !== DatasetTypeEnum.folder && ( - - )} - - - - ))} - - )} - {myDatasets.length === 0 && ( - - )} - {userInfo?.team?.permission.hasWritePer && ( - - - - {t('common.Create New')} - - } - menuList={[ - { - children: [ - { - label: ( - - - {t('Folder')} - - ), - onClick: () => setEditFolderData({}) - }, - { - label: ( - - {''} - {t('core.dataset.Dataset')} - - ), - onClick: onOpenCreateModal - } - ] - } - ]} - /> - )} - - {!!folderDetail && isPc && ( - - { - setEditedDataset({ - id: folderDetail._id, - name: folderDetail.name, - intro: folderDetail.intro - }); - }} - onMove={() => setMoveDatasetId(folderDetail._id)} - deleteTip={t('dataset.deleteFolderTips')} - onDelete={() => onDelDataset(folderDetail._id)} - defaultPer={{ - value: folderDetail.defaultPermission, - defaultValue: DatasetDefaultPermission, - onChange: (e) => { - return putDatasetById({ - id: folderDetail._id, - defaultPermission: e - }); - } - }} - managePer={{ - permission: folderDetail.permission, - onGetCollaboratorList: () => getCollaboratorList(folderDetail._id), - permissionList: DatasetPermissionList, - onUpdateCollaborators: ({ - tmbIds, - permission - }: { - tmbIds: string[]; - permission: number; - }) => { - return postUpdateDatasetCollaborators({ - tmbIds, - permission, - datasetId: folderDetail._id - }); - }, - onDelOneCollaborator: (tmbId: string) => - deleteDatasetCollaborators({ - datasetId: folderDetail._id, - tmbId - }) - }} - /> - - )} - - - + + {dataset.intro || + (dataset.type === DatasetTypeEnum.folder + ? t('core.dataset.Folder placeholder') + : t('core.dataset.Intro Placeholder'))} + + + + + + {dataset.type !== DatasetTypeEnum.folder && ( + + )} + + + + ))} + + )} + {myDatasets.length === 0 && ( + + )} {editedDataset && ( setEditPerDatasetIndex(undefined)} /> )} - {!!editFolderData && ( - setEditFolderData(undefined)} - onCreate={async ({ name }) => { - try { - await postCreateDataset({ - parentId: parentId || undefined, - name, - type: DatasetTypeEnum.folder, - avatar: FolderImgUrl, - intro: '' - }); - refetchDatasets(); - refetchPaths(); - } catch (error) { - return Promise.reject(error); - } - }} - onEdit={async ({ name, intro, id }) => { - try { - await putDatasetById({ - id, - name, - intro - }); - refetchDatasets(); - refetchPaths(); - } catch (error) { - return Promise.reject(error); - } - }} - /> - )} - {isOpenCreateModal && ( - - )} + ); } diff --git a/projects/app/src/pages/dataset/list/context.tsx b/projects/app/src/pages/dataset/list/context.tsx index f49827b3d..f29893e68 100644 --- a/projects/app/src/pages/dataset/list/context.tsx +++ b/projects/app/src/pages/dataset/list/context.tsx @@ -1,4 +1,10 @@ -import { getDatasetPaths, putDatasetById } from '@/web/core/dataset/api'; +import { + getDatasetPaths, + putDatasetById, + getDatasets, + getDatasetById, + delDatasetById +} from '@/web/core/dataset/api'; import { useDatasetStore } from '@/web/core/dataset/store/dataset'; import { GetResourceFolderListProps, @@ -9,18 +15,28 @@ import { useRouter } from 'next/router'; import React, { useCallback, useState } from 'react'; import { createContext } from 'use-context-selector'; import { useI18n } from '@/web/context/I18n'; -import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; +import { useRequest, useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { DatasetUpdateBody } from '@fastgpt/global/core/dataset/api'; import dynamic from 'next/dynamic'; +import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants'; +import { DatasetItemType } from '@fastgpt/global/core/dataset/type'; +import { EditResourceInfoFormType } from '@/components/common/Modal/EditResourceModal'; +import { useSystemStore } from '@/web/common/system/useSystemStore'; +import { useTranslation } from 'react-i18next'; const MoveModal = dynamic(() => import('@/components/common/folder/MoveModal')); export type DatasetContextType = { refetchDatasets: () => void; refetchPaths: () => void; + refetchFolderDetail: () => void; isFetchingDatasets: boolean; setMoveDatasetId: (id: string) => void; paths: ParentTreePathItemType[]; + folderDetail?: DatasetItemType; + editedDataset?: EditResourceInfoFormType; + setEditedDataset: (data?: EditResourceInfoFormType) => void; + onDelDataset: (id: string) => Promise; }; export const DatasetContext = createContext({ @@ -28,22 +44,39 @@ export const DatasetContext = createContext({ isFetchingDatasets: false, setMoveDatasetId: () => {}, refetchPaths: () => {}, - paths: [] + paths: [], + refetchFolderDetail: () => {}, + folderDetail: {} as any, + editedDataset: {} as any, + setEditedDataset: () => {}, + onDelDataset: () => Promise.resolve() }); function DatasetContextProvider({ children }: { children: React.ReactNode }) { const router = useRouter(); const { commonT } = useI18n(); + const { t } = useTranslation(); const { parentId = null } = router.query as { parentId?: string | null }; - const { loadMyDatasets } = useDatasetStore(); + const { myDatasets, loadMyDatasets } = useDatasetStore(); - const getDatasetFolderList = useCallback(async ({ parentId }: GetResourceFolderListProps) => { - const res = await getDatasetPaths(parentId); - return res.map((item) => ({ - id: item.parentId, - name: item.parentName - })); + const { data: folderDetail, runAsync: refetchFolderDetail } = useRequest2( + () => (parentId ? getDatasetById(parentId) : Promise.resolve(undefined)), + { + manual: false, + refreshDeps: [parentId, myDatasets] + } + ); + const getDatasetFolderList = useCallback(({ parentId }: GetResourceFolderListProps) => { + return getDatasets({ + parentId, + type: DatasetTypeEnum.folder + }).then((res) => { + return res.map((item) => ({ + id: item._id, + name: item.name + })); + }); }, []); const { data: paths = [], runAsync: refetchPaths } = useRequest2( @@ -82,12 +115,24 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) { [moveDatasetId, onUpdateDataset] ); + const [editedDataset, setEditedDataset] = useState(); + + const { runAsync: onDelDataset } = useRequest2(delDatasetById, { + successToast: t('common.Delete Success'), + errorToast: t('dataset.Delete Dataset Error') + }); + const contextValue = { refetchDatasets, isFetchingDatasets, setMoveDatasetId, paths, - refetchPaths + refetchPaths, + refetchFolderDetail, + folderDetail, + editedDataset, + setEditedDataset, + onDelDataset }; return ( diff --git a/projects/app/src/pages/dataset/list/index.tsx b/projects/app/src/pages/dataset/list/index.tsx index 36a7d458b..e8519d3b5 100644 --- a/projects/app/src/pages/dataset/list/index.tsx +++ b/projects/app/src/pages/dataset/list/index.tsx @@ -1,5 +1,5 @@ -import React from 'react'; -import { Box, Flex, Image } from '@chakra-ui/react'; +import React, { useState } from 'react'; +import { Box, Flex, Image, Button, useDisclosure } from '@chakra-ui/react'; import { useRouter } from 'next/router'; import PageContainer from '@/components/PageContainer'; import { useTranslation } from 'next-i18next'; @@ -10,41 +10,230 @@ import List from './component/List'; import { DatasetContext } from './context'; import DatasetContextProvider from './context'; import { useContextSelector } from 'use-context-selector'; +import MyMenu from '@fastgpt/web/components/common/MyMenu'; +import { AddIcon } from '@chakra-ui/icons'; +import { useUserStore } from '@/web/support/user/useUserStore'; +import MyIcon from '@fastgpt/web/components/common/Icon'; +import { FolderIcon, FolderImgUrl } from '@fastgpt/global/common/file/image/constants'; +import { EditFolderFormType } from '@fastgpt/web/components/common/MyModal/EditFolderModal'; +import dynamic from 'next/dynamic'; +import { postCreateDataset, putDatasetById } from '@/web/core/dataset/api'; +import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants'; +import FolderSlideCard from '@/components/common/folder/SlideCard'; +import { useSystemStore } from '@/web/common/system/useSystemStore'; +import { + DatasetDefaultPermission, + DatasetPermissionList +} from '@fastgpt/global/support/permission/dataset/constant'; +import { + postUpdateDatasetCollaborators, + deleteDatasetCollaborators, + getCollaboratorList +} from '@/web/core/dataset/api/collaborator'; + +const EditFolderModal = dynamic( + () => import('@fastgpt/web/components/common/MyModal/EditFolderModal') +); + +const CreateModal = dynamic(() => import('./component/CreateModal')); const Dataset = () => { + const { isPc } = useSystemStore(); const { t } = useTranslation(); const router = useRouter(); + const { parentId } = router.query as { parentId: string }; + const { myDatasets } = useDatasetStore(); - const { paths, isFetchingDatasets } = useContextSelector(DatasetContext, (v) => v); + const { + paths, + isFetchingDatasets, + refetchPaths, + refetchDatasets, + folderDetail, + setEditedDataset, + setMoveDatasetId, + onDelDataset + } = useContextSelector(DatasetContext, (v) => v); + const { userInfo } = useUserStore(); + + const [editFolderData, setEditFolderData] = useState(); + + const { + isOpen: isOpenCreateModal, + onOpen: onOpenCreateModal, + onClose: onCloseCreateModal + } = useDisclosure(); return ( - - {/* url path */} - - {''} - - {t('core.dataset.My Dataset')} - - - } - onClick={(e) => { - router.push({ - query: { - parentId: e + + + + + {''} + + {t('core.dataset.My Dataset')} + + } - }); + onClick={(e) => { + router.push({ + query: { + parentId: e + } + }); + }} + /> + {userInfo?.team?.permission.hasWritePer && ( + + + + {t('common.Create New')} + + + } + menuList={[ + { + children: [ + { + label: ( + + + {t('Folder')} + + ), + onClick: () => setEditFolderData({}) + }, + { + label: ( + + {''} + {t('core.dataset.Dataset')} + + ), + onClick: onOpenCreateModal + } + ] + } + ]} + /> + )} + + + + + + + {!!folderDetail && isPc && ( + + { + setEditedDataset({ + id: folderDetail._id, + name: folderDetail.name, + intro: folderDetail.intro + }); + }} + onMove={() => setMoveDatasetId(folderDetail._id)} + deleteTip={t('dataset.deleteFolderTips')} + onDelete={() => + onDelDataset(folderDetail._id).then(() => { + router.replace({ + query: { + ...router.query, + parentId: folderDetail.parentId + } + }); + }) + } + defaultPer={{ + value: folderDetail.defaultPermission, + defaultValue: DatasetDefaultPermission, + onChange: (e) => { + return putDatasetById({ + id: folderDetail._id, + defaultPermission: e + }); + } + }} + managePer={{ + permission: folderDetail.permission, + onGetCollaboratorList: () => getCollaboratorList(folderDetail._id), + permissionList: DatasetPermissionList, + onUpdateCollaborators: ({ + tmbIds, + permission + }: { + tmbIds: string[]; + permission: number; + }) => { + return postUpdateDatasetCollaborators({ + tmbIds, + permission, + datasetId: folderDetail._id + }); + }, + onDelOneCollaborator: (tmbId: string) => + deleteDatasetCollaborators({ + datasetId: folderDetail._id, + tmbId + }) + }} + /> + + )} + + + {!!editFolderData && ( + setEditFolderData(undefined)} + onCreate={async ({ name }) => { + try { + await postCreateDataset({ + parentId: parentId || undefined, + name, + type: DatasetTypeEnum.folder, + avatar: FolderImgUrl, + intro: '' + }); + refetchDatasets(); + refetchPaths(); + } catch (error) { + return Promise.reject(error); + } + }} + onEdit={async ({ name, intro, id }) => { + try { + await putDatasetById({ + id, + name, + intro + }); + refetchDatasets(); + refetchPaths(); + } catch (error) { + return Promise.reject(error); + } }} /> - - + )} + {isOpenCreateModal && ( + + )} ); }; diff --git a/projects/app/src/web/core/dataset/api.ts b/projects/app/src/web/core/dataset/api.ts index 0c0c336e7..d578daba5 100644 --- a/projects/app/src/web/core/dataset/api.ts +++ b/projects/app/src/web/core/dataset/api.ts @@ -51,8 +51,8 @@ import type { import type { readCollectionSourceResponse } from '@/pages/api/core/dataset/collection/read'; /* ======================== dataset ======================= */ -export const getDatasets = (data: { parentId?: string; type?: DatasetTypeEnum }) => - GET(`/core/dataset/list`, data); +export const getDatasets = (data: { parentId?: ParentIdType; type?: DatasetTypeEnum }) => + POST(`/core/dataset/list`, data); /** * get type=dataset list