Merge pull request #3890 from microsoft/hediet/b/bewildered-swordtail

Don't load monaco editor in fullscreen
This commit is contained in:
Henning Dieterichs 2023-04-05 12:57:23 +02:00 committed by GitHub
commit e0f314294d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 111 additions and 74 deletions

View file

@ -21,12 +21,24 @@ export interface IMonacoSetup {
monacoTypesUrl: string | undefined; monacoTypesUrl: string | undefined;
} }
let loadMonacoPromise: Promise<typeof monaco> | undefined; let loading = false;
let resolve: (value: typeof monaco) => void;
let reject: (error: unknown) => void;
let loadMonacoPromise = new Promise<typeof monaco>((res, rej) => {
resolve = res;
reject = rej;
});
export async function waitForLoadedMonaco(): Promise<typeof monaco> {
return loadMonacoPromise;
}
export async function loadMonaco( export async function loadMonaco(
setup: IMonacoSetup = prodMonacoSetup setup: IMonacoSetup = prodMonacoSetup
): Promise<typeof monaco> { ): Promise<typeof monaco> {
if (!loadMonacoPromise) { if (!loading) {
loadMonacoPromise = _loadMonaco(setup); loading = true;
_loadMonaco(setup).then(resolve, reject);
} }
return loadMonacoPromise; return loadMonacoPromise;
} }

View file

@ -12,7 +12,11 @@ import {
reaction, reaction,
runInAction, runInAction,
} from "mobx"; } from "mobx";
import { IMonacoSetup, loadMonaco } from "../../../monaco-loader"; import {
IMonacoSetup,
loadMonaco,
waitForLoadedMonaco,
} from "../../../monaco-loader";
import { IPlaygroundProject, IPreviewState } from "../../../shared"; import { IPlaygroundProject, IPreviewState } from "../../../shared";
import { monacoEditorVersion } from "../../monacoEditorVersion"; import { monacoEditorVersion } from "../../monacoEditorVersion";
import { Debouncer } from "../../utils/Debouncer"; import { Debouncer } from "../../utils/Debouncer";
@ -62,6 +66,17 @@ export class PlaygroundModel {
private readonly _previewHandlers = new Set<IPreviewHandler>(); private readonly _previewHandlers = new Set<IPreviewHandler>();
private _wasEverNonFullScreen = false;
public get wasEverNonFullScreen() {
if (this._wasEverNonFullScreen) {
return true;
}
if (!this.settings.previewFullScreen) {
this._wasEverNonFullScreen = true;
}
return this._wasEverNonFullScreen;
}
@computed.struct @computed.struct
get monacoSetup(): IMonacoSetup { get monacoSetup(): IMonacoSetup {
const sourceOverride = this.serializer.sourceOverride; const sourceOverride = this.serializer.sourceOverride;
@ -159,10 +174,10 @@ export class PlaygroundModel {
), ),
}); });
const observablePromise = new ObservablePromise(loadMonaco()); const observablePromise = new ObservablePromise(waitForLoadedMonaco());
let disposable: Disposable | undefined = undefined; let disposable: Disposable | undefined = undefined;
loadMonaco().then((m) => { waitForLoadedMonaco().then((m) => {
const options = const options =
monaco.languages.typescript.javascriptDefaults.getCompilerOptions(); monaco.languages.typescript.javascriptDefaults.getCompilerOptions();
monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions( monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions(

View file

@ -37,10 +37,13 @@ export class PlaygroundPageContent extends React.Component<
className="h-100 g-2" className="h-100 g-2"
style={{ flexWrap: "wrap-reverse" }} style={{ flexWrap: "wrap-reverse" }}
> >
{model.wasEverNonFullScreen && (
<Col <Col
md md
className={ className={
model.settings.previewFullScreen ? "d-none" : "" model.settings.previewFullScreen
? "d-none"
: ""
} }
> >
<Vertical> <Vertical>
@ -50,10 +53,14 @@ export class PlaygroundPageContent extends React.Component<
titleBarItems={ titleBarItems={
<div <div
className="hstack" className="hstack"
style={{ marginLeft: "auto" }} style={{
marginLeft: "auto",
}}
> >
<span <span
style={{ marginRight: 8 }} style={{
marginRight: 8,
}}
> >
Example: Example:
</span> </span>
@ -69,7 +76,9 @@ export class PlaygroundPageContent extends React.Component<
model, model,
"selectedExample" "selectedExample"
)} )}
getLabel={(i) => i.title} getLabel={(i) =>
i.title
}
/> />
</div> </div>
} }
@ -108,6 +117,7 @@ export class PlaygroundPageContent extends React.Component<
</div> </div>
</Vertical> </Vertical>
</Col> </Col>
)}
<Col md> <Col md>
<LabeledEditor <LabeledEditor
label="Preview" label="Preview"