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'; import { serviceSideProps } from '@/web/common/utils/i18n'; import ParentPaths from '@/components/common/folder/Path'; import List from './component/List'; import { DatasetsContext } 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 } from '@fastgpt/global/common/file/image/constants'; import { EditFolderFormType } from '@fastgpt/web/components/common/MyModal/EditFolderModal'; import dynamic from 'next/dynamic'; import { postCreateDatasetFolder, resumeInheritPer } from '@/web/core/dataset/api'; import FolderSlideCard from '@/components/common/folder/SlideCard'; import { DatasetDefaultPermissionVal, DatasetPermissionList } from '@fastgpt/global/support/permission/dataset/constant'; import { postUpdateDatasetCollaborators, deleteDatasetCollaborators, getCollaboratorList } from '@/web/core/dataset/api/collaborator'; import { useSystem } from '@fastgpt/web/hooks/useSystem'; const EditFolderModal = dynamic( () => import('@fastgpt/web/components/common/MyModal/EditFolderModal') ); const CreateModal = dynamic(() => import('./component/CreateModal')); const Dataset = () => { const { isPc } = useSystem(); const { t } = useTranslation(); const router = useRouter(); const { parentId } = router.query as { parentId: string }; const { myDatasets, paths, isFetchingDatasets, refetchPaths, loadMyDatasets, refetchFolderDetail, folderDetail, setEditedDataset, setMoveDatasetId, onDelDataset, onUpdateDataset } = useContextSelector(DatasetsContext, (v) => v); const { userInfo } = useUserStore(); const [editFolderData, setEditFolderData] = useState(); const { isOpen: isOpenCreateModal, onOpen: onOpenCreateModal, onClose: onCloseCreateModal } = useDisclosure(); return ( {''} {t('common:core.dataset.My Dataset')} } onClick={(e) => { router.push({ query: { parentId: e } }); }} /> {userInfo?.team?.permission.hasWritePer && ( {t('common:common.Create New')} } menuList={[ { children: [ { label: ( {t('common:Folder')} ), onClick: () => setEditFolderData({}) }, { label: ( {''} {t('common:core.dataset.Dataset')} ), onClick: onOpenCreateModal } ] } ]} /> )} {!!folderDetail && isPc && ( resumeInheritPer(folderDetail._id)} isInheritPermission={folderDetail.inheritPermission} hasParent={!!folderDetail.parentId} refetchResource={() => Promise.all([refetchFolderDetail(), loadMyDatasets()])} refreshDeps={[folderDetail._id, folderDetail.inheritPermission]} name={folderDetail.name} intro={folderDetail.intro} onEdit={() => { setEditedDataset({ id: folderDetail._id, name: folderDetail.name, intro: folderDetail.intro }); }} onMove={() => setMoveDatasetId(folderDetail._id)} deleteTip={t('common:dataset.deleteFolderTips')} onDelete={() => onDelDataset(folderDetail._id).then(() => { router.replace({ query: { ...router.query, parentId: folderDetail.parentId } }); }) } defaultPer={{ value: folderDetail.defaultPermission, defaultValue: DatasetDefaultPermissionVal, onChange: (e) => { return onUpdateDataset({ 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 }), refreshDeps: [folderDetail._id, folderDetail.inheritPermission] }} /> )} {!!editFolderData && ( setEditFolderData(undefined)} onCreate={async ({ name, intro }) => { try { await postCreateDatasetFolder({ parentId: parentId || undefined, name, intro: intro ?? '' }); loadMyDatasets(); refetchPaths(); } catch (error) { return Promise.reject(error); } }} onEdit={async ({ name, intro, id }) => { try { await onUpdateDataset({ id, name, intro }); } catch (error) { return Promise.reject(error); } }} /> )} {isOpenCreateModal && ( )} ); }; export async function getServerSideProps(content: any) { return { props: { ...(await serviceSideProps(content, ['dataset', 'user'])) } }; } function DatasetContextWrapper() { return ( ); } export default DatasetContextWrapper;