Skip to content

Commit 4561db6

Browse files
committed
chore: lazy load editor
Signed-off-by: Amy <amy+git@amogus.cloud>
1 parent 288e8fe commit 4561db6

File tree

2 files changed

+58
-30
lines changed

2 files changed

+58
-30
lines changed

packages/client/components/app/interface/settings/user/appearance/AppearanceMenu.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
import { For, Match, Show, Switch, createSignal } from "solid-js";
1+
import {
2+
For,
3+
Match,
4+
Show,
5+
Suspense,
6+
Switch,
7+
createSignal,
8+
lazy,
9+
} from "solid-js";
210

311
import { Trans } from "@lingui-solid/solid/macro";
412
import { css } from "styled-system/css";
@@ -30,10 +38,12 @@ import {
3038
MONOSPACE_FONT_KEYS,
3139
MonospaceFonts,
3240
} from "@revolt/ui/themes/fonts";
33-
import { MonacoEditor } from "@revolt/ui/components/features/monaco/Monaco";
3441

3542
import MDPalette from "@material-design-icons/svg/outlined/palette.svg?component-solid";
3643

44+
const MonacoEditor = lazy(
45+
() => import("@revolt/ui/components/features/monaco/Monaco"),
46+
);
3747
/**
3848
* All appearance options for the client
3949
*/
@@ -412,9 +422,15 @@ export function AppearanceMenu() {
412422
<Text class="label">
413423
<Trans>Custom CSS (WIP)</Trans>
414424
</Text>
415-
<MonacoEditor defaultValue={state.theme.customCSS} onChange={(_, model) => {
416-
state.theme.customCSS = model?.getValue() ?? state.theme.customCSS
417-
}} />
425+
<Suspense>
426+
<MonacoEditor
427+
defaultValue={state.theme.customCSS}
428+
onChange={(_, model) => {
429+
state.theme.customCSS =
430+
model?.getValue() ?? state.theme.customCSS;
431+
}}
432+
/>
433+
</Suspense>
418434
</Column>
419435
</Column>
420436
);
Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,72 @@
1-
import { onCleanup, onMount } from "solid-js";
21
import * as monaco from "monaco-editor";
3-
import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker';
4-
import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker';
2+
import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker";
3+
import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker";
4+
import { onCleanup, onMount } from "solid-js";
55

66
import { cva } from "styled-system/css";
77

88
type Props = {
9-
defaultValue: string
10-
onChange?: (event: monaco.editor.IModelContentChangedEvent, editor: monaco.editor.IModel | null) => void
11-
}
9+
defaultValue: string;
10+
onChange?: (
11+
event: monaco.editor.IModelContentChangedEvent,
12+
editor: monaco.editor.IModel | null,
13+
) => void;
14+
};
1215

1316
self.MonacoEnvironment = {
1417
getWorker(_, label) {
1518
if (label == "css") {
16-
return new cssWorker()
19+
return new cssWorker();
1720
}
1821

19-
return new editorWorker()
20-
}
21-
}
22+
return new editorWorker();
23+
},
24+
};
2225

2326
const monacoStyle = cva({
2427
base: {
2528
width: "100%",
2629
height: "600px",
27-
border: "1px solid #ccc"
28-
}
29-
})
30+
border: "1px solid #ccc",
31+
},
32+
});
3033

31-
export function MonacoEditor(props: Props) {
32-
let element!: HTMLDivElement
34+
/**
35+
* Monaco Editor wrapper
36+
*/
37+
export default function MonacoEditor(props: Props) {
38+
let element!: HTMLDivElement;
3339
let editor: monaco.editor.IStandaloneCodeEditor;
34-
let disposables: (monaco.IDisposable | undefined)[] = [];
40+
const disposables: (monaco.IDisposable | undefined)[] = [];
3541

3642
onMount(() => {
3743
if (element?.isConnected) {
38-
editor = monaco.editor.create(element, {
39-
value: props.defaultValue,
40-
language: 'css',
41-
})
44+
editor = monaco.editor.create(element, {
45+
value: props.defaultValue,
46+
language: "css",
47+
});
4248

4349
if (props.onChange) {
44-
disposables.push(editor.getModel()?.onDidChangeContent((ev) => props.onChange!(ev, editor.getModel())));
50+
disposables.push(
51+
editor
52+
.getModel()
53+
?.onDidChangeContent((ev) =>
54+
props.onChange!(ev, editor.getModel()),
55+
),
56+
);
4557
}
4658
}
47-
})
59+
});
4860

4961
onCleanup(() => {
5062
for (const disposable of disposables) {
5163
if (!disposable) continue;
5264

53-
disposable.dispose()
65+
disposable.dispose();
5466
}
5567

5668
editor.dispose();
57-
})
69+
});
5870

59-
return <div class={"monaco " + monacoStyle()} ref={element} />
71+
return <div class={"monaco " + monacoStyle()} ref={element} />;
6072
}

0 commit comments

Comments
 (0)