file-tree-toolbar.js 2.4 KB

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