Skip to content

Commit

Permalink
Fast canvas edit
Browse files Browse the repository at this point in the history
  • Loading branch information
istarkov committed May 13, 2024
1 parent ea5b5c8 commit 4303d76
Showing 1 changed file with 27 additions and 3 deletions.
30 changes: 27 additions & 3 deletions apps/builder/app/canvas/features/text-editor/text-editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ import {
$createLineBreakNode,
$getSelection,
$isRangeSelection,
type EditorState,
} from "lexical";
import { LinkNode } from "@lexical/link";
import { LexicalComposer } from "@lexical/react/LexicalComposer";
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
import LexicalErrorBoundary from "@lexical/react/LexicalErrorBoundary";
import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin";
import { OnChangePlugin } from "@lexical/react/LexicalOnChangePlugin";
import { LinkPlugin } from "@lexical/react/LexicalLinkPlugin";
import { nanoid } from "nanoid";
import { createRegularStyleSheet } from "@webstudio-is/css-engine";
Expand All @@ -30,6 +30,7 @@ import {
$convertTextToLexical,
} from "./interop";
import { colord } from "colord";
import { useEffectEvent } from "~/shared/hook-utils/effect-event";

const BindInstanceToNodePlugin = ({ refs }: { refs: Refs }) => {
const [editor] = useLexicalComposerContext();
Expand Down Expand Up @@ -113,6 +114,29 @@ const CaretColorPlugin = () => {
return null;
};

const OnChangeOnBlurPlugin = ({
onChange,
}: {
onChange: (editorState: EditorState) => void;
}) => {
const [editor] = useLexicalComposerContext();
const handleChange = useEffectEvent(onChange);

useEffect(() => {
const handleBlur = () => {
handleChange(editor.getEditorState());
};

// https://github.com/facebook/lexical/blob/867d449b2a6497ff9b1fbdbd70724c74a1044d8b/packages/lexical-react/src/LexicalNodeEventPlugin.ts#L59C12-L67C8
return editor.registerRootListener((rootElement, prevRootElement) => {
rootElement?.addEventListener("blur", handleBlur);
prevRootElement?.removeEventListener("blur", handleBlur);
});
}, [editor, handleChange]);

return null;
};

const RemoveParagaphsPlugin = () => {
const [editor] = useLexicalComposerContext();

Expand Down Expand Up @@ -266,8 +290,8 @@ export const TextEditor = ({
/>
<LinkPlugin />
<HistoryPlugin />
<OnChangePlugin
ignoreSelectionChange={true}

<OnChangeOnBlurPlugin
onChange={(editorState) => {
editorState.read(() => {
const treeRootInstance = instances.get(rootInstanceSelector[0]);
Expand Down

0 comments on commit 4303d76

Please sign in to comment.