Files
Rebeka Dekany 1ee87a823d Unify component wrappers and OL-prefix dropdown components (#35152)
* Rename dropdown primitives to OL-prefixed components

* Migrate all consumers to OL-prefixed dropdown components

* Migrate subscription dropdown shells to OL components

* Update pdf-preview story to OL-prefixed dropdown components

* Migrate navbar and spelling dropdowns to OL components

* Move dropdown primitives to ol/ol-dropdown-menu, remove BS5 import aliases

* Rename dropdown prop types to OL-prefixed, clean up BS5 import aliases

* Widen OLDropdownItem/Toggle/Menu props to include AriaAttributes and data-*

GitOrigin-RevId: 0babce46867849b3f176bac8cf1652dc76fd34da
2026-09-17 11:23:43 +00:00

106 lines
3.3 KiB
TypeScript

import { OLDropdownDivider } from '@/shared/components/ol/ol-dropdown-menu'
import { useTranslation } from 'react-i18next'
import { useEditorPropertiesContext } from '../../context/editor-properties-context'
import DropdownMenuItem from '@/shared/components/dropdown/dropdown-menu-item'
import { sendMB } from '@/infrastructure/event-tracking'
import { useIdeReactContext } from '../../context/ide-react-context'
import { usePermissionsContext } from '../../context/permissions-context'
import { useProjectContext } from '@/shared/context/project-context'
import { useEditorContext } from '@/shared/context/editor-context'
import { NestedMenuBarDropdown } from '@/shared/components/menu-bar/menu-bar-dropdown'
import { useUserContext } from '@/shared/context/user-context'
function getMode(permissionsLevel: string, wantTrackChanges: boolean) {
if (permissionsLevel === 'readOnly') {
return 'view'
}
if (permissionsLevel === 'review') {
return 'review'
}
if (wantTrackChanges) {
return 'review'
}
return 'edit'
}
const ReviewModeOptions: React.FC = () => {
const { t } = useTranslation()
const { wantTrackChanges } = useEditorPropertiesContext()
const { write, trackedWrite } = usePermissionsContext()
const { permissionsLevel } = useIdeReactContext()
const { features } = useProjectContext()
const { setUpgradeTrackChangesModal } = useEditorContext()
const user = useUserContext()
const mode = getMode(permissionsLevel, wantTrackChanges)
const showViewOption = mode === 'view'
if (!features.trackChangesVisible) {
return null
}
return (
<>
<OLDropdownDivider />
<NestedMenuBarDropdown id="editing-mode-group" title={t('editing_mode')}>
<DropdownMenuItem
as="button"
disabled={!write || !user.id}
onClick={() => {
if (mode === 'edit') {
return
}
sendMB('editing-mode-change', {
role: permissionsLevel,
previousMode: mode,
newMode: 'edit',
})
window.dispatchEvent(new Event('toggle-track-changes'))
}}
leadingIcon="edit"
active={write && mode === 'edit'}
>
{t('editing')}
</DropdownMenuItem>
<DropdownMenuItem
as="button"
disabled={permissionsLevel === 'readOnly' || !user.id}
onClick={() => {
if (mode === 'review') {
return
}
if (!features.trackChanges) {
setUpgradeTrackChangesModal({
show: true,
location: 'menu-bar',
})
} else {
sendMB('editing-mode-change', {
role: permissionsLevel,
previousMode: mode,
newMode: mode,
})
window.dispatchEvent(new Event('toggle-track-changes'))
}
}}
leadingIcon="rate_review"
active={trackedWrite && mode === 'review'}
>
{t('reviewing')}
</DropdownMenuItem>
{showViewOption && (
<DropdownMenuItem
as="button"
leadingIcon="visibility"
active={mode === 'view'}
>
{t('viewing')}
</DropdownMenuItem>
)}
</NestedMenuBarDropdown>
</>
)
}
export default ReviewModeOptions