review-mode-options.tsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { DropdownDivider } from '@/shared/components/dropdown/dropdown-menu'
  2. import { useTranslation } from 'react-i18next'
  3. import { useEditorPropertiesContext } from '../../context/editor-properties-context'
  4. import OLDropdownMenuItem from '@/shared/components/ol/ol-dropdown-menu-item'
  5. import { sendMB } from '@/infrastructure/event-tracking'
  6. import { useIdeReactContext } from '../../context/ide-react-context'
  7. import { usePermissionsContext } from '../../context/permissions-context'
  8. import { useProjectContext } from '@/shared/context/project-context'
  9. import { useEditorContext } from '@/shared/context/editor-context'
  10. import { NestedMenuBarDropdown } from '@/shared/components/menu-bar/menu-bar-dropdown'
  11. import { useUserContext } from '@/shared/context/user-context'
  12. function getMode(permissionsLevel: string, wantTrackChanges: boolean) {
  13. if (permissionsLevel === 'readOnly') {
  14. return 'view'
  15. }
  16. if (permissionsLevel === 'review') {
  17. return 'review'
  18. }
  19. if (wantTrackChanges) {
  20. return 'review'
  21. }
  22. return 'edit'
  23. }
  24. const ReviewModeOptions: React.FC = () => {
  25. const { t } = useTranslation()
  26. const { wantTrackChanges } = useEditorPropertiesContext()
  27. const { write, trackedWrite } = usePermissionsContext()
  28. const { permissionsLevel } = useIdeReactContext()
  29. const { features } = useProjectContext()
  30. const { setUpgradeTrackChangesModal } = useEditorContext()
  31. const user = useUserContext()
  32. const mode = getMode(permissionsLevel, wantTrackChanges)
  33. const showViewOption = mode === 'view'
  34. if (!features.trackChangesVisible) {
  35. return null
  36. }
  37. return (
  38. <>
  39. <DropdownDivider />
  40. <NestedMenuBarDropdown id="editing-mode-group" title={t('editing_mode')}>
  41. <OLDropdownMenuItem
  42. as="button"
  43. disabled={!write || !user.id}
  44. onClick={() => {
  45. if (mode === 'edit') {
  46. return
  47. }
  48. sendMB('editing-mode-change', {
  49. role: permissionsLevel,
  50. previousMode: mode,
  51. newMode: 'edit',
  52. })
  53. window.dispatchEvent(new Event('toggle-track-changes'))
  54. }}
  55. leadingIcon="edit"
  56. active={write && mode === 'edit'}
  57. >
  58. {t('editing')}
  59. </OLDropdownMenuItem>
  60. <OLDropdownMenuItem
  61. as="button"
  62. disabled={permissionsLevel === 'readOnly' || !user.id}
  63. onClick={() => {
  64. if (mode === 'review') {
  65. return
  66. }
  67. if (!features.trackChanges) {
  68. setUpgradeTrackChangesModal({
  69. show: true,
  70. location: 'menu-bar',
  71. })
  72. } else {
  73. sendMB('editing-mode-change', {
  74. role: permissionsLevel,
  75. previousMode: mode,
  76. newMode: mode,
  77. })
  78. window.dispatchEvent(new Event('toggle-track-changes'))
  79. }
  80. }}
  81. leadingIcon="rate_review"
  82. active={trackedWrite && mode === 'review'}
  83. >
  84. {t('reviewing')}
  85. </OLDropdownMenuItem>
  86. {showViewOption && (
  87. <OLDropdownMenuItem
  88. as="button"
  89. leadingIcon="visibility"
  90. active={mode === 'view'}
  91. >
  92. {t('viewing')}
  93. </OLDropdownMenuItem>
  94. )}
  95. </NestedMenuBarDropdown>
  96. </>
  97. )
  98. }
  99. export default ReviewModeOptions