1 import {$getRoot, $getSelection, LexicalEditor} from "lexical";
2 import {$generateHtmlFromNodes} from "@lexical/html";
3 import {$htmlToBlockNodes} from "./nodes";
5 export function setEditorContentFromHtml(editor: LexicalEditor, html: string) {
8 const root = $getRoot();
9 for (const child of root.getChildren()) {
13 const nodes = $htmlToBlockNodes(editor, html);
14 root.append(...nodes);
18 export function appendHtmlToEditor(editor: LexicalEditor, html: string) {
20 const root = $getRoot();
21 const nodes = $htmlToBlockNodes(editor, html);
22 root.append(...nodes);
26 export function prependHtmlToEditor(editor: LexicalEditor, html: string) {
28 const root = $getRoot();
29 const nodes = $htmlToBlockNodes(editor, html);
30 let reference = root.getChildren()[0];
31 for (let i = nodes.length - 1; i >= 0; i--) {
33 reference.insertBefore(nodes[i]);
42 export function insertHtmlIntoEditor(editor: LexicalEditor, html: string) {
44 const selection = $getSelection();
45 const nodes = $htmlToBlockNodes(editor, html);
47 const reference = selection?.getNodes()[0];
48 const referencesParents = reference?.getParents() || [];
49 const topLevel = referencesParents[referencesParents.length - 1];
50 if (topLevel && reference) {
51 for (let i = nodes.length - 1; i >= 0; i--) {
52 reference.insertAfter(nodes[i]);
58 export function getEditorContentAsHtml(editor: LexicalEditor): Promise<string> {
59 return new Promise((resolve, reject) => {
60 editor.getEditorState().read(() => {
61 const html = $generateHtmlFromNodes(editor);
67 export function focusEditor(editor: LexicalEditor) {
68 editor.focus(() => {}, {defaultSelection: "rootStart"});