浏览代码

refactor: rename selectedFileKeys to selectedFileIds and update related logic in online drive components

tags/2.0.0-beta.1
twwu 2 个月前
父节点
当前提交
9893b8110d

+ 6
- 6
web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/header/breadcrumbs/index.tsx 查看文件

@@ -43,25 +43,25 @@ const Breadcrumbs = ({
}, [displayBreadcrumbNum, prefix])

const handleBackToBucketList = useCallback(() => {
const { setFileList, setSelectedFileKeys, setPrefix, setBucket } = dataSourceStore.getState()
const { setFileList, setSelectedFileIds, setPrefix, setBucket } = dataSourceStore.getState()
setFileList([])
setSelectedFileKeys([])
setSelectedFileIds([])
setBucket('')
setPrefix([])
}, [dataSourceStore])

const handleClickBucketName = useCallback(() => {
const { setFileList, setSelectedFileKeys, setPrefix } = dataSourceStore.getState()
const { setFileList, setSelectedFileIds, setPrefix } = dataSourceStore.getState()
setFileList([])
setSelectedFileKeys([])
setSelectedFileIds([])
setPrefix([])
}, [dataSourceStore])

const handleClickBreadcrumb = useCallback((index: number) => {
const { prefix, setFileList, setSelectedFileKeys, setPrefix } = dataSourceStore.getState()
const { prefix, setFileList, setSelectedFileIds, setPrefix } = dataSourceStore.getState()
const newPrefix = prefix.slice(0, index + 1)
setFileList([])
setSelectedFileKeys([])
setSelectedFileIds([])
setPrefix(newPrefix)
}, [dataSourceStore])


