index.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const { h } = require('preact')
  2. const prettyBytes = require('@uppy/utils/lib/prettyBytes')
  3. const truncateString = require('../../../utils/truncateString')
  4. const renderAcquirerIcon = (acquirer, props) =>
  5. <span title={props.i18n('fileSource', { name: acquirer.name })}>
  6. {acquirer.icon()}
  7. </span>
  8. const renderFileSource = (props) => (
  9. props.file.source &&
  10. props.file.source !== props.id &&
  11. <div class="uppy-DashboardItem-sourceIcon">
  12. {props.acquirers.map(acquirer => {
  13. if (acquirer.id === props.file.source) {
  14. return renderAcquirerIcon(acquirer, props)
  15. }
  16. })}
  17. </div>
  18. )
  19. const renderFileName = (props) => {
  20. // Take up at most 2 lines on any screen
  21. let maxNameLength
  22. // For very small mobile screens
  23. if (props.containerWidth <= 352) {
  24. maxNameLength = 35
  25. // For regular mobile screens
  26. } else if (props.containerWidth <= 576) {
  27. maxNameLength = 60
  28. // For desktops
  29. } else {
  30. maxNameLength = 30
  31. }
  32. return (
  33. <div class="uppy-DashboardItem-name" title={props.file.meta.name}>
  34. {truncateString(props.file.meta.name, maxNameLength)}
  35. </div>
  36. )
  37. }
  38. const renderFileSize = (props) => (
  39. props.file.data.size &&
  40. <div class="uppy-DashboardItem-statusSize">
  41. {prettyBytes(props.file.data.size)}
  42. </div>
  43. )
  44. module.exports = function FileInfo (props) {
  45. return (
  46. <div class="uppy-DashboardItem-fileInfo" data-uppy-file-source={props.file.source}>
  47. {renderFileName(props)}
  48. <div class="uppy-DashboardItem-status">
  49. {renderFileSize(props)}
  50. {renderFileSource(props)}
  51. </div>
  52. </div>
  53. )
  54. }