document-file-icon.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React from 'react'
  4. import FileTypeIcon from '../../base/file-uploader/file-type-icon'
  5. import type { FileAppearanceType } from '@/app/components/base/file-uploader/types'
  6. import { FileAppearanceTypeEnum } from '@/app/components/base/file-uploader/types'
  7. const extendToFileTypeMap: { [key: string]: FileAppearanceType } = {
  8. pdf: FileAppearanceTypeEnum.pdf,
  9. json: FileAppearanceTypeEnum.document,
  10. html: FileAppearanceTypeEnum.document,
  11. txt: FileAppearanceTypeEnum.document,
  12. markdown: FileAppearanceTypeEnum.markdown,
  13. md: FileAppearanceTypeEnum.markdown,
  14. xlsx: FileAppearanceTypeEnum.excel,
  15. xls: FileAppearanceTypeEnum.excel,
  16. csv: FileAppearanceTypeEnum.excel,
  17. doc: FileAppearanceTypeEnum.word,
  18. docx: FileAppearanceTypeEnum.word,
  19. }
  20. type Props = {
  21. extension?: string
  22. name?: string
  23. size?: 'sm' | 'lg' | 'md'
  24. className?: string
  25. }
  26. const DocumentFileIcon: FC<Props> = ({
  27. extension,
  28. name,
  29. size = 'md',
  30. className,
  31. }) => {
  32. const localExtension = extension?.toLowerCase() || name?.split('.')?.pop()?.toLowerCase()
  33. return (
  34. <FileTypeIcon type={extendToFileTypeMap[localExtension!] || FileAppearanceTypeEnum.document} size={size} className={className} />
  35. )
  36. }
  37. export default React.memo(DocumentFileIcon)