+ 3
- 3
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[]
selectedFileKeys: string[]
selectedFileIds: string[]
prefix: string[]
keywords: string
bucket: string
@@ -21,7 +21,7 @@ type FileListProps = {

const FileList = ({
fileList,
selectedFileKeys,
selectedFileIds,
prefix,
keywords,
bucket,
@@ -67,7 +67,7 @@ const FileList = ({
/>
<List
fileList={fileList}
selectedFileKeys={selectedFileKeys}
selectedFileIds={selectedFileIds}
keywords={keywords}
handleResetKeywords={handleResetKeywords}
handleOpenFolder={handleOpenFolder}

+ 6
- 6
web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/list/index.tsx 查看文件

@@ -9,7 +9,7 @@ import { useDataSourceStore } from '../../../store'

type FileListProps = {
fileList: OnlineDriveFile[]
selectedFileKeys: string[]
selectedFileIds: string[]
keywords: string
isInPipeline: boolean
isLoading: boolean
@@ -20,7 +20,7 @@ type FileListProps = {

const List = ({
fileList,
selectedFileKeys,
selectedFileIds,
keywords,
handleResetKeywords,
handleSelectFile,
@@ -35,9 +35,9 @@ const List = ({
useEffect(() => {
if (anchorRef.current) {
observerRef.current = new IntersectionObserver((entries) => {
const { setStartAfter, isTruncated } = dataSourceStore.getState()
const { setNextPageParameters, currentNextPageParametersRef, isTruncated } = dataSourceStore.getState()
if (entries[0].isIntersecting && isTruncated.current && !isLoading)
setStartAfter(fileList[fileList.length - 1].key)
setNextPageParameters(currentNextPageParametersRef.current)
}, {
rootMargin: '100px',
})
@@ -72,10 +72,10 @@ const List = ({
<div className='flex h-full flex-col gap-y-px overflow-y-auto rounded-[10px] bg-background-section px-1 py-1.5'>
{
fileList.map((file) => {
const isSelected = selectedFileKeys.includes(file.key)
const isSelected = selectedFileIds.includes(file.id)
return (
<Item
key={file.key}
key={file.id}
file={file}
isSelected={isSelected}
onSelect={handleSelectFile}

+ 10
- 9
web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/file-list/list/item.tsx 查看文件

@@ -1,7 +1,7 @@
import Checkbox from '@/app/components/base/checkbox'
import Radio from '@/app/components/base/radio/ui'
import type { OnlineDriveFile } from '@/models/pipeline'
import React, { useCallback } from 'react'
import React, { useCallback, useMemo } from 'react'
import FileIcon from './file-icon'
import { formatFileSize } from '@/utils/format'
import Tooltip from '@/app/components/base/tooltip'
@@ -26,8 +26,9 @@ const Item = ({
onOpen,
}: ItemProps) => {
const { t } = useTranslation()
const isBucket = file.type === 'bucket'
const isFolder = file.type === 'folder'
const { id, name, type, size } = file
const isBucket = useMemo(() => type === 'bucket', [type])
const isFolder = useMemo(() => type === 'folder', [type])

const Wrapper = disabled ? Tooltip : React.Fragment

@@ -55,7 +56,7 @@ const Item = ({
<Checkbox
className='shrink-0'
disabled={disabled}
id={file.key}
id={id}
checked={isSelected}
onCheck={handleSelect}
/>
@@ -78,15 +79,15 @@ const Item = ({
'flex grow items-center gap-x-1 overflow-hidden py-0.5',
disabled && 'opacity-30',
)}>
<FileIcon type={file.type} fileName={file.displayName} className='shrink-0' />
<FileIcon type={type} fileName={name} className='shrink-0' />
<span
className='system-sm-medium grow truncate text-text-secondary'
title={file.displayName}
title={name}
>
{file.displayName}
{name}
</span>
{!isFolder && typeof file.size === 'number' && (
<span className='system-xs-regular shrink-0 text-text-tertiary'>{formatFileSize(file.size)}</span>
{!isFolder && typeof size === 'number' && (
<span className='system-xs-regular shrink-0 text-text-tertiary'>{formatFileSize(size)}</span>
)}
</div>
</Wrapper>

+ 26
- 22
web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/index.tsx 查看文件

@@ -32,19 +32,19 @@ const OnlineDrive = ({
const pipelineId = useDatasetDetailContextWithSelector(s => s.dataset?.pipeline_id)
const setShowAccountSettingModal = useModalContextSelector(s => s.setShowAccountSettingModal)
const {
startAfter,
nextPageParameters,
prefix,
keywords,
bucket,
selectedFileKeys,
selectedFileIds,
fileList,
currentCredentialId,
} = useDataSourceStoreWithSelector(useShallow(state => ({
startAfter: state.startAfter,
nextPageParameters: state.nextPageParameters,
prefix: state.prefix,
keywords: state.keywords,
bucket: state.bucket,
selectedFileKeys: state.selectedFileKeys,
selectedFileIds: state.selectedFileIds,
fileList: state.fileList,
currentCredentialId: state.currentCredentialId,
})))
@@ -61,7 +61,7 @@ const OnlineDrive = ({
: `/rag/pipelines/${pipelineId}/workflows/draft/datasource/nodes/${nodeId}/run`

const getOnlineDriveFiles = useCallback(async () => {
const { startAfter, prefix, bucket, fileList, currentCredentialId } = dataSourceStore.getState()
const { nextPageParameters, prefix, bucket, fileList, currentCredentialId } = dataSourceStore.getState()
const prefixString = prefix.length > 0 ? `${prefix.join('/')}/` : ''
setIsLoading(true)
ssePost(
@@ -71,7 +71,7 @@ const OnlineDrive = ({
inputs: {
prefix: prefixString,
bucket,
start_after: startAfter,
next_page_parameters: nextPageParameters,
max_keys: 30, // Adjust as needed
},
datasource_type: DatasourceType.onlineDrive,
@@ -80,10 +80,15 @@ const OnlineDrive = ({
},
{
onDataSourceNodeCompleted: (documentsData: DataSourceNodeCompletedResponse) => {
const { setFileList, isTruncated } = dataSourceStore.getState()
const { fileList: newFileList, isTruncated: newIsTruncated } = convertOnlineDriveData(documentsData.data, prefix, bucket)
const { setFileList, isTruncated, currentNextPageParametersRef } = dataSourceStore.getState()
const {
fileList: newFileList,
isTruncated: newIsTruncated,
nextPageParameters: newNextPageParameters,
} = convertOnlineDriveData(documentsData.data, prefix, bucket)
setFileList([...fileList, ...newFileList])
isTruncated.current = newIsTruncated
currentNextPageParametersRef.current = newNextPageParameters
setIsLoading(false)
},
onDataSourceNodeError: (error: DataSourceNodeErrorResponse) => {
@@ -107,11 +112,11 @@ const OnlineDrive = ({
else {
getOnlineDriveFiles()
}
}, [startAfter, prefix, bucket, currentCredentialId])
}, [nextPageParameters, prefix, bucket, currentCredentialId])

const onlineDriveFileList = useMemo(() => {
if (keywords)
return fileList.filter(file => file.key.toLowerCase().includes(keywords.toLowerCase()))
return fileList.filter(file => file.name.toLowerCase().includes(keywords.toLowerCase()))
return fileList
}, [fileList, keywords])

@@ -127,33 +132,32 @@ const OnlineDrive = ({
}, [dataSourceStore])

const handleSelectFile = useCallback((file: OnlineDriveFile) => {
const { selectedFileKeys, setSelectedFileKeys } = dataSourceStore.getState()
const { selectedFileIds, setSelectedFileIds } = dataSourceStore.getState()
if (file.type === OnlineDriveFileType.bucket) return
const newSelectedFileList = produce(selectedFileKeys, (draft) => {
if (draft.includes(file.key)) {
const index = draft.indexOf(file.key)
const newSelectedFileList = produce(selectedFileIds, (draft) => {
if (draft.includes(file.id)) {
const index = draft.indexOf(file.id)
draft.splice(index, 1)
}
else {
if (isInPipeline && draft.length >= 1) return
draft.push(file.key)
draft.push(file.id)
}
})
setSelectedFileKeys(newSelectedFileList)
setSelectedFileIds(newSelectedFileList)
}, [dataSourceStore, isInPipeline])

const handleOpenFolder = useCallback((file: OnlineDriveFile) => {
const { prefix, setPrefix, setBucket, setFileList, setSelectedFileKeys } = dataSourceStore.getState()
const { prefix, setPrefix, setBucket, setFileList, setSelectedFileIds } = dataSourceStore.getState()
if (file.type === OnlineDriveFileType.file) return
setFileList([])
if (file.type === OnlineDriveFileType.bucket) {
setBucket(file.displayName)
setBucket(file.name)
}
else {
setSelectedFileKeys([])
const displayName = file.displayName.endsWith('/') ? file.displayName.slice(0, -1) : file.displayName
setSelectedFileIds([])
const newPrefix = produce(prefix, (draft) => {
draft.push(displayName)
draft.push(file.name)
})
setPrefix(newPrefix)
}
@@ -178,7 +182,7 @@ const OnlineDrive = ({
/>
<FileList
fileList={onlineDriveFileList}
selectedFileKeys={selectedFileKeys}
selectedFileIds={selectedFileIds}
prefix={prefix}
keywords={keywords}
bucket={bucket}

+ 18
- 14
web/app/components/datasets/documents/create-from-pipeline/data-source/online-drive/utils.ts 查看文件

@@ -1,10 +1,8 @@
import { type OnlineDriveFile, OnlineDriveFileType } from '@/models/pipeline'
import type { OnlineDriveData } from '@/types/pipeline'

const filePathRegex = /^(?:.*\/)?[^\/]+\.[^\/\.]+$/

export const isFile = (path: string): boolean => {
return filePathRegex.test(path)
export const isFile = (type: 'file' | 'folder'): boolean => {
return type === 'file'
}

export const isBucketListInitiation = (data: OnlineDriveData[], prefix: string[], bucket: string): boolean => {
@@ -12,34 +10,40 @@ export const isBucketListInitiation = (data: OnlineDriveData[], prefix: string[]
return data.length > 1 || (data.length === 1 && !!data[0].bucket && data[0].files.length === 0)
}

export const convertOnlineDriveData = (data: OnlineDriveData[], prefix: string[], bucket: string): { fileList: OnlineDriveFile[], isTruncated: boolean } => {
export const convertOnlineDriveData = (data: OnlineDriveData[], prefix: string[], bucket: string): {
fileList: OnlineDriveFile[],
isTruncated: boolean,
nextPageParameters: Record<string, any>
} => {
const fileList: OnlineDriveFile[] = []
let isTruncated = false
let nextPageParameters: Record<string, any> = {}

if (data.length === 0)
return { fileList, isTruncated }
return { fileList, isTruncated, nextPageParameters }

if (isBucketListInitiation(data, prefix, bucket)) {
data.forEach((item) => {
fileList.push({
key: item.bucket,
displayName: item.bucket,
id: item.bucket,
name: item.bucket,
type: OnlineDriveFileType.bucket,
})
})
}
else {
data[0].files.forEach((file) => {
const isFileType = isFile(file.key)
const filePathList = file.key.split('/')
const { id, name, size, type } = file
const isFileType = isFile(type)
fileList.push({
key: file.key,
displayName: `${isFileType ? filePathList.pop() : filePathList[filePathList.length - 2]}${isFileType ? '' : '/'}`,
size: isFileType ? file.size : undefined,
id,
name,
size: isFileType ? size : undefined,
type: isFileType ? OnlineDriveFileType.file : OnlineDriveFileType.folder,
})
})
isTruncated = data[0].is_truncated ?? false
nextPageParameters = data[0].next_page_parameters ?? {}
}
return { fileList, isTruncated }
return { fileList, isTruncated, nextPageParameters }
}

+ 14
- 12
web/app/components/datasets/documents/create-from-pipeline/data-source/store/slices/online-drive.ts 查看文件

@@ -6,14 +6,15 @@ export type OnlineDriveSliceShape = {
setPrefix: (prefix: string[]) => void
keywords: string
setKeywords: (keywords: string) => void
selectedFileKeys: string[]
setSelectedFileKeys: (selectedFileKeys: string[]) => void
selectedFileIds: string[]
setSelectedFileIds: (selectedFileIds: string[]) => void
fileList: OnlineDriveFile[]
setFileList: (fileList: OnlineDriveFile[]) => void
bucket: string
setBucket: (bucket: string) => void
startAfter: string
setStartAfter: (startAfter: string) => void
nextPageParameters: Record<string, any>
currentNextPageParametersRef: React.RefObject<Record<string, any>>
setNextPageParameters: (nextPageParameters: Record<string, any>) => void
isTruncated: React.RefObject<boolean>
previewOnlineDriveFileRef: React.RefObject<OnlineDriveFile | undefined>
}
@@ -28,14 +29,14 @@ export const createOnlineDriveSlice: StateCreator<OnlineDriveSliceShape> = (set,
setKeywords: (keywords: string) => set(() => ({
keywords,
})),
selectedFileKeys: [],
setSelectedFileKeys: (selectedFileKeys: string[]) => {
selectedFileIds: [],
setSelectedFileIds: (selectedFileIds: string[]) => {
set(() => ({
selectedFileKeys,
selectedFileIds,
}))
const key = selectedFileKeys[0]
const id = selectedFileIds[0]
const { fileList, previewOnlineDriveFileRef } = get()
previewOnlineDriveFileRef.current = fileList.find(file => file.key === key)
previewOnlineDriveFileRef.current = fileList.find(file => file.id === id)
},
fileList: [],
setFileList: (fileList: OnlineDriveFile[]) => set(() => ({
@@ -45,9 +46,10 @@ export const createOnlineDriveSlice: StateCreator<OnlineDriveSliceShape> = (set,
setBucket: (bucket: string) => set(() => ({
bucket,
})),
startAfter: '',
setStartAfter: (startAfter: string) => set(() => ({
startAfter,
nextPageParameters: {},
currentNextPageParametersRef: { current: {} },
setNextPageParameters: (nextPageParameters: Record<string, any>) => set(() => ({
nextPageParameters,
})),
isTruncated: { current: false },
previewOnlineDriveFileRef: { current: undefined },

+ 7
- 7
web/app/components/datasets/documents/create-from-pipeline/hooks.ts 查看文件

@@ -188,16 +188,16 @@ export const useWebsiteCrawl = () => {
export const useOnlineDrive = () => {
const {
fileList,
selectedFileKeys,
selectedFileIds,
} = useDataSourceStoreWithSelector(useShallow(state => ({
fileList: state.fileList,
selectedFileKeys: state.selectedFileKeys,
selectedFileIds: state.selectedFileIds,
})))
const dataSourceStore = useDataSourceStore()

const selectedOnlineDriveFileList = useMemo(() => {
return selectedFileKeys.map(key => fileList.find(item => item.key === key)!)
}, [fileList, selectedFileKeys])
return selectedFileIds.map(key => fileList.find(item => item.key === key)!)
}, [fileList, selectedFileIds])

const clearOnlineDriveData = useCallback(() => {
const {
@@ -205,18 +205,18 @@ export const useOnlineDrive = () => {
setBucket,
setPrefix,
setKeywords,
setSelectedFileKeys,
setSelectedFileIds,
} = dataSourceStore.getState()
setFileList([])
setBucket('')
setPrefix([])
setKeywords('')
setSelectedFileKeys([])
setSelectedFileIds([])
}, [dataSourceStore])

return {
fileList,
selectedFileKeys,
selectedFileIds,
selectedOnlineDriveFileList,
clearOnlineDriveData,
}

+ 15
- 15
web/app/components/datasets/documents/create-from-pipeline/index.tsx 查看文件

@@ -82,7 +82,7 @@ const CreateFormPipeline = () => {
} = useWebsiteCrawl()
const {
fileList: onlineDriveFileList,
selectedFileKeys,
selectedFileIds,
selectedOnlineDriveFileList,
clearOnlineDriveData,
} = useOnlineDrive()
@@ -113,9 +113,9 @@ const CreateFormPipeline = () => {
if (datasourceType === DatasourceType.websiteCrawl)
return isShowVectorSpaceFull || !websitePages.length
if (datasourceType === DatasourceType.onlineDrive)
return isShowVectorSpaceFull || !selectedFileKeys.length
return isShowVectorSpaceFull || !selectedFileIds.length
return false
}, [datasource, datasourceType, isShowVectorSpaceFull, fileList.length, allFileLoaded, onlineDocuments.length, websitePages.length, selectedFileKeys.length])
}, [datasource, datasourceType, isShowVectorSpaceFull, fileList.length, allFileLoaded, onlineDocuments.length, websitePages.length, selectedFileIds.length])

const fileUploadConfig = useMemo(() => fileUploadConfigResponse ?? {
file_size_limit: 15,
@@ -149,8 +149,8 @@ const CreateFormPipeline = () => {
if (datasourceType === DatasourceType.onlineDocument)
return onlineDocuments.length
if (datasourceType === DatasourceType.onlineDrive)
return selectedFileKeys.length
}, [datasourceType, onlineDocuments.length, selectedFileKeys.length])
return selectedFileIds.length
}, [datasourceType, onlineDocuments.length, selectedFileIds.length])

const tip = useMemo(() => {
if (datasourceType === DatasourceType.onlineDocument)
@@ -209,10 +209,10 @@ const CreateFormPipeline = () => {
}
if (datasourceType === DatasourceType.onlineDrive) {
const { bucket } = dataSourceStore.getState()
const { key } = previewOnlineDriveFileRef.current!
const { id } = previewOnlineDriveFileRef.current!
datasourceInfoList.push({
bucket,
key,
id,
credential_id: currentCredentialId,
})
}
@@ -273,7 +273,7 @@ const CreateFormPipeline = () => {
}
if (datasourceType === DatasourceType.onlineDrive) {
if (datasourceType === DatasourceType.onlineDrive) {
selectedFileKeys.forEach((key) => {
selectedFileIds.forEach((key) => {
datasourceInfoList.push({
bucket,
key,
@@ -296,7 +296,7 @@ const CreateFormPipeline = () => {
handleNextStep()
},
})
}, [dataSourceStore, datasource, datasourceType, fileList, handleNextStep, onlineDocuments, pipelineId, runPublishedPipeline, selectedFileKeys, websitePages])
}, [dataSourceStore, datasource, datasourceType, fileList, handleNextStep, onlineDocuments, pipelineId, runPublishedPipeline, selectedFileIds, websitePages])

const onClickProcess = useCallback(() => {
isPreview.current = false
@@ -340,9 +340,9 @@ const CreateFormPipeline = () => {
const {
onlineDocuments,
fileList: onlineDriveFileList,
selectedFileKeys,
selectedFileIds,
setOnlineDocuments,
setSelectedFileKeys,
setSelectedFileIds,
setSelectedPagesId,
} = dataSourceStore.getState()
if (datasourceType === DatasourceType.onlineDocument) {
@@ -360,11 +360,11 @@ const CreateFormPipeline = () => {
if (datasourceType === DatasourceType.onlineDrive) {
const allKeys = onlineDriveFileList.filter((item) => {
return item.type !== 'bucket'
}).map(file => file.key)
if (selectedFileKeys.length < allKeys.length)
setSelectedFileKeys(allKeys)
}).map(file => file.id)
if (selectedFileIds.length < allKeys.length)
setSelectedFileIds(allKeys)
else
setSelectedFileKeys([])
setSelectedFileIds([])
}
}, [PagesMapAndSelectedPagesId, currentWorkspace?.pages, dataSourceStore, datasourceType])


+ 3
- 3
web/app/components/header/account-setting/data-source-page-new/configure.tsx 查看文件

@@ -73,7 +73,7 @@ const Configure = ({
<PortalToFollowElemContent className='z-[61]'>
<div className='w-[240px] space-y-1.5 rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-2 shadow-lg'>
{
canOAuth && (
!!canOAuth && (
<AddOAuthButton
{...oAuthButtonProps}
onUpdate={onUpdate}
@@ -89,7 +89,7 @@ const Configure = ({
)
}
{
canApiKey && canOAuth && (
!!canApiKey && !!canOAuth && (
<div className='system-2xs-medium-uppercase flex h-4 items-center p-2 text-text-quaternary'>
<div className='mr-2 h-[1px] grow bg-gradient-to-l from-[rgba(16,24,40,0.08)]' />
OR
@@ -98,7 +98,7 @@ const Configure = ({
)
}
{
canApiKey && (
!!canApiKey && (
<AddApiKeyButton
{...apiKeyButtonProps}
formSchemas={item.credential_schema}

+ 2
- 2
web/app/components/rag-pipeline/components/panel/test-run/hooks.ts 查看文件

@@ -114,13 +114,13 @@ export const useOnlineDrive = () => {
setBucket,
setPrefix,
setKeywords,
setSelectedFileKeys,
setSelectedFileIds,
} = dataSourceStore.getState()
setFileList([])
setBucket('')
setPrefix([])
setKeywords('')
setSelectedFileKeys([])
setSelectedFileIds([])
}, [dataSourceStore])

return {

+ 6
- 6
web/app/components/rag-pipeline/components/panel/test-run/index.tsx 查看文件

@@ -30,12 +30,12 @@ const TestRunPanel = () => {
localFileList: fileList,
onlineDocuments,
websitePages,
selectedFileKeys,
selectedFileIds,
} = useDataSourceStoreWithSelector(useShallow(state => ({
localFileList: state.localFileList,
onlineDocuments: state.onlineDocuments,
websitePages: state.websitePages,
selectedFileKeys: state.selectedFileKeys,
selectedFileIds: state.selectedFileIds,
})))
const dataSourceStore = useDataSourceStore()
const [datasource, setDatasource] = useState<Datasource>()
@@ -62,9 +62,9 @@ const TestRunPanel = () => {
if (datasourceType === DatasourceType.websiteCrawl)
return !websitePages.length
if (datasourceType === DatasourceType.onlineDrive)
return !selectedFileKeys.length
return !selectedFileIds.length
return false
}, [datasource, datasourceType, fileList, onlineDocuments.length, selectedFileKeys.length, websitePages.length])
}, [datasource, datasourceType, fileList, onlineDocuments.length, selectedFileIds.length, websitePages.length])

const handleClose = useCallback(() => {
setShowDebugAndPreviewPanel(false)
@@ -110,7 +110,7 @@ const TestRunPanel = () => {
const { bucket } = dataSourceStore.getState()
datasourceInfoList.push({
bucket,
key: selectedFileKeys[0],
id: selectedFileIds[0],
credential_id: credentialId,
})
}
@@ -120,7 +120,7 @@ const TestRunPanel = () => {
datasource_type: datasourceType,
datasource_info_list: datasourceInfoList,
})
}, [dataSourceStore, datasource, datasourceType, fileList, handleRun, onlineDocuments, selectedFileKeys, websitePages])
}, [dataSourceStore, datasource, datasourceType, fileList, handleRun, onlineDocuments, selectedFileIds, websitePages])

const clearDataSourceData = useCallback((dataSource: Datasource) => {
if (dataSource.nodeData.provider_type === DatasourceType.onlineDocument)

+ 2
- 2
web/models/pipeline.ts 查看文件

@@ -282,8 +282,8 @@ export enum OnlineDriveFileType {
}

export type OnlineDriveFile = {
key: string
displayName: string
id: string
name: string
size?: number
type: OnlineDriveFileType
}

+ 4
- 1
web/types/pipeline.tsx 查看文件

@@ -13,14 +13,17 @@ export type DataSourceNodeError = {
}

export type OnlineDriveFile = {
key: string
id: string
name: string
size: number
type: 'file' | 'folder'
}

export type OnlineDriveData = {
bucket: string
files: OnlineDriveFile[]
is_truncated: boolean
next_page_parameters: Record<string, any>
}

export type DataSourceNodeCompletedResponse = {

正在加载...
取消
保存