External dataset (#1485)

* fix: revert version

* feat: external collection

* import context

* external ui

* doc

* fix: ts

* clear invalid data

* feat: rename sub name

* fix: node if else edge remove

* fix: init

* api size

* fix: if else node refresh
This commit is contained in:
Archer
2024-05-15 10:19:51 +08:00
committed by GitHub
parent fb04889a31
commit cd876251b7
74 changed files with 1882 additions and 1353 deletions

View File

@@ -1,4 +1,4 @@
import React, { useCallback, useMemo } from 'react';
import React from 'react';
import { useRouter } from 'next/router';
import { Box } from '@chakra-ui/react';
import { useToast } from '@fastgpt/web/hooks/useToast';
@@ -9,15 +9,17 @@ import PageContainer from '@/components/PageContainer';
import { serviceSideProps } from '@/web/common/utils/i18n';
import { useTranslation } from 'next-i18next';
import CollectionCard from './components/CollectionCard';
import { useDatasetStore } from '@/web/core/dataset/store/dataset';
import { useConfirm } from '@fastgpt/web/hooks/useConfirm';
import Head from 'next/head';
import Slider from './components/Slider';
import MyBox from '@fastgpt/web/components/common/MyBox';
import { DatasetPageContextProvider } from '@/web/core/dataset/context/datasetPageContext';
import {
DatasetPageContext,
DatasetPageContextProvider
} from '@/web/core/dataset/context/datasetPageContext';
import CollectionPageContextProvider from './components/CollectionCard/Context';
import { useContextSelector } from 'use-context-selector';
import NextHead from '@/components/common/NextHead';
const CollectionCard = dynamic(() => import('./components/CollectionCard/index'));
const DataCard = dynamic(() => import('./components/DataCard'));
const Test = dynamic(() => import('./components/Test'));
const Info = dynamic(() => import('./components/Info'));
@@ -30,16 +32,14 @@ export enum TabEnum {
info = 'info',
import = 'import'
}
type Props = { datasetId: string; currentTab: TabEnum };
const Detail = ({ datasetId, currentTab }: { datasetId: string; currentTab: TabEnum }) => {
const Detail = ({ datasetId, currentTab }: Props) => {
const { t } = useTranslation();
const { toast } = useToast();
const router = useRouter();
const { datasetDetail, loadDatasetDetail } = useDatasetStore();
const { ConfirmModal: ConfirmSyncModal, openConfirm: openConfirmSync } = useConfirm({
type: 'common'
});
const datasetDetail = useContextSelector(DatasetPageContext, (v) => v.datasetDetail);
const loadDatasetDetail = useContextSelector(DatasetPageContext, (v) => v.loadDatasetDetail);
useQuery([datasetId], () => loadDatasetDetail(datasetId), {
onError(err: any) {
@@ -53,36 +53,37 @@ const Detail = ({ datasetId, currentTab }: { datasetId: string; currentTab: TabE
return (
<>
<Head>
<title>{datasetDetail?.name}</title>
</Head>
<DatasetPageContextProvider
value={{
datasetId
}}
>
<PageContainer>
<MyBox display={'flex'} flexDirection={['column', 'row']} h={'100%'} pt={[4, 0]}>
<Slider currentTab={currentTab} />
<NextHead title={datasetDetail?.name} icon={datasetDetail?.avatar} />
<PageContainer>
<MyBox display={'flex'} flexDirection={['column', 'row']} h={'100%'} pt={[4, 0]}>
<Slider currentTab={currentTab} />
{!!datasetDetail._id && (
<Box flex={'1 0 0'} pb={0}>
{currentTab === TabEnum.collectionCard && <CollectionCard />}
{currentTab === TabEnum.dataCard && <DataCard />}
{currentTab === TabEnum.test && <Test datasetId={datasetId} />}
{currentTab === TabEnum.info && <Info datasetId={datasetId} />}
{currentTab === TabEnum.import && <Import />}
</Box>
)}
</MyBox>
</PageContainer>
</DatasetPageContextProvider>
<ConfirmSyncModal />
{!!datasetDetail._id && (
<Box flex={'1 0 0'} pb={0}>
{currentTab === TabEnum.collectionCard && (
<CollectionPageContextProvider>
<CollectionCard />
</CollectionPageContextProvider>
)}
{currentTab === TabEnum.dataCard && <DataCard />}
{currentTab === TabEnum.test && <Test datasetId={datasetId} />}
{currentTab === TabEnum.info && <Info datasetId={datasetId} />}
{currentTab === TabEnum.import && <Import />}
</Box>
)}
</MyBox>
</PageContainer>
</>
);
};
const Render = (data: Props) => (
<DatasetPageContextProvider datasetId={data.datasetId}>
<Detail {...data} />
</DatasetPageContextProvider>
);
export default Render;
export async function getServerSideProps(context: any) {
const currentTab = context?.query?.currentTab || TabEnum.collectionCard;
const datasetId = context?.query?.datasetId;
@@ -91,5 +92,3 @@ export async function getServerSideProps(context: any) {
props: { currentTab, datasetId, ...(await serviceSideProps(context, ['dataset', 'file'])) }
};
}
export default React.memo(Detail);