Spaces:
Paused
Paused
import { useFile } from '../hooks' | |
import { useStore } from '../store' | |
import type { FileEntity } from '../types' | |
import FileImageItem from './file-image-item' | |
import FileItem from './file-item' | |
import type { FileUpload } from '@/app/components/base/features/types' | |
import { SupportUploadFileTypes } from '@/app/components/workflow/types' | |
import cn from '@/utils/classnames' | |
type FileListProps = { | |
className?: string | |
files: FileEntity[] | |
onRemove?: (fileId: string) => void | |
onReUpload?: (fileId: string) => void | |
showDeleteAction?: boolean | |
showDownloadAction?: boolean | |
canPreview?: boolean | |
} | |
export const FileList = ({ | |
className, | |
files, | |
onReUpload, | |
onRemove, | |
showDeleteAction = true, | |
showDownloadAction = false, | |
canPreview, | |
}: FileListProps) => { | |
return ( | |
<div className={cn('flex flex-wrap gap-2', className)}> | |
{ | |
files.map((file) => { | |
if (file.supportFileType === SupportUploadFileTypes.image) { | |
return ( | |
<FileImageItem | |
key={file.id} | |
file={file} | |
showDeleteAction={showDeleteAction} | |
showDownloadAction={showDownloadAction} | |
onRemove={onRemove} | |
onReUpload={onReUpload} | |
canPreview={canPreview} | |
/> | |
) | |
} | |
return ( | |
<FileItem | |
key={file.id} | |
file={file} | |
showDeleteAction={showDeleteAction} | |
showDownloadAction={showDownloadAction} | |
onRemove={onRemove} | |
onReUpload={onReUpload} | |
/> | |
) | |
}) | |
} | |
</div> | |
) | |
} | |
type FileListInChatInputProps = { | |
fileConfig: FileUpload | |
} | |
export const FileListInChatInput = ({ | |
fileConfig, | |
}: FileListInChatInputProps) => { | |
const files = useStore(s => s.files) | |
const { | |
handleRemoveFile, | |
handleReUploadFile, | |
} = useFile(fileConfig) | |
return ( | |
<FileList | |
files={files} | |
onReUpload={handleReUploadFile} | |
onRemove={handleRemoveFile} | |
/> | |
) | |
} | |