diff --git a/services/web/app/src/Features/Project/UserSettingsHelper.mjs b/services/web/app/src/Features/Project/UserSettingsHelper.mjs index 39dd284143..834651bff2 100644 --- a/services/web/app/src/Features/Project/UserSettingsHelper.mjs +++ b/services/web/app/src/Features/Project/UserSettingsHelper.mjs @@ -1,35 +1,5 @@ import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs' -// Copied from services/web/frontend/js/features/ide-redesign/utils/new-editor-utils.ts -const SPLIT_TEST_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 8, 23, 13, 0, 0)) // 2pm British Summer Time on September 23, 2025 -const NEW_USER_CUTOFF_DATE = new Date(Date.UTC(2025, 10, 12, 12, 0, 0)) // 12pm GMT on November 12, 2025 - -async function getEnableNewEditorLegacyDefault(req, res, user) { - if (req.query['existing-user-override'] === 'true') { - return false - } - - if (req.query['skip-new-user-check'] === 'true') { - return true - } - - if (user.signUpDate >= NEW_USER_CUTOFF_DATE) { - return true - } - - if (user.signUpDate >= SPLIT_TEST_USER_CUTOFF_DATE) { - const assignment = await SplitTestHandler.promises.getAssignment( - req, - res, - 'editor-redesign-new-users' - ) - - return assignment.variant !== 'default' - } - - return false -} - const SYSTEM_THEME_USER_CUTOFF_DATE = new Date(Date.UTC(2026, 2, 2, 12, 0, 0)) // 12pm GMT on March 2, 2026 async function getOverallTheme(req, res, user) { @@ -58,16 +28,6 @@ async function getOverallTheme(req, res, user) { } async function buildUserSettings(req, res, user) { - const defaultLegacyEnableNewEditor = await getEnableNewEditorLegacyDefault( - req, - res, - user - ) - - const enableNewEditorStageFour = user.ace.enableNewEditorStageFour ?? true - const enableNewEditorLegacy = - user.ace.enableNewEditor ?? defaultLegacyEnableNewEditor - return { mode: user.ace.mode, editorTheme: user.ace.theme, @@ -84,8 +44,6 @@ async function buildUserSettings(req, res, user) { mathPreview: user.ace.mathPreview, breadcrumbs: user.ace.breadcrumbs, referencesSearchMode: user.ace.referencesSearchMode, - enableNewEditor: enableNewEditorStageFour, - enableNewEditorLegacy, darkModePdf: user.ace.darkModePdf ?? false, } } diff --git a/services/web/app/src/Features/User/UserController.mjs b/services/web/app/src/Features/User/UserController.mjs index 37cc016f9c..08e795bcc3 100644 --- a/services/web/app/src/Features/User/UserController.mjs +++ b/services/web/app/src/Features/User/UserController.mjs @@ -410,9 +410,6 @@ async function updateUserSettings(req, res, next) { const mode = body.referencesSearchMode === 'simple' ? 'simple' : 'advanced' user.ace.referencesSearchMode = mode } - if (body.enableNewEditor != null) { - user.ace.enableNewEditorStageFour = Boolean(body.enableNewEditor) - } if (body.darkModePdf != null) { user.ace.darkModePdf = Boolean(body.darkModePdf) } diff --git a/services/web/app/src/models/User.mjs b/services/web/app/src/models/User.mjs index 8cdb0a0114..01828324ae 100644 --- a/services/web/app/src/models/User.mjs +++ b/services/web/app/src/models/User.mjs @@ -93,11 +93,6 @@ export const UserSchema = new Schema( mathPreview: { type: Boolean, default: true }, breadcrumbs: { type: Boolean, default: true }, referencesSearchMode: { type: String, default: 'advanced' }, // 'advanced' or 'simple' - // enableNewEditor is being phased out in favor of enableNewEditorStageFour - // when moving the new editor to opt out (stage 4). However, we need to keep the - // old field for determining whether to show promotional material to users. - enableNewEditor: { type: Boolean }, - enableNewEditorStageFour: { type: Boolean }, darkModePdf: { type: Boolean, default: false }, }, features: { diff --git a/services/web/frontend/js/features/source-editor/hooks/use-codemirror-scope.ts b/services/web/frontend/js/features/source-editor/hooks/use-codemirror-scope.ts index e979347134..33f5f2fc71 100644 --- a/services/web/frontend/js/features/source-editor/hooks/use-codemirror-scope.ts +++ b/services/web/frontend/js/features/source-editor/hooks/use-codemirror-scope.ts @@ -89,7 +89,6 @@ function useCodeMirrorScope(view: EditorView) { syntaxValidation, mathPreview, referencesSearchMode, - enableNewEditor, } = userSettings const activeOverallTheme = useActiveOverallTheme() const editorTheme = useActiveEditorTheme() @@ -160,7 +159,6 @@ function useCodeMirrorScope(view: EditorView) { syntaxValidation, mathPreview, referencesSearchMode, - enableNewEditor, }) const currentDocRef = useRef({ diff --git a/services/web/frontend/js/shared/context/user-settings-context.tsx b/services/web/frontend/js/shared/context/user-settings-context.tsx index 52422d033e..3fbaef33f1 100644 --- a/services/web/frontend/js/shared/context/user-settings-context.tsx +++ b/services/web/frontend/js/shared/context/user-settings-context.tsx @@ -25,8 +25,6 @@ export const defaultSettings: UserSettings = { lineHeight: 'normal', mathPreview: true, referencesSearchMode: 'advanced', - enableNewEditor: true, - enableNewEditorLegacy: true, breadcrumbs: true, darkModePdf: false, } diff --git a/services/web/test/frontend/helpers/editor-providers.tsx b/services/web/test/frontend/helpers/editor-providers.tsx index a3186c4ad5..bfeb21dcb2 100644 --- a/services/web/test/frontend/helpers/editor-providers.tsx +++ b/services/web/test/frontend/helpers/editor-providers.tsx @@ -66,8 +66,6 @@ export const USER_EMAIL = 'testuser@example.com' const defaultUserSettings = { ...defaultSettings, - enableNewEditor: false, - enableNewEditorLegacy: false, referencesSearchMode: 'simple', } satisfies UserSettings diff --git a/services/web/test/unit/src/User/UserController.test.mjs b/services/web/test/unit/src/User/UserController.test.mjs index cfc0e5849c..8355920ed0 100644 --- a/services/web/test/unit/src/User/UserController.test.mjs +++ b/services/web/test/unit/src/User/UserController.test.mjs @@ -532,39 +532,6 @@ describe('UserController', function () { }) }) - it('should set enableNewEditorStageFour to true', function (ctx) { - return new Promise(resolve => { - ctx.req.body = { enableNewEditor: true } - ctx.res.sendStatus = code => { - ctx.user.ace.enableNewEditorStageFour.should.equal(true) - resolve() - } - ctx.UserController.updateUserSettings(ctx.req, ctx.res) - }) - }) - - it('should set enableNewEditorStageFour to false', function (ctx) { - return new Promise(resolve => { - ctx.req.body = { enableNewEditor: false } - ctx.res.sendStatus = code => { - ctx.user.ace.enableNewEditorStageFour.should.equal(false) - resolve() - } - ctx.UserController.updateUserSettings(ctx.req, ctx.res) - }) - }) - - it('should keep enableNewEditorStageFour a boolean', function (ctx) { - return new Promise(resolve => { - ctx.req.body = { enableNewEditor: 'foobar' } - ctx.res.sendStatus = code => { - ctx.user.ace.enableNewEditorStageFour.should.equal(true) - resolve() - } - ctx.UserController.updateUserSettings(ctx.req, ctx.res) - }) - }) - it('should set darkModePdf to true', function (ctx) { return new Promise(resolve => { ctx.req.body = { darkModePdf: true } diff --git a/services/web/types/user-settings.ts b/services/web/types/user-settings.ts index ac818eaadd..9c2b2e68b1 100644 --- a/services/web/types/user-settings.ts +++ b/services/web/types/user-settings.ts @@ -18,8 +18,6 @@ export type UserSettings = { lineHeight: LineHeight mathPreview: boolean referencesSearchMode: 'advanced' | 'simple' - enableNewEditor: boolean - enableNewEditorLegacy: boolean breadcrumbs: boolean darkModePdf: boolean }