Spaces:
Runtime error
Runtime error
| /* | |
| * Copyright (c) Meta Platforms, Inc. and affiliates. | |
| * | |
| * This source code is licensed under the Chameleon License found in the | |
| * LICENSE file in the root directory of this source tree. | |
| */ | |
| import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext"; | |
| import { | |
| $createParagraphNode, | |
| $createTextNode, | |
| $getRoot, | |
| } from "lexical"; | |
| import { useEffect, useState } from "react"; | |
| /** | |
| * This is a hacky plugin to replace contents in the Lexical Composer. It needs to be improved. | |
| */ | |
| export function ReplaceTextPlugin({ payload }: { payload: string | null }) { | |
| const [editor] = useLexicalComposerContext(); | |
| const [last, setLast] = useState<string | null>(null); | |
| useEffect(() => { | |
| if (last !== null) { | |
| editor.update(() => { | |
| const root = $getRoot(); | |
| root.clear(); | |
| const paragraphNode = $createParagraphNode(); | |
| const text = $createTextNode(payload || ""); | |
| paragraphNode.append(text); | |
| root.append(paragraphNode); | |
| setLast(null); | |
| }); | |
| } | |
| }, [last]); | |
| useEffect(() => { | |
| // To prevent a weird infinite loop | |
| if (last !== payload && payload !== null) { | |
| console.log(`replace content with ${payload.substring(0, 10)}...`); | |
| setLast(payload); | |
| } | |
| }, [payload]); | |
| return null; | |
| } | |