import React, { useCallback, useMemo, useState } from 'react'; import { Box, Flex, Image, Button, useDisclosure, InputGroup, InputLeftElement, Input } 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'; import { CreateDatasetType } from './component/CreateModal'; import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants'; import { useToast } from '@fastgpt/web/hooks/useToast'; import MyBox from '@fastgpt/web/components/common/MyBox'; 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, searchKey, setSearchKey } = useContextSelector(DatasetsContext, (v) => v); const { userInfo } = useUserStore(); const { toast } = useToast(); const [editFolderData, setEditFolderData] = useState(); const [createDatasetType, setCreateDatasetType] = useState(); const onSelectDatasetType = useCallback( (e: CreateDatasetType) => { if ( !feConfigs?.isPlus && (e === DatasetTypeEnum.websiteDataset || e === DatasetTypeEnum.externalFile) ) { return toast({ status: 'warning', title: t('common:common.system.Commercial version function') }); } setCreateDatasetType(e); }, [t, toast] ); const RenderSearchInput = useMemo( () => ( setSearchKey(e.target.value)} placeholder={t('common:dataset.dataset_name')} maxLength={30} bg={'white'} /> ), [searchKey, setSearchKey, t] ); return ( {t('common:core.dataset.My Dataset')} } onClick={(e) => { router.push({ query: { parentId: e } }); }} /> {isPc && RenderSearchInput} {userInfo?.team?.permission.hasWritePer && ( {t('common:common.Create New')} } menuList={[ { children: [ { icon: 'core/dataset/commonDatasetColor', label: t('dataset:common_dataset'), description: t('dataset:common_dataset_desc'), onClick: () => setCreateDatasetType(DatasetTypeEnum.dataset) }, { icon: 'core/dataset/websiteDatasetColor', label: t('dataset:website_dataset'), description: t('dataset:website_dataset_desc'), onClick: () => setCreateDatasetType(DatasetTypeEnum.websiteDataset) }, { icon: 'core/dataset/externalDatasetColor', label: t('dataset:external_file'), description: t('dataset:external_file_dataset_desc'), onClick: () => setCreateDatasetType(DatasetTypeEnum.externalFile) } ] }, { children: [ { icon: FolderIcon, label: t('common:Folder'), onClick: () => setEditFolderData({}) } ] } ]} /> )} {!isPc && {RenderSearchInput}} {!!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); } }} /> )} {createDatasetType && ( setCreateDatasetType(undefined)} parentId={parentId || undefined} /> )} ); }; export async function getServerSideProps(content: any) { return { props: { ...(await serviceSideProps(content, ['dataset', 'user'])) } }; } function DatasetContextWrapper() { return ( ); } export default DatasetContextWrapper;