refactor: enhance datasource handling by adding fileExtensions support

This commit is contained in:
twwu 2025-05-27 14:39:52 +08:00
parent 754a1d1197
commit 31e183ef0d
7 changed files with 17 additions and 9 deletions

View File

@ -36,6 +36,7 @@ export const useDatasourceOptions = (pipelineNodes: Node<DataSourceNodeType>[])
description: node.data.desc || '', description: node.data.desc || '',
docTitle: '', // todo: Add docTitle and docLink if needed, or remove these properties if not used docTitle: '', // todo: Add docTitle and docLink if needed, or remove these properties if not used
docLink: '', docLink: '',
fileExtensions: node.data.fileExtensions || [],
} }
}) })
}, [datasourceNodes]) }, [datasourceNodes])

View File

@ -265,6 +265,7 @@ const TestRunPanel = () => {
{datasource?.type === DatasourceType.localFile && ( {datasource?.type === DatasourceType.localFile && (
<LocalFile <LocalFile
files={fileList} files={fileList}
allowedExtensions={datasource?.fileExtensions || []}
updateFile={updateFile} updateFile={updateFile}
updateFileList={updateFileList} updateFileList={updateFileList}
onPreview={updateCurrentFile} onPreview={updateCurrentFile}

View File

@ -14,12 +14,13 @@ import { LanguagesSupported } from '@/i18n/language'
import { IS_CE_EDITION } from '@/config' import { IS_CE_EDITION } from '@/config'
import { Theme } from '@/types/app' import { Theme } from '@/types/app'
import useTheme from '@/hooks/use-theme' import useTheme from '@/hooks/use-theme'
import { useFileSupportTypes, useFileUploadConfig } from '@/service/use-common' import { useFileUploadConfig } from '@/service/use-common'
const FILES_NUMBER_LIMIT = 20 const FILES_NUMBER_LIMIT = 20
type IFileUploaderProps = { type IFileUploaderProps = {
fileList: FileItem[] fileList: FileItem[]
allowedExtensions: string[]
prepareFileList: (files: FileItem[]) => void prepareFileList: (files: FileItem[]) => void
onFileUpdate: (fileItem: FileItem, progress: number, list: FileItem[]) => void onFileUpdate: (fileItem: FileItem, progress: number, list: FileItem[]) => void
onFileListUpdate?: (files: FileItem[]) => void onFileListUpdate?: (files: FileItem[]) => void
@ -29,6 +30,7 @@ type IFileUploaderProps = {
const FileUploader = ({ const FileUploader = ({
fileList, fileList,
allowedExtensions,
prepareFileList, prepareFileList,
onFileUpdate, onFileUpdate,
onFileListUpdate, onFileListUpdate,
@ -45,9 +47,7 @@ const FileUploader = ({
const hideUpload = notSupportBatchUpload && fileList.length > 0 const hideUpload = notSupportBatchUpload && fileList.length > 0
const { data: fileUploadConfigResponse } = useFileUploadConfig() const { data: fileUploadConfigResponse } = useFileUploadConfig()
const { data: supportFileTypesResponse } = useFileSupportTypes() // Todo: replace with extensions configured in node const supportTypesShowNames = useMemo(() => {
const supportTypes = supportFileTypesResponse?.allowed_extensions || []
const supportTypesShowNames = (() => {
const extensionMap: { [key: string]: string } = { const extensionMap: { [key: string]: string } = {
md: 'markdown', md: 'markdown',
pptx: 'pptx', pptx: 'pptx',
@ -56,14 +56,14 @@ const FileUploader = ({
docx: 'docx', docx: 'docx',
} }
return [...supportTypes] return allowedExtensions
.map(item => extensionMap[item] || item) // map to standardized extension .map(item => extensionMap[item] || item) // map to standardized extension
.map(item => item.toLowerCase()) // convert to lower case .map(item => item.toLowerCase()) // convert to lower case
.filter((item, index, self) => self.indexOf(item) === index) // remove duplicates .filter((item, index, self) => self.indexOf(item) === index) // remove duplicates
.map(item => item.toUpperCase()) // convert to upper case .map(item => item.toUpperCase()) // convert to upper case
.join(locale !== LanguagesSupported[1] ? ', ' : '、 ') .join(locale !== LanguagesSupported[1] ? ', ' : '、 ')
})() }, [locale, allowedExtensions])
const ACCEPTS = supportTypes.map((ext: string) => `.${ext}`) const ACCEPTS = allowedExtensions.map((ext: string) => `.${ext}`)
const fileUploadConfig = useMemo(() => fileUploadConfigResponse ?? { const fileUploadConfig = useMemo(() => fileUploadConfigResponse ?? {
file_size_limit: 15, file_size_limit: 15,
batch_count_limit: 5, batch_count_limit: 5,
@ -266,7 +266,7 @@ const FileUploader = ({
<span> <span>
{t('datasetCreation.stepOne.uploader.button')} {t('datasetCreation.stepOne.uploader.button')}
{supportTypes.length > 0 && ( {allowedExtensions.length > 0 && (
<label className='ml-1 cursor-pointer text-text-accent' onClick={selectHandle}>{t('datasetCreation.stepOne.uploader.browse')}</label> <label className='ml-1 cursor-pointer text-text-accent' onClick={selectHandle}>{t('datasetCreation.stepOne.uploader.browse')}</label>
)} )}
</span> </span>

View File

@ -3,6 +3,7 @@ import FileUploader from './file-uploader'
type LocalFileProps = { type LocalFileProps = {
files: FileItem[] files: FileItem[]
allowedExtensions: string[]
updateFileList: (files: FileItem[]) => void updateFileList: (files: FileItem[]) => void
updateFile: (fileItem: FileItem, progress: number, list: FileItem[]) => void updateFile: (fileItem: FileItem, progress: number, list: FileItem[]) => void
onPreview?: (file: File) => void onPreview?: (file: File) => void
@ -11,6 +12,7 @@ type LocalFileProps = {
const LocalFile = ({ const LocalFile = ({
files, files,
allowedExtensions,
updateFileList, updateFileList,
updateFile, updateFile,
onPreview, onPreview,
@ -19,6 +21,7 @@ const LocalFile = ({
return ( return (
<FileUploader <FileUploader
fileList={files} fileList={files}
allowedExtensions={allowedExtensions}
prepareFileList={updateFileList} prepareFileList={updateFileList}
onFileListUpdate={updateFileList} onFileListUpdate={updateFileList}
onFileUpdate={updateFile} onFileUpdate={updateFile}

View File

@ -31,9 +31,10 @@ export const useDatasourceOptions = () => {
nodeId: node.id, nodeId: node.id,
type: node.data.provider_type as DatasourceType, type: node.data.provider_type as DatasourceType,
variables: node.data.variables || [], variables: node.data.variables || [],
description: node.data.desc || '', description: '', // todo: Add description
docTitle: '', // todo: Add docTitle and docLink docTitle: '', // todo: Add docTitle and docLink
docLink: '', docLink: '',
fileExtensions: node.data.fileExtensions || [],
} }
}) })
}, [datasourceNodes]) }, [datasourceNodes])

View File

@ -157,6 +157,7 @@ const TestRunPanel = () => {
{datasource?.type === DatasourceType.localFile && ( {datasource?.type === DatasourceType.localFile && (
<LocalFile <LocalFile
files={fileList} files={fileList}
allowedExtensions={datasource?.fileExtensions || []}
updateFile={updateFile} updateFile={updateFile}
updateFileList={updateFileList} updateFileList={updateFileList}
notSupportBatchUpload={false} // only support single file upload in test run notSupportBatchUpload={false} // only support single file upload in test run

View File

@ -19,4 +19,5 @@ export type Datasource = {
description: string description: string
docTitle?: string docTitle?: string
docLink?: string docLink?: string
fileExtensions?: string[]
} }