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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user