diff --git a/services/web/frontend/js/features/review-panel-new/components/review-mode-switcher.tsx b/services/web/frontend/js/features/review-panel-new/components/review-mode-switcher.tsx index f2bb2763bd..fab717c15d 100644 --- a/services/web/frontend/js/features/review-panel-new/components/review-mode-switcher.tsx +++ b/services/web/frontend/js/features/review-panel-new/components/review-mode-switcher.tsx @@ -30,7 +30,8 @@ const useCurrentMode = (): Mode => { const user = useUserContext() const trackChangesForCurrentUser = trackChanges?.onForEveryone || - (user && user.id && trackChanges?.onForMembers[user.id]) + (user?.id && trackChanges?.onForMembers[user.id]) || + (!user?.id && trackChanges?.onForGuests) const { permissionsLevel } = useEditorContext() if (permissionsLevel === 'readOnly') { @@ -46,7 +47,8 @@ const useCurrentMode = (): Mode => { function ReviewModeSwitcher() { const { t } = useTranslation() - const { saveTrackChangesForCurrentUser } = + const user = useUserContext() + const { saveTrackChangesForCurrentUser, saveTrackChanges } = useTrackChangesStateActionsContext() const mode = useCurrentMode() const { permissionsLevel } = useEditorContext() @@ -74,7 +76,11 @@ function ReviewModeSwitcher() { previousMode: mode, newMode: 'edit', }) - saveTrackChangesForCurrentUser(false) + if (user?.id) { + saveTrackChangesForCurrentUser(false) + } else { + saveTrackChanges({ on_for_guests: false }) + } }} description={t('edit_content_directly')} leadingIcon="edit" @@ -96,7 +102,11 @@ function ReviewModeSwitcher() { previousMode: mode, newMode: 'review', }) - saveTrackChangesForCurrentUser(true) + if (user?.id) { + saveTrackChangesForCurrentUser(true) + } else { + saveTrackChanges({ on_for_guests: true }) + } } }} description={ diff --git a/services/web/frontend/js/features/review-panel-new/context/track-changes-state-context.tsx b/services/web/frontend/js/features/review-panel-new/context/track-changes-state-context.tsx index b621ac8ed8..73ffe78b5d 100644 --- a/services/web/frontend/js/features/review-panel-new/context/track-changes-state-context.tsx +++ b/services/web/frontend/js/features/review-panel-new/context/track-changes-state-context.tsx @@ -20,6 +20,7 @@ import { usePermissionsContext } from '@/features/ide-react/context/permissions- export type TrackChangesState = { onForEveryone: boolean + onForGuests: boolean onForMembers: Record } @@ -30,6 +31,7 @@ export const TrackChangesStateContext = createContext< type SaveTrackChangesRequestBody = { on?: boolean on_for?: Record + on_for_guests?: boolean } type TrackChangesStateActions = { @@ -60,20 +62,22 @@ export const TrackChangesStateProvider: FC = ({ useEffect(() => { setWantTrackChanges( trackChangesValue === true || - (trackChangesValue !== false && !!user.id && trackChangesValue[user.id]) + (trackChangesValue !== false && + trackChangesValue[user.id ?? '__guests__']) ) }, [setWantTrackChanges, trackChangesValue, user.id]) const trackChangesIsObject = trackChangesValue !== true && trackChangesValue !== false const onForEveryone = trackChangesValue === true + const onForGuests = + onForEveryone || + (trackChangesIsObject && trackChangesValue.__guests__ === true) const onForMembers = useMemo(() => { const onForMembers: Record = {} if (trackChangesIsObject) { for (const key of Object.keys(trackChangesValue)) { - // TODO: Remove this check when we have converted - // all projects to the current format. if (key !== '__guests__') { onForMembers[key as UserId] = trackChangesValue[key as UserId] } @@ -141,8 +145,8 @@ export const TrackChangesStateProvider: FC = ({ ) const value = useMemo( - () => ({ onForEveryone, onForMembers }), - [onForEveryone, onForMembers] + () => ({ onForEveryone, onForGuests, onForMembers }), + [onForEveryone, onForGuests, onForMembers] ) return ( diff --git a/services/web/frontend/js/shared/context/types/project-context.tsx b/services/web/frontend/js/shared/context/types/project-context.tsx index 9f68f5e7a3..4e1abdc420 100644 --- a/services/web/frontend/js/shared/context/types/project-context.tsx +++ b/services/web/frontend/js/shared/context/types/project-context.tsx @@ -45,8 +45,6 @@ export type ProjectContextValue = { signUpDate: string } tags: Tag[] - // TODO: Remove __guests__ and boolean options when we have converted - // all projects to the current format. trackChangesState: boolean | Record projectSnapshot: ProjectSnapshot joinedOnce: boolean