mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-16 20:37:21 +00:00
lazy import code editor once, externalized codemirror
This commit is contained in:
@@ -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}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import { json } from "@codemirror/lang-json";
|
||||
import type { ReactCodeMirrorProps } from "@uiw/react-codemirror";
|
||||
import { Suspense, lazy } from "react";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
import type { CodeEditorProps } from "./CodeEditor";
|
||||
const CodeEditor = lazy(() => import("./CodeEditor"));
|
||||
|
||||
export function JsonEditor({ editable, className, ...props }: ReactCodeMirrorProps) {
|
||||
export function JsonEditor({ editable, className, ...props }: CodeEditorProps) {
|
||||
return (
|
||||
<Suspense fallback={null}>
|
||||
<CodeEditor
|
||||
@@ -14,7 +13,7 @@ export function JsonEditor({ editable, className, ...props }: ReactCodeMirrorPro
|
||||
className
|
||||
)}
|
||||
editable={editable}
|
||||
extensions={[json()]}
|
||||
_extensions={{ json: true }}
|
||||
{...props}
|
||||
/>
|
||||
</Suspense>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { liquid } from "@codemirror/lang-liquid";
|
||||
import type { ReactCodeMirrorProps } from "@uiw/react-codemirror";
|
||||
import { Suspense, lazy } from "react";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
import type { CodeEditorProps } from "./CodeEditor";
|
||||
const CodeEditor = lazy(() => import("./CodeEditor"));
|
||||
|
||||
const filters = [
|
||||
@@ -106,7 +106,7 @@ const tags = [
|
||||
{ label: "when" }
|
||||
];
|
||||
|
||||
export function LiquidJsEditor({ editable, ...props }: ReactCodeMirrorProps) {
|
||||
export function LiquidJsEditor({ editable, ...props }: CodeEditorProps) {
|
||||
return (
|
||||
<Suspense fallback={null}>
|
||||
<CodeEditor
|
||||
@@ -115,7 +115,9 @@ export function LiquidJsEditor({ editable, ...props }: ReactCodeMirrorProps) {
|
||||
!editable && "opacity-70"
|
||||
)}
|
||||
editable={editable}
|
||||
extensions={[liquid({ filters, tags })]}
|
||||
_extensions={{
|
||||
liquid: { filters, tags }
|
||||
}}
|
||||
{...props}
|
||||
/>
|
||||
</Suspense>
|
||||
|
||||
@@ -2,7 +2,6 @@ import { MarkerType, type Node, Position, ReactFlowProvider } from "@xyflow/reac
|
||||
import type { AppDataConfig, TAppDataEntity } from "data/data-schema";
|
||||
import { useBknd } from "ui/client/BkndProvider";
|
||||
import { useBkndSystemTheme } from "ui/client/schema/system/use-bknd-system";
|
||||
import { useTheme } from "ui/client/use-theme";
|
||||
import { Canvas } from "ui/components/canvas/Canvas";
|
||||
import { layoutWithDagre } from "ui/components/canvas/layouts";
|
||||
import { Panels } from "ui/components/canvas/panels";
|
||||
|
||||
Reference in New Issue
Block a user