Skip to content

Commit

Permalink
feat: unstructured frontend (#1777)
Browse files Browse the repository at this point in the history
  • Loading branch information
iamjoel authored Dec 18, 2023
1 parent 5e34f93 commit 9b34f5a
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 20 deletions.
33 changes: 15 additions & 18 deletions web/app/components/datasets/create/file-uploader/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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[]
Expand All @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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) => (
Expand All @@ -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>
Expand All @@ -263,7 +260,7 @@ const FileUploader = ({
<div className={s.remove} onClick={(e) => {
e.stopPropagation()
removeFile(fileItem.fileID)
}}/>
}} />
)}
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion web/i18n/lang/dataset-creation.en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const translation = {
title: 'Upload text file',
button: 'Drag and drop file, or',
browse: 'Browse',
tip: 'Supports txt, html, markdown, xlsx, csv, docx and pdf. Max {{size}}MB each.',
tip: 'Supports {{supportTypes}}. Max {{size}}MB each.',
validation: {
typeError: 'File type not supported',
size: 'File too large. Maximum is {{size}}MB',
Expand Down
2 changes: 1 addition & 1 deletion web/i18n/lang/dataset-creation.zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const translation = {
title: '上传文本文件',
button: '拖拽文件至此,或者',
browse: '选择文件',
tip: '已支持 TXT、 HTML、 Markdown、 PDF、 XLSX、CSV、DOCX,每个文件不超过 {{size}}MB。',
tip: '已支持 {{supportTypes}},每个文件不超过 {{size}}MB。',
validation: {
typeError: '文件类型不支持',
size: '文件太大了,不能超过 {{size}}MB',
Expand Down
8 changes: 8 additions & 0 deletions web/service/datasets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -214,3 +214,11 @@ export const createApikey: Fetcher<CreateApiKeyResponse, { url: string; body: Re
export const fetchDatasetApiBaseUrl: Fetcher<{ api_base_url: string }, string> = (url) => {
return get<{ api_base_url: string }>(url)
}

type FileTypesRes = {
allowed_extensions: string[]
}

export const fetchSupportFileTypes: Fetcher<FileTypesRes, { url: string }> = ({ url }) => {
return get<FileTypesRes>(url)
}

0 comments on commit 9b34f5a

Please sign in to comment.