Dashboard.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. const FileList = require('./FileList')
  2. const AddFiles = require('./AddFiles')
  3. const AddFilesPanel = require('./AddFilesPanel')
  4. const PickerPanelContent = require('./PickerPanelContent')
  5. const PanelTopBar = require('./PickerPanelTopBar')
  6. const FileCard = require('./FileCard')
  7. const classNames = require('classnames')
  8. const isTouchDevice = require('@uppy/utils/lib/isTouchDevice')
  9. const { h } = require('preact')
  10. const PreactCSSTransitionGroup = require('preact-css-transition-group')
  11. // http://dev.edenspiekermann.com/2016/02/11/introducing-accessible-modal-dialog
  12. // https://github.com/ghosh/micromodal
  13. function TransitionWrapper (props) {
  14. return (
  15. <PreactCSSTransitionGroup
  16. transitionName="uppy-transition-slideDownUp"
  17. transitionEnterTimeout={250}
  18. transitionLeaveTimeout={250}>
  19. {props.children}
  20. </PreactCSSTransitionGroup>
  21. )
  22. }
  23. module.exports = function Dashboard (props) {
  24. const noFiles = props.totalFileCount === 0
  25. const dashboardClassName = classNames(
  26. { 'uppy-Root': props.isTargetDOMEl },
  27. 'uppy-Dashboard',
  28. { 'Uppy--isTouchDevice': isTouchDevice() },
  29. { 'uppy-Dashboard--animateOpenClose': props.animateOpenClose },
  30. { 'uppy-Dashboard--isClosing': props.isClosing },
  31. { 'uppy-Dashboard--isDraggingOver': props.isDraggingOver },
  32. { 'uppy-Dashboard--modal': !props.inline },
  33. { 'uppy-size--md': props.containerWidth > 576 },
  34. { 'uppy-size--lg': props.containerWidth > 700 },
  35. { 'uppy-size--xl': props.containerWidth > 900 },
  36. { 'uppy-Dashboard--isAddFilesPanelVisible': props.showAddFilesPanel },
  37. { 'uppy-Dashboard--isInnerWrapVisible': props.areInsidesReadyToBeVisible }
  38. )
  39. return (
  40. <div class={dashboardClassName}
  41. aria-hidden={props.inline ? 'false' : props.isHidden}
  42. aria-label={!props.inline ? props.i18n('dashboardWindowTitle') : props.i18n('dashboardTitle')}
  43. onpaste={props.handlePaste}
  44. onDragOver={props.handleDragOver}
  45. onDragLeave={props.handleDragLeave}
  46. onDrop={props.handleDrop}
  47. >
  48. <div class="uppy-Dashboard-overlay" tabindex={-1} onclick={props.handleClickOutside} />
  49. <div class="uppy-Dashboard-inner"
  50. aria-modal={!props.inline && 'true'}
  51. role={!props.inline && 'dialog'}
  52. style={{
  53. width: props.inline && props.width ? props.width : '',
  54. height: props.inline && props.height ? props.height : ''
  55. }}>
  56. {!props.inline
  57. ? <button class="uppy-u-reset uppy-Dashboard-close"
  58. type="button"
  59. aria-label={props.i18n('closeModal')}
  60. title={props.i18n('closeModal')}
  61. onclick={props.closeModal}>
  62. <span aria-hidden="true">&times;</span>
  63. </button>
  64. : null
  65. }
  66. <div class="uppy-Dashboard-innerWrap">
  67. <div class="uppy-Dashboard-dropFilesHereHint">
  68. {props.i18n('dropHint')}
  69. </div>
  70. { (!noFiles && props.showSelectedFiles) && <PanelTopBar {...props} /> }
  71. { props.showSelectedFiles ? (
  72. noFiles ? <AddFiles {...props} /> : <FileList {...props} />
  73. ) : (
  74. <AddFiles {...props} />
  75. )}
  76. <TransitionWrapper>
  77. { props.showAddFilesPanel ? <AddFilesPanel key="AddFilesPanel" {...props} /> : null }
  78. </TransitionWrapper>
  79. <TransitionWrapper>
  80. { props.fileCardFor ? <FileCard key="FileCard" {...props} /> : null }
  81. </TransitionWrapper>
  82. <TransitionWrapper>
  83. { props.activePickerPanel ? <PickerPanelContent key="PickerPanelContent" {...props} /> : null }
  84. </TransitionWrapper>
  85. <div class="uppy-Dashboard-progressindicators">
  86. {props.progressindicators.map((target) => {
  87. return props.getPlugin(target.id).render(props.state)
  88. })}
  89. </div>
  90. </div>
  91. </div>
  92. </div>
  93. )
  94. }