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"; | |
| import type { InsertImagePayload } from "./ImagesPlugin"; | |
| import { INSERT_IMAGE_COMMAND } from "./ImagesPlugin"; | |
| /** | |
| * This is a hacky plugin to replace contents in the Lexical Composer. It needs to be improved. | |
| */ | |
| export type ReplaceContentData = { | |
| content_type: string; | |
| content: string; | |
| }; | |
| export function ReplaceContentPlugin({ | |
| payload, | |
| }: { | |
| payload: ReplaceContentData[]; | |
| }) { | |
| const [editor] = useLexicalComposerContext(); | |
| const [last, setLast] = useState<ReplaceContentData[] | null>(null); | |
| useEffect(() => { | |
| if (last == null) { | |
| return; | |
| } | |
| editor.update(() => { | |
| const root = $getRoot(); | |
| root.clear(); | |
| for (let i = 0; i < last.length; i++) { | |
| const item = last[i]; | |
| if (item.content_type === "TEXT") { | |
| const paragraphNode = $createParagraphNode(); | |
| const text = $createTextNode(item.content); | |
| paragraphNode.append(text); | |
| root.append(paragraphNode); | |
| } else { | |
| editor.dispatchCommand(INSERT_IMAGE_COMMAND, { | |
| altText: "an image", | |
| src: item.content, | |
| } as InsertImagePayload); | |
| } | |
| } | |
| setLast(null); | |
| }); | |
| }, [last]); | |
| useEffect(() => { | |
| if (payload !== null) { | |
| setLast(payload); | |
| } | |
| }, [payload]); | |
| return null; | |
| } | |