LOCKING盒子版
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

46 satır
1.1 KiB

  1. import React from 'react';
  2. import { Image, ImageProps } from 'antd';
  3. import classNames from 'classnames';
  4. import { memo } from 'react';
  5. import styles from './fileIcon.less';
  6. import { memoize } from 'lodash';
  7. interface FileIconProps extends ImageProps {
  8. extension: string;
  9. }
  10. export default memo(function FileIcon(props: FileIconProps) {
  11. const { className, extension, ...restProps } = props;
  12. return (
  13. <div className={classNames(styles.fileIcon, className)}>
  14. <Image
  15. preview={false}
  16. {...restProps}
  17. src={fileIconSrc(extension)}
  18. fallback={fileIconSrc('default')}
  19. />
  20. </div>
  21. );
  22. });
  23. const fileIconSrc = memoize((extension: string) => {
  24. const fixedExtension = matchFileImage(extension);
  25. return `assets/file_icon/${fixedExtension}.svg`;
  26. });
  27. export function matchFileImage(extension: string) {
  28. switch (extension) {
  29. case 'ppt':
  30. case 'pptx':
  31. return 'ppt';
  32. case 'xls':
  33. case 'xlsx':
  34. return 'excel';
  35. case 'doc':
  36. case 'docx':
  37. return 'word';
  38. default:
  39. return extension;
  40. }
  41. }