diff --git a/services/web/frontend/js/features/review-panel-new/context/review-panel-providers.tsx b/services/web/frontend/js/features/review-panel-new/context/review-panel-providers.tsx index 20e157dfee9..ad943772d0d 100644 --- a/services/web/frontend/js/features/review-panel-new/context/review-panel-providers.tsx +++ b/services/web/frontend/js/features/review-panel-new/context/review-panel-providers.tsx @@ -4,10 +4,16 @@ import { ChangesUsersProvider } from './changes-users-context' import { TrackChangesStateProvider } from './track-changes-state-context' import { ThreadsProvider } from './threads-context' import { ReviewPanelViewProvider } from './review-panel-view-context' +import { useProjectContext } from '@/shared/context/project-context' export const ReviewPanelProviders: FC = ({ children, }) => { + const { features } = useProjectContext() + if (!features.trackChangesVisible) { + return children + } + return ( diff --git a/services/web/frontend/js/features/share-project-modal/components/add-collaborators.tsx b/services/web/frontend/js/features/share-project-modal/components/add-collaborators.tsx index 8606fb11fad..e80fb037116 100644 --- a/services/web/frontend/js/features/share-project-modal/components/add-collaborators.tsx +++ b/services/web/frontend/js/features/share-project-modal/components/add-collaborators.tsx @@ -176,24 +176,34 @@ export default function AddCollaborators({ readOnly }: { readOnly?: boolean }) { ]) const privilegeOptions = useMemo(() => { - return [ + const options: { + key: string + label: string + description?: string | null + }[] = [ { key: 'readAndWrite', label: t('editor'), }, - { + ] + + if (features.trackChangesVisible) { + options.push({ key: 'review', label: t('reviewer'), description: !features.trackChanges ? t('comment_only_upgrade_for_track_changes') : null, - }, - { - key: 'readOnly', - label: t('viewer'), - }, - ] - }, [features.trackChanges, t]) + }) + } + + options.push({ + key: 'readOnly', + label: t('viewer'), + }) + + return options + }, [features.trackChanges, features.trackChangesVisible, t]) return ( diff --git a/services/web/frontend/js/features/share-project-modal/components/edit-member.tsx b/services/web/frontend/js/features/share-project-modal/components/edit-member.tsx index 6d806968b12..9f24cddc4ad 100644 --- a/services/web/frontend/js/features/share-project-modal/components/edit-member.tsx +++ b/services/web/frontend/js/features/share-project-modal/components/edit-member.tsx @@ -244,14 +244,22 @@ function SelectPrivilege({ const { features } = useProjectContext() const privileges = useMemo( - (): Privilege[] => [ - { key: 'owner', label: t('make_owner') }, - { key: 'readAndWrite', label: t('editor') }, - { key: 'review', label: t('reviewer') }, - { key: 'readOnly', label: t('viewer') }, - { key: 'removeAccess', label: t('remove_access') }, - ], - [t] + (): Privilege[] => + features.trackChangesVisible + ? [ + { key: 'owner', label: t('make_owner') }, + { key: 'readAndWrite', label: t('editor') }, + { key: 'review', label: t('reviewer') }, + { key: 'readOnly', label: t('viewer') }, + { key: 'removeAccess', label: t('remove_access') }, + ] + : [ + { key: 'owner', label: t('make_owner') }, + { key: 'readAndWrite', label: t('editor') }, + { key: 'readOnly', label: t('viewer') }, + { key: 'removeAccess', label: t('remove_access') }, + ], + [features.trackChangesVisible, t] ) const downgradedPseudoPrivilege: Privilege = { diff --git a/services/web/frontend/js/features/source-editor/components/codemirror-editor.tsx b/services/web/frontend/js/features/source-editor/components/codemirror-editor.tsx index c1808cbb301..4bdfe2682c8 100644 --- a/services/web/frontend/js/features/source-editor/components/codemirror-editor.tsx +++ b/services/web/frontend/js/features/source-editor/components/codemirror-editor.tsx @@ -18,6 +18,7 @@ import { } from './codemirror-context' import MathPreviewTooltip from './math-preview-tooltip' import { useToolbarMenuBarEditorCommands } from '@/features/ide-redesign/hooks/use-toolbar-menu-editor-commands' +import { useProjectContext } from '@/shared/context/project-context' // TODO: remove this when definitely no longer used export * from './codemirror-context' @@ -67,6 +68,7 @@ function CodeMirrorEditor() { function CodeMirrorEditorComponents() { useToolbarMenuBarEditorCommands() + const { features } = useProjectContext() return ( @@ -83,8 +85,8 @@ function CodeMirrorEditorComponents() { - - + {features.trackChangesVisible && } + {features.trackChangesVisible && } {sourceEditorComponents.map( ({ import: { default: Component }, path }) => ( diff --git a/services/web/frontend/js/features/source-editor/components/toolbar/toolbar-items.tsx b/services/web/frontend/js/features/source-editor/components/toolbar/toolbar-items.tsx index e70663683fc..c5d9f3d3e47 100644 --- a/services/web/frontend/js/features/source-editor/components/toolbar/toolbar-items.tsx +++ b/services/web/frontend/js/features/source-editor/components/toolbar/toolbar-items.tsx @@ -14,6 +14,7 @@ import { LegacyTableDropdown } from './table-inserter-dropdown-legacy' import { withinFormattingCommand } from '@/features/source-editor/utils/tree-operations/formatting' import { isSplitTestEnabled } from '@/utils/splitTestUtils' import { isMac } from '@/shared/utils/os' +import { useProjectContext } from '@/shared/context/project-context' export const ToolbarItems: FC<{ state: EditorState @@ -31,6 +32,7 @@ export const ToolbarItems: FC<{ const { t } = useTranslation() const { toggleSymbolPalette, showSymbolPalette, writefullInstance } = useEditorContext() + const { features } = useProjectContext() const isActive = withinFormattingCommand(state) const symbolPaletteAvailable = getMeta('ol-symbolPaletteAvailable') @@ -127,13 +129,15 @@ export const ToolbarItems: FC<{ command={commands.wrapInHref} icon="add_link" /> - + {features.trackChangesVisible && ( + + )} ', function () { removeChangeIds, }, }, + projectFeatures: { trackChangesVisible: true }, }) cy.wrap(scope).as('scope') @@ -626,7 +627,7 @@ describe(' for free users', function () { function mountEditor(ownerId = USER_ID) { const scope = mockScope(undefined, { permissions: { write: true, trackedWrite: false, comment: true }, - projectFeatures: { trackChanges: false }, + projectFeatures: { trackChanges: false, trackChangesVisible: true }, projectOwner: { _id: ownerId, }, diff --git a/services/web/test/frontend/features/share-project-modal/components/share-project-modal.test.jsx b/services/web/test/frontend/features/share-project-modal/components/share-project-modal.test.jsx index b86207fb0f7..dfce8134d1c 100644 --- a/services/web/test/frontend/features/share-project-modal/components/share-project-modal.test.jsx +++ b/services/web/test/frontend/features/share-project-modal/components/share-project-modal.test.jsx @@ -694,6 +694,7 @@ describe('', function () { features: { collaborators: 0, compileGroup: 'standard', + trackChangesVisible: true, }, }, }, @@ -723,6 +724,7 @@ describe('', function () { ...project, features: { collaborators: 1, + trackChangesVisible: true, }, members: [ {