|
@@ -10,6 +10,8 @@ import { ToastContext } from '@/app/components/base/toast'
|
|
|
|
|
|
import { upload } from '@/service/base'
|
|
|
import { fetchFileUploadConfig } from '@/service/common'
|
|
|
+import { fetchSupportFileTypes } from '@/service/datasets'
|
|
|
+import I18n from '@/context/i18n'
|
|
|
|
|
|
type IFileUploaderProps = {
|
|
|
fileList: FileItem[]
|
|
@@ -20,18 +22,6 @@ type IFileUploaderProps = {
|
|
|
onPreview: (file: File) => void
|
|
|
}
|
|
|
|
|
|
-const ACCEPTS = [
|
|
|
- '.pdf',
|
|
|
- '.html',
|
|
|
- '.htm',
|
|
|
- '.md',
|
|
|
- '.markdown',
|
|
|
- '.txt',
|
|
|
- '.xlsx',
|
|
|
- '.csv',
|
|
|
- '.docx',
|
|
|
-]
|
|
|
-
|
|
|
const FileUploader = ({
|
|
|
fileList,
|
|
|
titleClassName,
|
|
@@ -42,12 +32,16 @@ const FileUploader = ({
|
|
|
}: IFileUploaderProps) => {
|
|
|
const { t } = useTranslation()
|
|
|
const { notify } = useContext(ToastContext)
|
|
|
+ const { locale } = useContext(I18n)
|
|
|
const [dragging, setDragging] = useState(false)
|
|
|
const dropRef = useRef<HTMLDivElement>(null)
|
|
|
const dragRef = useRef<HTMLDivElement>(null)
|
|
|
const fileUploader = useRef<HTMLInputElement>(null)
|
|
|
|
|
|
const { data: fileUploadConfigResponse } = useSWR({ url: '/files/upload' }, fetchFileUploadConfig)
|
|
|
+ const { data: supportFileTypesResponse } = useSWR({ url: '/files/support-type' }, fetchSupportFileTypes)
|
|
|
+ const supportTypes = supportFileTypesResponse?.allowed_extensions || []
|
|
|
+ const ACCEPTS = supportTypes.map((ext: string) => `.${ext}`)
|
|
|
const fileUploadConfig = useMemo(() => fileUploadConfigResponse ?? {
|
|
|
file_size_limit: 15,
|
|
|
batch_count_limit: 5,
|
|
@@ -228,14 +222,17 @@ const FileUploader = ({
|
|
|
<div className={cn(s.title, titleClassName)}>{t('datasetCreation.stepOne.uploader.title')}</div>
|
|
|
<div ref={dropRef} className={cn(s.uploader, dragging && s.dragging)}>
|
|
|
<div className='flex justify-center items-center min-h-6 mb-2'>
|
|
|
- <span className={s.uploadIcon}/>
|
|
|
+ <span className={s.uploadIcon} />
|
|
|
<span>
|
|
|
{t('datasetCreation.stepOne.uploader.button')}
|
|
|
<label className={s.browse} onClick={selectHandle}>{t('datasetCreation.stepOne.uploader.browse')}</label>
|
|
|
</span>
|
|
|
</div>
|
|
|
- <div className={s.tip}>{t('datasetCreation.stepOne.uploader.tip', { size: fileUploadConfig.file_size_limit })}</div>
|
|
|
- {dragging && <div ref={dragRef} className={s.draggingCover}/>}
|
|
|
+ <div className={s.tip}>{t('datasetCreation.stepOne.uploader.tip', {
|
|
|
+ size: fileUploadConfig.file_size_limit,
|
|
|
+ supportTypes: supportTypes.map(item => item.toUpperCase()).join(locale === 'en' ? ', ' : '、 '),
|
|
|
+ })}</div>
|
|
|
+ {dragging && <div ref={dragRef} className={s.draggingCover} />}
|
|
|
</div>
|
|
|
<div className={s.fileList}>
|
|
|
{fileList.map((fileItem, index) => (
|
|
@@ -248,10 +245,10 @@ const FileUploader = ({
|
|
|
)}
|
|
|
>
|
|
|
{fileItem.progress < 100 && (
|
|
|
- <div className={s.progressbar} style={{ width: `${fileItem.progress}%` }}/>
|
|
|
+ <div className={s.progressbar} style={{ width: `${fileItem.progress}%` }} />
|
|
|
)}
|
|
|
<div className={s.fileInfo}>
|
|
|
- <div className={cn(s.fileIcon, s[getFileType(fileItem.file)])}/>
|
|
|
+ <div className={cn(s.fileIcon, s[getFileType(fileItem.file)])} />
|
|
|
<div className={s.filename}>{fileItem.file.name}</div>
|
|
|
<div className={s.size}>{getFileSize(fileItem.file.size)}</div>
|
|
|
</div>
|
|
@@ -263,7 +260,7 @@ const FileUploader = ({
|
|
|
<div className={s.remove} onClick={(e) => {
|
|
|
e.stopPropagation()
|
|
|
removeFile(fileItem.fileID)
|
|
|
- }}/>
|
|
|
+ }} />
|
|
|
)}
|
|
|
</div>
|
|
|
</div>
|