From da2f7ff1536a4b1efe0e44337c2ab578373d6302 Mon Sep 17 00:00:00 2001 From: Domagoj Kriskovic Date: Mon, 18 Dec 2023 14:52:13 +0100 Subject: [PATCH] Store editor selection on a per-user rather than per-project basis (#16246) * Store editor selection on a per-user rather than per-project basis * set code editor if rich_text=false * format fix GitOrigin-RevId: 8efc33b682de211162e674839e6b891ec04e542e --- .../editor-manager-context-adapter.ts | 26 ++++++++++++++++--- .../frontend/js/ide/editor/EditorManager.js | 19 +++++++++++--- .../js/ide/toolbar/EditorLoaderController.js | 5 +--- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/services/web/frontend/js/features/ide-react/scope-adapters/editor-manager-context-adapter.ts b/services/web/frontend/js/features/ide-react/scope-adapters/editor-manager-context-adapter.ts index 7b2f49a6ad..370198fc84 100644 --- a/services/web/frontend/js/features/ide-react/scope-adapters/editor-manager-context-adapter.ts +++ b/services/web/frontend/js/features/ide-react/scope-adapters/editor-manager-context-adapter.ts @@ -1,4 +1,5 @@ import { ReactScopeValueStore } from '@/features/ide-react/scope-value-store/react-scope-value-store' +import customLocalStorage from '@/infrastructure/local-storage' export function populateEditorScope( store: ReactScopeValueStore, @@ -23,8 +24,25 @@ export function populateEditorScope( newSourceEditor: true, error_state: false, }) - store.persisted('editor.showVisual', false, `editor.mode.${projectId}`, { - toPersisted: showVisual => (showVisual ? 'rich-text' : 'source'), - fromPersisted: mode => mode === 'rich-text', - }) + store.persisted( + 'editor.showVisual', + showVisualFallbackValue(projectId), + `editor.lastUsedMode`, + { + toPersisted: showVisual => (showVisual ? 'visual' : 'code'), + fromPersisted: mode => mode === 'visual', + } + ) +} + +function showVisualFallbackValue(projectId: string) { + const editorModeKey = `editor.mode.${projectId}` + const editorModeVal = customLocalStorage.getItem(editorModeKey) + + if (editorModeVal) { + // clean up the old key + customLocalStorage.removeItem(editorModeKey) + } + + return editorModeVal === 'rich-text' } diff --git a/services/web/frontend/js/ide/editor/EditorManager.js b/services/web/frontend/js/ide/editor/EditorManager.js index 0f5f6c4229..49ae7a4517 100644 --- a/services/web/frontend/js/ide/editor/EditorManager.js +++ b/services/web/frontend/js/ide/editor/EditorManager.js @@ -22,6 +22,7 @@ import './controllers/CompileButton' import './controllers/SwitchToPDFButton' import '../metadata/services/metadata' import { debugConsole } from '@/utils/debugging' +import customLocalStorage from '@/infrastructure/local-storage' let EditorManager @@ -161,10 +162,20 @@ export default EditorManager = (function () { } showVisual() { - return ( - this.localStorage(`editor.mode.${this.$scope.project_id}`) === - 'rich-text' - ) + const editorModeKey = `editor.mode.${this.$scope.project_id}` + const editorModeVal = this.localStorage(editorModeKey) + + if (editorModeVal) { + // clean up the old key + customLocalStorage.removeItem(editorModeKey) + } + + const lastUsedMode = this.localStorage(`editor.lastUsedMode`) + if (lastUsedMode) { + return lastUsedMode === 'visual' + } else { + return editorModeVal === 'rich-text' + } } autoOpenDoc() { diff --git a/services/web/frontend/js/ide/toolbar/EditorLoaderController.js b/services/web/frontend/js/ide/toolbar/EditorLoaderController.js index d38d67a5af..1164e22157 100644 --- a/services/web/frontend/js/ide/toolbar/EditorLoaderController.js +++ b/services/web/frontend/js/ide/toolbar/EditorLoaderController.js @@ -5,10 +5,7 @@ App.controller('EditorLoaderController', [ 'localStorage', function ($scope, localStorage) { $scope.$watch('editor.showVisual', function (val) { - localStorage( - `editor.mode.${$scope.project_id}`, - val === true ? 'rich-text' : 'source' - ) + localStorage(`editor.lastUsedMode`, val === true ? 'visual' : 'code') }) }, ])