Dataset frontend style adjusting (#1820)

* feat: dataset controllers

feat: dataset schema

fix: add missing type to dataset schema
Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: use new auth method

Signed-off-by: FinleyGe <m13203533462@163.com>

* feat: finish the dataset permission

fix: ts errors
Signed-off-by: FinleyGe <m13203533462@163.com>

* chore: adjust the code

* chore: adjust the code

* chore: dataset fe adjusting

* fix: double delete confirm

---------

Signed-off-by: FinleyGe <m13203533462@163.com>
This commit is contained in:
Finley Ge
2024-06-24 14:58:44 +08:00
committed by GitHub
parent a9ab9ebe8e
commit 4a33e04a08
11 changed files with 12200 additions and 9324 deletions

View File

@@ -1,58 +1,109 @@
import { getDatasetPaths } from '@/web/core/dataset/api';
import { getDatasetPaths, putDatasetById } from '@/web/core/dataset/api';
import { useDatasetStore } from '@/web/core/dataset/store/dataset';
import { getErrText } from '@fastgpt/global/common/error/utils';
import { ParentTreePathItemType } from '@fastgpt/global/common/parentFolder/type';
import { useToast } from '@fastgpt/web/hooks/useToast';
import { useQuery } from '@tanstack/react-query';
import { useTranslation } from 'next-i18next';
import {
GetResourceFolderListProps,
ParentIdType,
ParentTreePathItemType
} from '@fastgpt/global/common/parentFolder/type';
import { useRouter } from 'next/router';
import React from 'react';
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 { DatasetUpdateBody } from '@fastgpt/global/core/dataset/api';
import dynamic from 'next/dynamic';
const MoveModal = dynamic(() => import('@/components/common/folder/MoveModal'));
export type DatasetContextType = {
refetch: () => void;
isFetching: boolean;
refetchDatasets: () => void;
refetchPaths: () => void;
isFetchingDatasets: boolean;
setMoveDatasetId: (id: string) => void;
paths: ParentTreePathItemType[];
};
export const DatasetContext = createContext<DatasetContextType>({
refetch: () => {},
isFetching: false,
refetchDatasets: () => {},
isFetchingDatasets: false,
setMoveDatasetId: () => {},
refetchPaths: () => {},
paths: []
});
function DatasetContextProvider({ children }: { children: React.ReactNode }) {
const router = useRouter();
const { toast } = useToast();
const { t } = useTranslation();
const { commonT } = useI18n();
const { parentId } = router.query as { parentId: string };
const { parentId = null } = router.query as { parentId?: string | null };
const { loadMyDatasets } = useDatasetStore();
const { data, refetch, isFetching } = useQuery(
['loadDataset', parentId],
() => {
return Promise.all([loadMyDatasets(parentId), getDatasetPaths(parentId)]);
},
const getDatasetFolderList = useCallback(async ({ parentId }: GetResourceFolderListProps) => {
const res = await getDatasetPaths(parentId);
return res.map((item) => ({
id: item.parentId,
name: item.parentName
}));
}, []);
const { data: paths = [], runAsync: refetchPaths } = useRequest2(
() => getDatasetPaths(parentId),
{
onError(err) {
toast({
status: 'error',
title: t(getErrText(err))
});
}
manual: false,
refreshDeps: [parentId]
}
);
const paths = data?.[1] || [];
const { runAsync: refetchDatasets, loading: isFetchingDatasets } = useRequest2(
() => loadMyDatasets(parentId ?? undefined),
{
manual: false,
refreshDeps: [parentId]
}
);
const [moveDatasetId, setMoveDatasetId] = useState<string>();
const { runAsync: onUpdateDataset } = useRequest2((data: DatasetUpdateBody) =>
putDatasetById(data).then(async (res) => {
await Promise.all([refetchDatasets(), refetchPaths()]);
return res;
})
);
const onMoveDataset = useCallback(
async (parentId: ParentIdType) => {
if (!moveDatasetId) return;
await onUpdateDataset({
id: moveDatasetId,
parentId
});
},
[moveDatasetId, onUpdateDataset]
);
const contextValue = {
refetch,
isFetching,
paths
refetchDatasets,
isFetchingDatasets,
setMoveDatasetId,
paths,
refetchPaths
};
return <DatasetContext.Provider value={contextValue}>{children}</DatasetContext.Provider>;
return (
<DatasetContext.Provider value={contextValue}>
{children}
{!!moveDatasetId && (
<MoveModal
moveResourceId={moveDatasetId}
server={getDatasetFolderList}
title={commonT('Move')}
onClose={() => setMoveDatasetId(undefined)}
onConfirm={onMoveDataset}
/>
)}
</DatasetContext.Provider>
);
}
export default DatasetContextProvider;