Spaces:
Running
on
Zero
Running
on
Zero
/* | |
* 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; | |
} | |