pdf-file-list.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { useTranslation } from 'react-i18next'
  2. import { memo } from 'react'
  3. import {
  4. DropdownDivider,
  5. DropdownHeader,
  6. DropdownItem,
  7. } from '@/shared/components/dropdown/dropdown-menu'
  8. import { PdfFileData, PdfFileDataList } from '../util/types'
  9. function PdfFileList({ fileList }: { fileList: PdfFileDataList }) {
  10. const { t } = useTranslation()
  11. if (!fileList) {
  12. return null
  13. }
  14. function basename(file: PdfFileData) {
  15. return file.path.split('/').pop()
  16. }
  17. return (
  18. <>
  19. <DropdownHeader>{t('other_output_files')}</DropdownHeader>
  20. {fileList.top.map(file => (
  21. <li key={file.path} role="menuitem">
  22. <DropdownItem
  23. role="link"
  24. download={basename(file)}
  25. href={file.downloadURL || file.url}
  26. >
  27. {file.path}
  28. </DropdownItem>
  29. </li>
  30. ))}
  31. {fileList.other.length > 0 && fileList.top.length > 0 && (
  32. <DropdownDivider />
  33. )}
  34. {fileList.other.map(file => (
  35. <li key={file.path} role="menuitem">
  36. <DropdownItem
  37. role="link"
  38. download={basename(file)}
  39. href={file.downloadURL || file.url}
  40. >
  41. {file.path}
  42. </DropdownItem>
  43. </li>
  44. ))}
  45. {fileList.archive?.fileCount !== undefined &&
  46. fileList.archive?.fileCount > 0 && (
  47. <li role="menuitem">
  48. <DropdownItem
  49. role="link"
  50. download={basename(fileList.archive)}
  51. href={fileList.archive.url}
  52. >
  53. {t('download_all')} ({fileList.archive.fileCount})
  54. </DropdownItem>
  55. </li>
  56. )}
  57. </>
  58. )
  59. }
  60. export default memo(PdfFileList)