From 842214b80e318a89be9bf08d1f7a8ab9e0dfa635 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Wed, 5 Apr 2023 12:45:50 +0200 Subject: [PATCH] Don't load monaco editor in fullscreen --- website/src/monaco-loader.ts | 18 ++- .../pages/playground/PlaygroundModel.ts | 21 ++- .../playground/PlaygroundPageContent.tsx | 146 ++++++++++-------- 3 files changed, 111 insertions(+), 74 deletions(-) diff --git a/website/src/monaco-loader.ts b/website/src/monaco-loader.ts index acfe4035..2c771a0c 100644 --- a/website/src/monaco-loader.ts +++ b/website/src/monaco-loader.ts @@ -21,12 +21,24 @@ export interface IMonacoSetup { monacoTypesUrl: string | undefined; } -let loadMonacoPromise: Promise | undefined; +let loading = false; +let resolve: (value: typeof monaco) => void; +let reject: (error: unknown) => void; +let loadMonacoPromise = new Promise((res, rej) => { + resolve = res; + reject = rej; +}); + +export async function waitForLoadedMonaco(): Promise { + return loadMonacoPromise; +} + export async function loadMonaco( setup: IMonacoSetup = prodMonacoSetup ): Promise { - if (!loadMonacoPromise) { - loadMonacoPromise = _loadMonaco(setup); + if (!loading) { + loading = true; + _loadMonaco(setup).then(resolve, reject); } return loadMonacoPromise; } diff --git a/website/src/website/pages/playground/PlaygroundModel.ts b/website/src/website/pages/playground/PlaygroundModel.ts index 15ae15f8..4e72d346 100644 --- a/website/src/website/pages/playground/PlaygroundModel.ts +++ b/website/src/website/pages/playground/PlaygroundModel.ts @@ -12,7 +12,11 @@ import { reaction, runInAction, } from "mobx"; -import { IMonacoSetup, loadMonaco } from "../../../monaco-loader"; +import { + IMonacoSetup, + loadMonaco, + waitForLoadedMonaco, +} from "../../../monaco-loader"; import { IPlaygroundProject, IPreviewState } from "../../../shared"; import { monacoEditorVersion } from "../../monacoEditorVersion"; import { Debouncer } from "../../utils/Debouncer"; @@ -62,6 +66,17 @@ export class PlaygroundModel { private readonly _previewHandlers = new Set(); + private _wasEverNonFullScreen = false; + public get wasEverNonFullScreen() { + if (this._wasEverNonFullScreen) { + return true; + } + if (!this.settings.previewFullScreen) { + this._wasEverNonFullScreen = true; + } + return this._wasEverNonFullScreen; + } + @computed.struct get monacoSetup(): IMonacoSetup { const sourceOverride = this.serializer.sourceOverride; @@ -142,10 +157,10 @@ export class PlaygroundModel { ), }); - const observablePromise = new ObservablePromise(loadMonaco()); + const observablePromise = new ObservablePromise(waitForLoadedMonaco()); let disposable: Disposable | undefined = undefined; - loadMonaco().then((m) => { + waitForLoadedMonaco().then((m) => { const options = monaco.languages.typescript.javascriptDefaults.getCompilerOptions(); monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions( diff --git a/website/src/website/pages/playground/PlaygroundPageContent.tsx b/website/src/website/pages/playground/PlaygroundPageContent.tsx index 7968b323..c6deae0f 100644 --- a/website/src/website/pages/playground/PlaygroundPageContent.tsx +++ b/website/src/website/pages/playground/PlaygroundPageContent.tsx @@ -37,77 +37,87 @@ export class PlaygroundPageContent extends React.Component< className="h-100 g-2" style={{ flexWrap: "wrap-reverse" }} > - - -
- - + +
+ - Example: - - - values={getPlaygroundExamples().map( - (e) => ({ - groupTitle: - e.chapterTitle, - items: e.examples, - }) - )} - value={ref( - model, - "selectedExample" - )} - getLabel={(i) => i.title} - /> -
- } - > - -
-
+ + Example: + + + values={getPlaygroundExamples().map( + (e) => ({ + groupTitle: + e.chapterTitle, + items: e.examples, + }) + )} + value={ref( + model, + "selectedExample" + )} + getLabel={(i) => + i.title + } + /> + + } + > + + + -
- - - -
+
+ + + +
-
- - - -
-
- +
+ + + +
+ + + )}