mirror of https://github.com/langgenius/dify.git
refactor: rename selectedFileKeys to selectedFileIds and update related logic in online drive components
This commit is contained in:
parent
fc779d00df
commit
9893b8110d
|
|
@ -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])
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 },
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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])
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -114,13 +114,13 @@ export const useOnlineDrive = () => {
|
|||
setBucket,
|
||||
setPrefix,
|
||||
setKeywords,
|
||||
setSelectedFileKeys,
|
||||
setSelectedFileIds,
|
||||
} = dataSourceStore.getState()
|
||||
setFileList([])
|
||||
setBucket('')
|
||||
setPrefix([])
|
||||
setKeywords('')
|
||||
setSelectedFileKeys([])
|
||||
setSelectedFileIds([])
|
||||
}, [dataSourceStore])
|
||||
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -282,8 +282,8 @@ export enum OnlineDriveFileType {
|
|||
}
|
||||
|
||||
export type OnlineDriveFile = {
|
||||
key: string
|
||||
displayName: string
|
||||
id: string
|
||||
name: string
|
||||
size?: number
|
||||
type: OnlineDriveFileType
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue