- {!hideUpload && (
-
- )}
- {!hideUpload && (
-
-
-
-
-
- {t('datasetCreation.stepOne.uploader.button')}
- {allowedExtensions.length > 0 && (
-
- )}
-
-
-
{t('datasetCreation.stepOne.uploader.tip', {
- size: fileUploadConfig.file_size_limit,
- supportTypes: supportTypesShowNames,
- batchCount: fileUploadConfig.batch_count_limit,
- })}
- {dragging &&
}
-
- )}
- {fileList.length > 0 && (
-
- {fileList.map((fileItem, index) => {
- const isUploading = fileItem.progress >= 0 && fileItem.progress < 100
- const isError = fileItem.progress === -2
- return (
-
fileItem.file?.id && onPreview?.(fileItem.file)}
- className={cn(
- 'flex h-12 items-center rounded-lg border border-components-panel-border bg-components-panel-on-panel-item-bg shadow-xs shadow-shadow-shadow-4',
- isError && 'border-state-destructive-border bg-state-destructive-hover',
- )}
- >
-
-
-
-
-
-
- {getFileType(fileItem.file)}
- ·
- {getFileSize(fileItem.file.size)}
-
-
-
- {isUploading && (
-
- )}
- {
- isError && (
-
- )
- }
- {
- e.stopPropagation()
- removeFile(fileItem.fileID)
- }}>
-
-
-
-
- )
- })}
-
- )}
-
- )
-}
-
-export default FileUploader
diff --git a/web/app/components/rag-pipeline/components/panel/test-run/data-source/local-file/index.tsx b/web/app/components/rag-pipeline/components/panel/test-run/data-source/local-file/index.tsx
index 1ed394a1c9..cfe1883f99 100644
--- a/web/app/components/rag-pipeline/components/panel/test-run/data-source/local-file/index.tsx
+++ b/web/app/components/rag-pipeline/components/panel/test-run/data-source/local-file/index.tsx
@@ -1,33 +1,337 @@
+'use client'
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
+import { useTranslation } from 'react-i18next'
+import { useContext } from 'use-context-selector'
+import { RiDeleteBinLine, RiErrorWarningFill, RiUploadCloud2Line } from '@remixicon/react'
+import DocumentFileIcon from '@/app/components/datasets/common/document-file-icon'
+import cn from '@/utils/classnames'
import type { CustomFile as File, FileItem } from '@/models/datasets'
-import FileUploader from './file-uploader'
+import { ToastContext } from '@/app/components/base/toast'
+import SimplePieChart from '@/app/components/base/simple-pie-chart'
+import { upload } from '@/service/base'
+import I18n from '@/context/i18n'
+import { LanguagesSupported } from '@/i18n/language'
+import { IS_CE_EDITION } from '@/config'
+import { Theme } from '@/types/app'
+import useTheme from '@/hooks/use-theme'
+import { useFileUploadConfig } from '@/service/use-common'
-type LocalFileProps = {
- files: FileItem[]
+const FILES_NUMBER_LIMIT = 20
+
+export type LocalFileProps = {
+ fileList: FileItem[]
allowedExtensions: string[]
- updateFileList: (files: FileItem[]) => void
- updateFile: (fileItem: FileItem, progress: number, list: FileItem[]) => void
+ prepareFileList: (files: FileItem[]) => void
+ onFileUpdate: (fileItem: FileItem, progress: number, list: FileItem[]) => void
+ onFileListUpdate?: (files: FileItem[]) => void
onPreview?: (file: File) => void
- notSupportBatchUpload: boolean
+ notSupportBatchUpload?: boolean
}
const LocalFile = ({
- files,
+ fileList,
allowedExtensions,
- updateFileList,
- updateFile,
+ prepareFileList,
+ onFileUpdate,
+ onFileListUpdate,
onPreview,
notSupportBatchUpload,
}: LocalFileProps) => {
+ const { t } = useTranslation()
+ const { notify } = useContext(ToastContext)
+ const { locale } = useContext(I18n)
+ const [dragging, setDragging] = useState(false)
+ const dropRef = useRef