Commit 831a5f6d authored by Joel's avatar Joel

feat: support remove uploaded file

parent 7dc445d4
...@@ -10,9 +10,10 @@ import { ToastContext } from '@/app/components/base/toast' ...@@ -10,9 +10,10 @@ import { ToastContext } from '@/app/components/base/toast'
import { upload } from '@/service/base' import { upload } from '@/service/base'
type IFileUploaderProps = { type IFileUploaderProps = {
fileList: FileEntity[] fileList: any[]
prepareFileList: (files: any[]) => void prepareFileList: (files: any[]) => void
onFileUpdate: (fileItem: any, progress: number, list: any[]) => void onFileUpdate: (fileItem: any, progress: number, list: any[]) => void
onFileListUpdate?: (files: any) => void
onPreview: (file: FileEntity) => void onPreview: (file: FileEntity) => void
} }
...@@ -35,6 +36,7 @@ const FileUploader = ({ ...@@ -35,6 +36,7 @@ const FileUploader = ({
fileList, fileList,
prepareFileList, prepareFileList,
onFileUpdate, onFileUpdate,
onFileListUpdate,
onPreview, onPreview,
}: IFileUploaderProps) => { }: IFileUploaderProps) => {
const { t } = useTranslation() const { t } = useTranslation()
...@@ -104,7 +106,6 @@ const FileUploader = ({ ...@@ -104,7 +106,6 @@ const FileUploader = ({
onFileUpdate(fileItem, percent, fileListCopy) onFileUpdate(fileItem, percent, fileListCopy)
} }
} }
console.log('fff1', fileListCopy)
return upload({ return upload({
xhr: new XMLHttpRequest(), xhr: new XMLHttpRequest(),
...@@ -116,14 +117,12 @@ const FileUploader = ({ ...@@ -116,14 +117,12 @@ const FileUploader = ({
fileID: fileItem.fileID, fileID: fileItem.fileID,
file: res, file: res,
} }
console.log('fff2', fileListCopy)
onFileUpdate(completeFile, 100, fileListCopy) onFileUpdate(completeFile, 100, fileListCopy)
return Promise.resolve({ ...completeFile }) return Promise.resolve({ ...completeFile })
}) })
.catch((err) => { .catch(() => {
console.log(err)
notify({ type: 'error', message: t('datasetCreation.stepOne.uploader.failed') }) notify({ type: 'error', message: t('datasetCreation.stepOne.uploader.failed') })
onFileUpdate(fileItem, -2, fileListCopy) onFileUpdate(fileItem, -2, [...fileListCopy])
return Promise.resolve({ ...fileItem }) return Promise.resolve({ ...fileItem })
}) })
.finally() .finally()
...@@ -199,13 +198,14 @@ const FileUploader = ({ ...@@ -199,13 +198,14 @@ const FileUploader = ({
if (fileUploader.current) if (fileUploader.current)
fileUploader.current.click() fileUploader.current.click()
} }
// TODO
const removeFile = () => { const removeFile = (index: number) => {
if (fileUploader.current) if (fileUploader.current)
fileUploader.current.value = '' fileUploader.current.value = ''
setCurrentFile(undefined) setCurrentFile(undefined)
// onFileUpdate() fileListRef.current.splice(index, 1)
onFileListUpdate?.([...fileListRef.current])
} }
const fileChangeHandle = (e: React.ChangeEvent<HTMLInputElement>) => { const fileChangeHandle = (e: React.ChangeEvent<HTMLInputElement>) => {
const files = [...(e.target.files ?? [])].filter(file => isValid(file)) const files = [...(e.target.files ?? [])].filter(file => isValid(file))
...@@ -247,8 +247,9 @@ const FileUploader = ({ ...@@ -247,8 +247,9 @@ const FileUploader = ({
{dragging && <div ref={dragRef} className={s.draggingCover}/>} {dragging && <div ref={dragRef} className={s.draggingCover}/>}
</div> </div>
<div className={s.fileList}> <div className={s.fileList}>
{fileList.map(fileItem => ( {fileList.map((fileItem, index) => (
<div <div
key={`${fileItem.fileID}-${index}`}
// onClick={() => onPreview(currentFile)} // onClick={() => onPreview(currentFile)}
className={cn( className={cn(
s.file, s.file,
...@@ -269,12 +270,12 @@ const FileUploader = ({ ...@@ -269,12 +270,12 @@ const FileUploader = ({
<div className={s.percent}>{`${fileItem.progress}%`}</div> <div className={s.percent}>{`${fileItem.progress}%`}</div>
)} )}
{fileItem.progress === 100 && ( {fileItem.progress === 100 && (
<div className={s.remove} onClick={removeFile}/> <div className={s.remove} onClick={() => removeFile(index)}/>
)} )}
</div> </div>
</div> </div>
))} ))}
{currentFile && ( {/* {currentFile && (
<div <div
// onClick={() => onPreview(currentFile)} // onClick={() => onPreview(currentFile)}
className={cn( className={cn(
...@@ -296,14 +297,14 @@ const FileUploader = ({ ...@@ -296,14 +297,14 @@ const FileUploader = ({
<div className={s.percent}>{`${percent}%`}</div> <div className={s.percent}>{`${percent}%`}</div>
)} )}
{!uploading && ( {!uploading && (
<div className={s.remove} onClick={removeFile}/> <div className={s.remove} onClick={() => removeFile(index)}/>
)} )}
</div> </div>
</div> </div>
)} )} */}
</div> </div>
{/* TODO */} {/* TODO */}
{false && !currentFile && fileList[0] && ( {/* {false && !currentFile && fileList[0] && (
<div <div
// onClick={() => onPreview(currentFile)} // onClick={() => onPreview(currentFile)}
className={cn( className={cn(
...@@ -329,7 +330,7 @@ const FileUploader = ({ ...@@ -329,7 +330,7 @@ const FileUploader = ({
)} )}
</div> </div>
</div> </div>
)} )} */}
</div> </div>
) )
} }
......
...@@ -39,9 +39,7 @@ const DatasetUpdateForm = ({ datasetId }: DatasetUpdateFormProps) => { ...@@ -39,9 +39,7 @@ const DatasetUpdateForm = ({ datasetId }: DatasetUpdateFormProps) => {
setNotionPages(value) setNotionPages(value)
} }
// TODO
const updateFileList = (preparedFiles: any) => { const updateFileList = (preparedFiles: any) => {
console.log('preparedFiles', preparedFiles)
setFiles(preparedFiles) setFiles(preparedFiles)
} }
...@@ -52,6 +50,17 @@ const DatasetUpdateForm = ({ datasetId }: DatasetUpdateFormProps) => { ...@@ -52,6 +50,17 @@ const DatasetUpdateForm = ({ datasetId }: DatasetUpdateFormProps) => {
progress, progress,
} }
setFiles([...list]) setFiles([...list])
// use follow code would cause dirty list update problem
// const newList = list.map((file) => {
// if (file.fileID === fileItem.fileID) {
// return {
// ...fileItem,
// progress,
// }
// }
// return file
// })
// setFiles(newList)
} }
const updateIndexingTypeCache = (type: string) => { const updateIndexingTypeCache = (type: string) => {
setIndexTypeCache(type) setIndexTypeCache(type)
......
...@@ -87,12 +87,9 @@ const StepOne = ({ ...@@ -87,12 +87,9 @@ const StepOne = ({
const shouldShowDataSourceTypeList = !datasetId || (datasetId && !dataset?.data_source_type) const shouldShowDataSourceTypeList = !datasetId || (datasetId && !dataset?.data_source_type)
// TODO
const nextDisabled = useMemo(() => { const nextDisabled = useMemo(() => {
if (!files.length) if (!files.length)
return true return true
console.log(files)
console.log(files.some(file => file.progress !== 100))
if (files.some(file => file.progress !== 100)) if (files.some(file => file.progress !== 100))
return true return true
return false return false
...@@ -159,6 +156,7 @@ const StepOne = ({ ...@@ -159,6 +156,7 @@ const StepOne = ({
<FileUploader <FileUploader
fileList={files} fileList={files}
prepareFileList={updateFileList} prepareFileList={updateFileList}
onFileListUpdate={updateFileList}
onFileUpdate={updateFile} onFileUpdate={updateFile}
onPreview={updateCurrentFile} onPreview={updateCurrentFile}
/> />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment