file-tree-toolbar.js 2.6 KB

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