lazy import code editor once, externalized codemirror

This commit is contained in:
dswbx
2025-01-14 15:07:09 +01:00
parent 7b0a41b297
commit a81aa875a8
7 changed files with 51 additions and 150 deletions
+29 -2
View File
@@ -1,8 +1,22 @@
import { default as CodeMirror, type ReactCodeMirrorProps } from "@uiw/react-codemirror";
import { useBknd } from "ui/client/bknd";
export default function CodeEditor({ editable, basicSetup, ...props }: ReactCodeMirrorProps) {
import { json } from "@codemirror/lang-json";
import { type LiquidCompletionConfig, liquid } from "@codemirror/lang-liquid";
export type CodeEditorProps = ReactCodeMirrorProps & {
_extensions?: Partial<{
json: boolean;
liquid: LiquidCompletionConfig;
}>;
};
export default function CodeEditor({
editable,
basicSetup,
_extensions = {},
...props
}: CodeEditorProps) {
const b = useBknd();
const theme = b.app.getAdminConfig().color_scheme;
const _basicSetup: Partial<ReactCodeMirrorProps["basicSetup"]> = !editable
@@ -13,11 +27,24 @@ export default function CodeEditor({ editable, basicSetup, ...props }: ReactCode
}
: basicSetup;
const extensions = Object.entries(_extensions ?? {})
.map(([ext, config]: any) => {
switch (ext) {
case "json":
return json();
case "liquid":
return liquid(config);
}
return undefined;
})
.filter(Boolean) as any;
return (
<CodeMirror
theme={theme === "dark" ? "dark" : "light"}
editable={editable}
basicSetup={_basicSetup}
extensions={extensions}
{...props}
/>
);