From 15cd9e0b12200e7bd6f6e0becf1b83c7482a74c4 Mon Sep 17 00:00:00 2001 From: twwu Date: Thu, 10 Jul 2025 15:14:23 +0800 Subject: [PATCH] refactor: rename selectedFileList to selectedFileKeys across components and update related logic --- .../file-list/header/breadcrumbs/index.tsx | 14 ++-- .../online-drive/file-list/index.tsx | 6 +- .../online-drive/file-list/list/index.tsx | 6 +- .../data-source/online-drive/index.tsx | 32 +++++---- .../store/slices/online-document.ts | 12 ++-- .../data-source/store/slices/online-drive.ts | 23 ++++--- .../data-source/store/slices/website-crawl.ts | 12 ++-- .../data-source/website-crawl/index.tsx | 2 - .../documents/create-from-pipeline/hooks.ts | 15 ++-- .../documents/create-from-pipeline/index.tsx | 69 ++++++++++++------- .../preview/chunk-preview.tsx | 37 ++++++++-- .../components/panel/test-run/index.tsx | 10 +-- .../workflow/plugin-dependency/hooks.ts | 4 +- 13 files changed, 156 insertions(+), 86 deletions(-) diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/header/breadcrumbs/index.tsx b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/header/breadcrumbs/index.tsx index 7752b754d2..6e01f2123b 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/header/breadcrumbs/index.tsx +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/header/breadcrumbs/index.tsx @@ -51,9 +51,9 @@ const Breadcrumbs = ({ }, [displayBreadcrumbNum, prefix]) const handleBackToBucketList = useCallback(() => { - const { setFileList, setSelectedFileList, setPrefix, setBucket } = dataSourceStore.getState() + const { setFileList, setSelectedFileKeys, setPrefix, setBucket } = dataSourceStore.getState() setFileList([]) - setSelectedFileList([]) + setSelectedFileKeys([]) setBucket('') setPrefix([]) getOnlineDriveFiles({ @@ -64,9 +64,9 @@ const Breadcrumbs = ({ }, [dataSourceStore, getOnlineDriveFiles]) const handleClickBucketName = useCallback(() => { - const { setFileList, setSelectedFileList, setPrefix } = dataSourceStore.getState() + const { setFileList, setSelectedFileKeys, setPrefix } = dataSourceStore.getState() setFileList([]) - setSelectedFileList([]) + setSelectedFileKeys([]) setPrefix([]) getOnlineDriveFiles({ prefix: [], @@ -75,16 +75,16 @@ const Breadcrumbs = ({ }, [dataSourceStore, getOnlineDriveFiles]) const handleClickBreadcrumb = useCallback((index: number) => { - const { setFileList, setSelectedFileList, setPrefix } = dataSourceStore.getState() + const { prefix, setFileList, setSelectedFileKeys, setPrefix } = dataSourceStore.getState() const newPrefix = prefix.slice(0, index + 1) setFileList([]) - setSelectedFileList([]) + setSelectedFileKeys([]) setPrefix(newPrefix) getOnlineDriveFiles({ prefix: newPrefix, fileList: [], }) - }, [dataSourceStore, getOnlineDriveFiles, prefix]) + }, [dataSourceStore, getOnlineDriveFiles]) return (
diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/index.tsx b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/index.tsx index cbe565e56d..a8aa23066b 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/index.tsx +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/index.tsx @@ -6,7 +6,7 @@ import { useDebounceFn } from 'ahooks' type FileListProps = { fileList: OnlineDriveFile[] - selectedFileList: string[] + selectedFileKeys: string[] prefix: string[] keywords: string bucket: string @@ -27,7 +27,7 @@ type FileListProps = { const FileList = ({ fileList, - selectedFileList, + selectedFileKeys, prefix, keywords, bucket, @@ -75,7 +75,7 @@ const FileList = ({ /> { fileList.map((file) => { - const isSelected = selectedFileList.includes(file.key) + const isSelected = selectedFileKeys.includes(file.key) return ( state.prefix) const keywords = useDataSourceStoreWithSelector(state => state.keywords) const bucket = useDataSourceStoreWithSelector(state => state.bucket) - const selectedFileList = useDataSourceStoreWithSelector(state => state.selectedFileList) + const selectedFileKeys = useDataSourceStoreWithSelector(state => state.selectedFileKeys) const fileList = useDataSourceStoreWithSelector(state => state.fileList) const currentNodeIdRef = useDataSourceStoreWithSelector(state => state.currentNodeIdRef) const dataSourceStore = useDataSourceStore() @@ -43,7 +43,7 @@ const OnlineDrive = ({ startAfter?: string fileList?: OnlineDriveFile[] }) => { - const { startAfter } = dataSourceStore.getState() + const { startAfter, prefix, bucket, fileList } = dataSourceStore.getState() const _prefix = params.prefix ?? prefix const _bucket = params.bucket ?? bucket const _startAfter = params.startAfter ?? startAfter.current @@ -80,16 +80,22 @@ const OnlineDrive = ({ }, }, ) - }, [prefix, bucket, datasourceNodeRunURL, dataSourceStore, fileList]) + }, [datasourceNodeRunURL, dataSourceStore]) useEffect(() => { if (nodeId !== currentNodeIdRef.current) { - const { setFileList, setBucket, setPrefix, setKeywords, setSelectedFileList } = dataSourceStore.getState() + const { + setFileList, + setBucket, + setPrefix, + setKeywords, + setSelectedFileKeys, + } = dataSourceStore.getState() setFileList([]) setBucket('') setPrefix([]) setKeywords('') - setSelectedFileList([]) + setSelectedFileKeys([]) currentNodeIdRef.current = nodeId getOnlineDriveFiles({ prefix: [], @@ -124,9 +130,9 @@ const OnlineDrive = ({ }, [dataSourceStore]) const handleSelectFile = useCallback((file: OnlineDriveFile) => { - const { setSelectedFileList } = dataSourceStore.getState() + const { selectedFileKeys, setSelectedFileKeys } = dataSourceStore.getState() if (file.type === OnlineDriveFileType.bucket) return - const newSelectedFileList = produce(selectedFileList, (draft) => { + const newSelectedFileList = produce(selectedFileKeys, (draft) => { if (draft.includes(file.key)) { const index = draft.indexOf(file.key) draft.splice(index, 1) @@ -136,11 +142,11 @@ const OnlineDrive = ({ draft.push(file.key) } }) - setSelectedFileList(newSelectedFileList) - }, [dataSourceStore, isInPipeline, selectedFileList]) + setSelectedFileKeys(newSelectedFileList) + }, [dataSourceStore, isInPipeline]) const handleOpenFolder = useCallback((file: OnlineDriveFile) => { - const { setPrefix, setBucket, setFileList, setSelectedFileList } = dataSourceStore.getState() + const { prefix, setPrefix, setBucket, setFileList, setSelectedFileKeys } = dataSourceStore.getState() if (file.type === OnlineDriveFileType.file) return setFileList([]) if (file.type === OnlineDriveFileType.bucket) { @@ -148,7 +154,7 @@ const OnlineDrive = ({ getOnlineDriveFiles({ bucket: file.displayName, fileList: [] }) } else { - setSelectedFileList([]) + setSelectedFileKeys([]) const displayName = file.displayName.endsWith('/') ? file.displayName.slice(0, -1) : file.displayName const newPrefix = produce(prefix, (draft) => { draft.push(displayName) @@ -156,7 +162,7 @@ const OnlineDrive = ({ setPrefix(newPrefix) getOnlineDriveFiles({ prefix: newPrefix, fileList: [] }) } - }, [dataSourceStore, getOnlineDriveFiles, prefix]) + }, [dataSourceStore, getOnlineDriveFiles]) return (
@@ -166,7 +172,7 @@ const OnlineDrive = ({ /> } -export const createOnlineDocumentSlice: StateCreator = (set) => { +export const createOnlineDocumentSlice: StateCreator = (set, get) => { return ({ documentsData: [], setDocumentsData: (documentsData: DataSourceNotionWorkspace[]) => set(() => ({ @@ -32,9 +32,13 @@ export const createOnlineDocumentSlice: StateCreator = currentWorkspaceId: workspaceId, })), onlineDocuments: [], - setOnlineDocuments: (documents: NotionPage[]) => set(() => ({ - onlineDocuments: documents, - })), + setOnlineDocuments: (documents: NotionPage[]) => { + set(() => ({ + onlineDocuments: documents, + })) + const { previewOnlineDocumentRef } = get() + previewOnlineDocumentRef.current = documents[0] + }, currentDocument: undefined, setCurrentDocument: (document: NotionPage | undefined) => set(() => ({ currentDocument: document, diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/store/slices/online-drive.ts b/web/app/components/datasets/documents/create-from-pipeline/data-source/store/slices/online-drive.ts index 186f23fcc4..46d83599ab 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/store/slices/online-drive.ts +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/store/slices/online-drive.ts @@ -6,17 +6,18 @@ export type OnlineDriveSliceShape = { setPrefix: (prefix: string[]) => void keywords: string setKeywords: (keywords: string) => void - selectedFileList: string[] - setSelectedFileList: (selectedFileList: string[]) => void + selectedFileKeys: string[] + setSelectedFileKeys: (selectedFileKeys: string[]) => void fileList: OnlineDriveFile[] setFileList: (fileList: OnlineDriveFile[]) => void bucket: string setBucket: (bucket: string) => void startAfter: React.MutableRefObject isTruncated: React.MutableRefObject + previewOnlineDriveFileRef: React.MutableRefObject } -export const createOnlineDriveSlice: StateCreator = (set) => { +export const createOnlineDriveSlice: StateCreator = (set, get) => { return ({ prefix: [], setPrefix: (prefix: string[]) => set(() => ({ @@ -26,11 +27,15 @@ export const createOnlineDriveSlice: StateCreator = (set) setKeywords: (keywords: string) => set(() => ({ keywords, })), - startAfter: { current: '' }, - selectedFileList: [], - setSelectedFileList: (selectedFileList: string[]) => set(() => ({ - selectedFileList, - })), + selectedFileKeys: [], + setSelectedFileKeys: (selectedFileKeys: string[]) => { + set(() => ({ + selectedFileKeys, + })) + const key = selectedFileKeys[0] + const { fileList, previewOnlineDriveFileRef } = get() + previewOnlineDriveFileRef.current = fileList.find(file => file.key === key) + }, fileList: [], setFileList: (fileList: OnlineDriveFile[]) => set(() => ({ fileList, @@ -39,6 +44,8 @@ export const createOnlineDriveSlice: StateCreator = (set) setBucket: (bucket: string) => set(() => ({ bucket, })), + startAfter: { current: '' }, isTruncated: { current: false }, + previewOnlineDriveFileRef: { current: undefined }, }) } diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/store/slices/website-crawl.ts b/web/app/components/datasets/documents/create-from-pipeline/data-source/store/slices/website-crawl.ts index a40acd4f48..5286e5eef9 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/store/slices/website-crawl.ts +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/store/slices/website-crawl.ts @@ -16,12 +16,16 @@ export type WebsiteCrawlSliceShape = { previewWebsitePageRef: React.MutableRefObject } -export const createWebsiteCrawlSlice: StateCreator = (set) => { +export const createWebsiteCrawlSlice: StateCreator = (set, get) => { return ({ websitePages: [], - setWebsitePages: (pages: CrawlResultItem[]) => set(() => ({ - websitePages: pages, - })), + setWebsitePages: (pages: CrawlResultItem[]) => { + set(() => ({ + websitePages: pages, + })) + const { previewWebsitePageRef } = get() + previewWebsitePageRef.current = pages[0] + }, currentWebsite: undefined, setCurrentWebsite: (website: CrawlResultItem | undefined) => set(() => ({ currentWebsite: website, diff --git a/web/app/components/datasets/documents/create-from-pipeline/data-source/website-crawl/index.tsx b/web/app/components/datasets/documents/create-from-pipeline/data-source/website-crawl/index.tsx index d28e1cbf55..7b925c32a6 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/data-source/website-crawl/index.tsx +++ b/web/app/components/datasets/documents/create-from-pipeline/data-source/website-crawl/index.tsx @@ -67,7 +67,6 @@ const WebsiteCrawl = ({ setPreviewIndex, setCurrentWebsite, currentNodeIdRef, - previewWebsitePageRef, } = dataSourceStore.getState() if (nodeId !== currentNodeIdRef.current) { setStep(CrawlStep.init) @@ -75,7 +74,6 @@ const WebsiteCrawl = ({ setCurrentWebsite(undefined) setWebsitePages([]) setPreviewIndex(0) - previewWebsitePageRef.current = undefined setCrawledNum(0) setTotalNum(0) setCrawlErrorMessage('') diff --git a/web/app/components/datasets/documents/create-from-pipeline/hooks.ts b/web/app/components/datasets/documents/create-from-pipeline/hooks.ts index 7a77b7a08b..6007402cc8 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/hooks.ts +++ b/web/app/components/datasets/documents/create-from-pipeline/hooks.ts @@ -63,7 +63,6 @@ export const useDatasourceOptions = (pipelineNodes: Node[]) export const useLocalFile = () => { const fileList = useDataSourceStoreWithSelector(state => state.localFileList) - const previewFileRef = useDataSourceStoreWithSelector(state => state.previewLocalFileRef) const currentLocalFile = useDataSourceStoreWithSelector(state => state.currentLocalFile) const dataSourceStore = useDataSourceStore() @@ -76,7 +75,6 @@ export const useLocalFile = () => { return { fileList, - previewFileRef, allFileLoaded, currentLocalFile, hidePreviewLocalFile, @@ -87,7 +85,6 @@ export const useOnlineDocuments = () => { const documentsData = useDataSourceStoreWithSelector(state => state.documentsData) const currentWorkspaceId = useDataSourceStoreWithSelector(state => state.currentWorkspaceId) const onlineDocuments = useDataSourceStoreWithSelector(state => state.onlineDocuments) - const previewOnlineDocumentRef = useDataSourceStoreWithSelector(state => state.previewOnlineDocumentRef) const currentDocument = useDataSourceStoreWithSelector(state => state.currentDocument) const dataSourceStore = useDataSourceStore() @@ -117,7 +114,6 @@ export const useOnlineDocuments = () => { onlineDocuments, currentDocument, PagesMapAndSelectedPagesId, - previewOnlineDocumentRef, hidePreviewOnlineDocument, } } @@ -125,7 +121,6 @@ export const useOnlineDocuments = () => { export const useWebsiteCrawl = () => { const websitePages = useDataSourceStoreWithSelector(state => state.websitePages) const currentWebsite = useDataSourceStoreWithSelector(state => state.currentWebsite) - const previewWebsitePageRef = useDataSourceStoreWithSelector(state => state.previewWebsitePageRef) const dataSourceStore = useDataSourceStore() const hideWebsitePreview = useCallback(() => { @@ -136,7 +131,6 @@ export const useWebsiteCrawl = () => { return { websitePages, - previewWebsitePageRef, currentWebsite, hideWebsitePreview, } @@ -144,10 +138,15 @@ export const useWebsiteCrawl = () => { export const useOnlineDrive = () => { const fileList = useDataSourceStoreWithSelector(state => state.fileList) - const selectedFileList = useDataSourceStoreWithSelector(state => state.selectedFileList) + const selectedFileKeys = useDataSourceStoreWithSelector(state => state.selectedFileKeys) + + const selectedOnlineDriveFileList = useMemo(() => { + return selectedFileKeys.map(key => fileList.find(item => item.key === key)!) + }, [fileList, selectedFileKeys]) return { fileList, - selectedFileList, + selectedFileKeys, + selectedOnlineDriveFileList, } } diff --git a/web/app/components/datasets/documents/create-from-pipeline/index.tsx b/web/app/components/datasets/documents/create-from-pipeline/index.tsx index aef577c74b..c80c6a510d 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/index.tsx +++ b/web/app/components/datasets/documents/create-from-pipeline/index.tsx @@ -24,7 +24,7 @@ import WebsitePreview from './preview/web-preview' import ProcessDocuments from './process-documents' import ChunkPreview from './preview/chunk-preview' import Processing from './processing' -import type { InitialDocumentDetail, PublishedPipelineRunPreviewResponse, PublishedPipelineRunResponse } from '@/models/pipeline' +import type { InitialDocumentDetail, OnlineDriveFile, PublishedPipelineRunPreviewResponse, PublishedPipelineRunResponse } from '@/models/pipeline' import { DatasourceType } from '@/models/pipeline' import { TransferMethod } from '@/types/app' import { useAddDocumentsSteps, useLocalFile, useOnlineDocuments, useOnlineDrive, useWebsiteCrawl } from './hooks' @@ -57,7 +57,6 @@ const CreateFormPipeline = () => { } = useAddDocumentsSteps() const { fileList, - previewFileRef, allFileLoaded, currentLocalFile, hidePreviewLocalFile, @@ -67,18 +66,17 @@ const CreateFormPipeline = () => { onlineDocuments, currentDocument, PagesMapAndSelectedPagesId, - previewOnlineDocumentRef, hidePreviewOnlineDocument, } = useOnlineDocuments() const { websitePages, - previewWebsitePageRef, currentWebsite, hideWebsitePreview, } = useWebsiteCrawl() const { fileList: onlineDriveFileList, - selectedFileList, + selectedFileKeys, + selectedOnlineDriveFileList, } = useOnlineDrive() const datasourceType = datasource?.nodeData.provider_type @@ -107,9 +105,9 @@ const CreateFormPipeline = () => { if (datasourceType === DatasourceType.websiteCrawl) return isShowVectorSpaceFull || !websitePages.length if (datasourceType === DatasourceType.onlineDrive) - return isShowVectorSpaceFull || !selectedFileList.length + return isShowVectorSpaceFull || !selectedFileKeys.length return false - }, [datasource, datasourceType, isShowVectorSpaceFull, fileList.length, allFileLoaded, onlineDocuments.length, websitePages.length, selectedFileList.length]) + }, [datasource, datasourceType, isShowVectorSpaceFull, fileList.length, allFileLoaded, onlineDocuments.length, websitePages.length, selectedFileKeys.length]) const fileUploadConfig = useMemo(() => fileUploadConfigResponse ?? { file_size_limit: 15, @@ -143,8 +141,8 @@ const CreateFormPipeline = () => { if (datasourceType === DatasourceType.onlineDocument) return onlineDocuments.length if (datasourceType === DatasourceType.onlineDrive) - return selectedFileList.length - }, [datasourceType, onlineDocuments.length, selectedFileList.length]) + return selectedFileKeys.length + }, [datasourceType, onlineDocuments.length, selectedFileKeys.length]) const tip = useMemo(() => { if (datasourceType === DatasourceType.onlineDocument) @@ -163,9 +161,15 @@ const CreateFormPipeline = () => { const handlePreviewChunks = useCallback(async (data: Record) => { if (!datasource) return + const { + previewLocalFileRef, + previewOnlineDocumentRef, + previewWebsitePageRef, + previewOnlineDriveFileRef, + } = dataSourceStore.getState() const datasourceInfoList: Record[] = [] if (datasourceType === DatasourceType.localFile) { - const { id, name, type, size, extension, mime_type } = previewFileRef.current as File + const { id, name, type, size, extension, mime_type } = previewLocalFileRef.current as File const documentInfo = { related_id: id, name, @@ -188,6 +192,14 @@ const CreateFormPipeline = () => { } if (datasourceType === DatasourceType.websiteCrawl) datasourceInfoList.push(previewWebsitePageRef.current!) + if (datasourceType === DatasourceType.onlineDrive) { + const { bucket } = dataSourceStore.getState() + const { key } = previewOnlineDriveFileRef.current! + datasourceInfoList.push({ + bucket, + key, + }) + } await runPublishedPipeline({ pipeline_id: pipelineId!, inputs: data, @@ -200,7 +212,7 @@ const CreateFormPipeline = () => { setEstimateData((res as PublishedPipelineRunPreviewResponse).data.outputs) }, }) - }, [datasource, datasourceType, previewWebsitePageRef, runPublishedPipeline, pipelineId, previewFileRef, previewOnlineDocumentRef]) + }, [datasource, datasourceType, runPublishedPipeline, pipelineId, dataSourceStore]) const handleProcess = useCallback(async (data: Record) => { if (!datasource) @@ -240,7 +252,7 @@ const CreateFormPipeline = () => { if (datasourceType === DatasourceType.onlineDrive) { if (datasourceType === DatasourceType.onlineDrive) { const { bucket } = dataSourceStore.getState() - selectedFileList.forEach((key) => { + selectedFileKeys.forEach((key) => { datasourceInfoList.push({ bucket, key, @@ -262,7 +274,7 @@ const CreateFormPipeline = () => { handleNextStep() }, }) - }, [dataSourceStore, datasource, datasourceType, fileList, handleNextStep, onlineDocuments, pipelineId, runPublishedPipeline, selectedFileList, websitePages]) + }, [dataSourceStore, datasource, datasourceType, fileList, handleNextStep, onlineDocuments, pipelineId, runPublishedPipeline, selectedFileKeys, websitePages]) const onClickProcess = useCallback(() => { isPreview.current = false @@ -279,22 +291,31 @@ const CreateFormPipeline = () => { }, [handlePreviewChunks, handleProcess]) const handlePreviewFileChange = useCallback((file: DocumentItem) => { - previewFileRef.current = file + const { previewLocalFileRef } = dataSourceStore.getState() + previewLocalFileRef.current = file onClickPreview() - }, [onClickPreview, previewFileRef]) + }, [dataSourceStore, onClickPreview]) const handlePreviewOnlineDocumentChange = useCallback((page: NotionPage) => { + const { previewOnlineDocumentRef } = dataSourceStore.getState() previewOnlineDocumentRef.current = page onClickPreview() - }, [onClickPreview, previewOnlineDocumentRef]) + }, [dataSourceStore, onClickPreview]) const handlePreviewWebsiteChange = useCallback((website: CrawlResultItem) => { + const { previewWebsitePageRef } = dataSourceStore.getState() previewWebsitePageRef.current = website onClickPreview() - }, [onClickPreview, previewWebsitePageRef]) + }, [dataSourceStore, onClickPreview]) + + const handlePreviewOnlineDriveFileChange = useCallback((file: OnlineDriveFile) => { + const { previewOnlineDriveFileRef } = dataSourceStore.getState() + previewOnlineDriveFileRef.current = file + onClickPreview() + }, [dataSourceStore, onClickPreview]) const handleSelectAll = useCallback(() => { - const { setOnlineDocuments, setSelectedFileList, setSelectedPagesId } = dataSourceStore.getState() + const { setOnlineDocuments, setSelectedFileKeys, setSelectedPagesId } = dataSourceStore.getState() if (datasourceType === DatasourceType.onlineDocument) { const allIds = currentWorkspace?.pages.map(page => page.page_id) || [] if (onlineDocuments.length < allIds.length) { @@ -311,12 +332,12 @@ const CreateFormPipeline = () => { const allKeys = onlineDriveFileList.filter((item) => { return item.type !== 'bucket' }).map(file => file.key) - if (selectedFileList.length < allKeys.length) - setSelectedFileList(allKeys) + if (selectedFileKeys.length < allKeys.length) + setSelectedFileKeys(allKeys) else - setSelectedFileList([]) + setSelectedFileKeys([]) } - }, [PagesMapAndSelectedPagesId, currentWorkspace?.pages, dataSourceStore, datasourceType, onlineDocuments.length, onlineDriveFileList, selectedFileList.length]) + }, [PagesMapAndSelectedPagesId, currentWorkspace?.pages, dataSourceStore, datasourceType, onlineDocuments.length, onlineDriveFileList, selectedFileKeys.length]) if (isFetchingPipelineInfo) { return ( @@ -440,9 +461,10 @@ const CreateFormPipeline = () => {
file.file)} + localFiles={fileList.map(file => file.file)} onlineDocuments={onlineDocuments} websitePages={websitePages} + onlineDriveFiles={selectedOnlineDriveFileList} isIdle={isIdle} isPending={isPending && isPreview.current} estimateData={estimateData} @@ -450,6 +472,7 @@ const CreateFormPipeline = () => { handlePreviewFileChange={handlePreviewFileChange} handlePreviewOnlineDocumentChange={handlePreviewOnlineDocumentChange} handlePreviewWebsitePageChange={handlePreviewWebsiteChange} + handlePreviewOnlineDriveFileChange={handlePreviewOnlineDriveFileChange} />
diff --git a/web/app/components/datasets/documents/create-from-pipeline/preview/chunk-preview.tsx b/web/app/components/datasets/documents/create-from-pipeline/preview/chunk-preview.tsx index e926422b1d..763b5f38af 100644 --- a/web/app/components/datasets/documents/create-from-pipeline/preview/chunk-preview.tsx +++ b/web/app/components/datasets/documents/create-from-pipeline/preview/chunk-preview.tsx @@ -14,13 +14,15 @@ import { SkeletonContainer, SkeletonPoint, SkeletonRectangle, SkeletonRow } from import { RiSearchEyeLine } from '@remixicon/react' import Badge from '@/app/components/base/badge' import Button from '@/app/components/base/button' +import type { OnlineDriveFile } from '@/models/pipeline' import { DatasourceType } from '@/models/pipeline' type ChunkPreviewProps = { dataSourceType: DatasourceType - files: CustomFile[] + localFiles: CustomFile[] onlineDocuments: NotionPage[] websitePages: CrawlResultItem[] + onlineDriveFiles: OnlineDriveFile[] isIdle: boolean isPending: boolean estimateData: FileIndexingEstimateResponse | undefined @@ -28,13 +30,15 @@ type ChunkPreviewProps = { handlePreviewFileChange: (file: DocumentItem) => void handlePreviewOnlineDocumentChange: (page: NotionPage) => void handlePreviewWebsitePageChange: (page: CrawlResultItem) => void + handlePreviewOnlineDriveFileChange: (file: OnlineDriveFile) => void } const ChunkPreview = ({ dataSourceType, - files, + localFiles, onlineDocuments, websitePages, + onlineDriveFiles, isIdle, isPending, estimateData, @@ -42,13 +46,15 @@ const ChunkPreview = ({ handlePreviewFileChange, handlePreviewOnlineDocumentChange, handlePreviewWebsitePageChange, + handlePreviewOnlineDriveFileChange, }: ChunkPreviewProps) => { const { t } = useTranslation() const currentDocForm = useDatasetDetailContextWithSelector(s => s.dataset?.doc_form) - const [previewFile, setPreviewFile] = useState(files[0] as DocumentItem) + const [previewFile, setPreviewFile] = useState(localFiles[0] as DocumentItem) const [previewOnlineDocument, setPreviewOnlineDocument] = useState(onlineDocuments[0]) const [previewWebsitePage, setPreviewWebsitePage] = useState(websitePages[0]) + const [previewOnlineDriveFile, setPreviewOnlineDriveFile] = useState(onlineDriveFiles[0]) return ( {dataSourceType === DatasourceType.localFile && >} + files={localFiles as Array>} onChange={(selected) => { setPreviewFile(selected) handlePreviewFileChange(selected) @@ -110,6 +116,29 @@ const ChunkPreview = ({ } /> } + {dataSourceType === DatasourceType.onlineDrive + && ({ + id: file.key, + name: file.displayName, + extension: 'md', + })) + } + onChange={(selected) => { + const selectedFile = onlineDriveFiles.find(file => file.key === selected.id) + setPreviewOnlineDriveFile(selectedFile!) + handlePreviewOnlineDriveFileChange(selectedFile!) + }} + value={ + { + id: previewOnlineDriveFile?.key || '', + name: previewOnlineDriveFile?.displayName || '', + extension: 'md', + } + } + /> + } { currentDocForm !== ChunkingMode.qa && { const fileList = useDataSourceStoreWithSelector(state => state.localFileList) const onlineDocuments = useDataSourceStoreWithSelector(state => state.onlineDocuments) const websitePages = useDataSourceStoreWithSelector(state => state.websitePages) - const selectedFileList = useDataSourceStoreWithSelector(state => state.selectedFileList) + const selectedFileKeys = useDataSourceStoreWithSelector(state => state.selectedFileKeys) const dataSourceStore = useDataSourceStore() const [datasource, setDatasource] = useState() @@ -45,9 +45,9 @@ const TestRunPanel = () => { if (datasourceType === DatasourceType.websiteCrawl) return !websitePages.length if (datasourceType === DatasourceType.onlineDrive) - return !selectedFileList.length + return !selectedFileKeys.length return false - }, [datasource, datasourceType, fileList, onlineDocuments.length, selectedFileList.length, websitePages.length]) + }, [datasource, datasourceType, fileList, onlineDocuments.length, selectedFileKeys.length, websitePages.length]) const handleClose = useCallback(() => { setShowDebugAndPreviewPanel(false) @@ -87,7 +87,7 @@ const TestRunPanel = () => { const { bucket } = dataSourceStore.getState() datasourceInfoList.push({ bucket, - key: selectedFileList[0], + key: selectedFileKeys[0], }) } handleRun({ @@ -96,7 +96,7 @@ const TestRunPanel = () => { datasource_type: datasourceType, datasource_info_list: datasourceInfoList, }) - }, [dataSourceStore, datasource, datasourceType, fileList, handleRun, onlineDocuments, selectedFileList, websitePages]) + }, [dataSourceStore, datasource, datasourceType, fileList, handleRun, onlineDocuments, selectedFileKeys, websitePages]) return (
{ const { mutateAsync: checkPipelineDependencies } = useCheckPipelineDependencies() const handleCheckPluginDependencies = useCallback(async (id: string, isPipeline = false) => { - const mutateAsync = isPipeline ? checkPipelineDependencies : checkWorkflowDependencies - const { leaked_dependencies } = await mutateAsync(id) + const checkDependencies = isPipeline ? checkPipelineDependencies : checkWorkflowDependencies + const { leaked_dependencies } = await checkDependencies(id) const { setDependencies } = usePluginDependenciesStore.getState() setDependencies(leaked_dependencies) }, [checkWorkflowDependencies, checkPipelineDependencies])