file-list.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { useFile } from '../hooks'
  2. import { useStore } from '../store'
  3. import type { FileEntity } from '../types'
  4. import FileImageItem from './file-image-item'
  5. import FileItem from './file-item'
  6. import type { FileUpload } from '@/app/components/base/features/types'
  7. import { SupportUploadFileTypes } from '@/app/components/workflow/types'
  8. import cn from '@/utils/classnames'
  9. type FileListProps = {
  10. className?: string
  11. files: FileEntity[]
  12. onRemove?: (fileId: string) => void
  13. onReUpload?: (fileId: string) => void
  14. showDeleteAction?: boolean
  15. showDownloadAction?: boolean
  16. canPreview?: boolean
  17. }
  18. export const FileList = ({
  19. className,
  20. files,
  21. onReUpload,
  22. onRemove,
  23. showDeleteAction = true,
  24. showDownloadAction = false,
  25. canPreview = true,
  26. }: FileListProps) => {
  27. return (
  28. <div className={cn('flex flex-wrap gap-2', className)}>
  29. {
  30. files.map((file) => {
  31. if (file.supportFileType === SupportUploadFileTypes.image) {
  32. return (
  33. <FileImageItem
  34. key={file.id}
  35. file={file}
  36. showDeleteAction={showDeleteAction}
  37. showDownloadAction={showDownloadAction}
  38. onRemove={onRemove}
  39. onReUpload={onReUpload}
  40. canPreview={canPreview}
  41. />
  42. )
  43. }
  44. return (
  45. <FileItem
  46. key={file.id}
  47. file={file}
  48. showDeleteAction={showDeleteAction}
  49. showDownloadAction={showDownloadAction}
  50. onRemove={onRemove}
  51. onReUpload={onReUpload}
  52. canPreview={canPreview}
  53. />
  54. )
  55. })
  56. }
  57. </div>
  58. )
  59. }
  60. type FileListInChatInputProps = {
  61. fileConfig: FileUpload
  62. }
  63. export const FileListInChatInput = ({
  64. fileConfig,
  65. }: FileListInChatInputProps) => {
  66. const files = useStore(s => s.files)
  67. const {
  68. handleRemoveFile,
  69. handleReUploadFile,
  70. } = useFile(fileConfig)
  71. return (
  72. <FileList
  73. files={files}
  74. onReUpload={handleReUploadFile}
  75. onRemove={handleRemoveFile}
  76. />
  77. )
  78. }