mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-15 14:43:46 +01:00
* 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
106 lines
3.3 KiB
TypeScript
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
|