file-tree-toolbar.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import PropTypes from 'prop-types'
  2. import { useTranslation } from 'react-i18next'
  3. import { Button } from 'react-bootstrap'
  4. import Tooltip from '../../../shared/components/tooltip'
  5. import Icon from '../../../shared/components/icon'
  6. import { useEditorContext } from '../../../shared/context/editor-context'
  7. import { useFileTreeActionable } from '../contexts/file-tree-actionable'
  8. function FileTreeToolbar() {
  9. const { permissionsLevel } = useEditorContext(editorContextPropTypes)
  10. if (permissionsLevel === 'readOnly') return null
  11. return (
  12. <div className="toolbar toolbar-filetree">
  13. <FileTreeToolbarLeft />
  14. <FileTreeToolbarRight />
  15. </div>
  16. )
  17. }
  18. const editorContextPropTypes = {
  19. permissionsLevel: PropTypes.oneOf(['readOnly', 'readAndWrite', 'owner']),
  20. }
  21. function FileTreeToolbarLeft() {
  22. const { t } = useTranslation()
  23. const {
  24. canCreate,
  25. startCreatingFolder,
  26. startCreatingDocOrFile,
  27. startUploadingDocOrFile,
  28. } = useFileTreeActionable()
  29. if (!canCreate) return null
  30. return (
  31. <div className="toolbar-left">
  32. <Tooltip
  33. id="new-file"
  34. description={t('new_file')}
  35. overlayProps={{ placement: 'bottom' }}
  36. >
  37. <Button onClick={startCreatingDocOrFile}>
  38. <Icon type="file" fw accessibilityLabel={t('new_file')} />
  39. </Button>
  40. </Tooltip>
  41. <Tooltip
  42. id="new-folder"
  43. description={t('new_folder')}
  44. overlayProps={{ placement: 'bottom' }}
  45. >
  46. <Button onClick={startCreatingFolder}>
  47. <Icon type="folder" fw accessibilityLabel={t('new_folder')} />
  48. </Button>
  49. </Tooltip>
  50. <Tooltip
  51. id="upload"
  52. description={t('upload')}
  53. overlayProps={{ placement: 'bottom' }}
  54. >
  55. <Button onClick={startUploadingDocOrFile}>
  56. <Icon type="upload" fw accessibilityLabel={t('upload')} />
  57. </Button>
  58. </Tooltip>
  59. </div>
  60. )
  61. }
  62. function FileTreeToolbarRight() {
  63. const { t } = useTranslation()
  64. const { canRename, canDelete, startRenaming, startDeleting } =
  65. useFileTreeActionable()
  66. if (!canRename && !canDelete) {
  67. return null
  68. }
  69. return (
  70. <div className="toolbar-right">
  71. {canRename ? (
  72. <Tooltip
  73. id="rename"
  74. description={t('rename')}
  75. overlayProps={{ placement: 'bottom' }}
  76. >
  77. <Button onClick={startRenaming}>
  78. <Icon type="pencil" fw accessibilityLabel={t('rename')} />
  79. </Button>
  80. </Tooltip>
  81. ) : null}
  82. {canDelete ? (
  83. <Tooltip
  84. id="delete"
  85. description={t('delete')}
  86. overlayProps={{ placement: 'bottom' }}
  87. >
  88. <Button onClick={startDeleting}>
  89. <Icon type="trash-o" fw accessibilityLabel={t('delete')} />
  90. </Button>
  91. </Tooltip>
  92. ) : null}
  93. </div>
  94. )
  95. }
  96. export default FileTreeToolbar