file-tree-toolbar.js 2.6 KB

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