-import {LexicalEditor, LexicalNode} from "lexical";
+import {$insertNodes, LexicalEditor, LexicalNode} from "lexical";
import {HttpError} from "../../services/http";
import {EditorUiContext} from "../ui/framework/core";
import * as DrawIO from "../../services/drawio";
-import {DiagramNode} from "../nodes/diagram";
+import {$createDiagramNode, DiagramNode} from "@lexical/rich-text/LexicalDiagramNode";
+import {ImageManager} from "../../components";
+import {EditorImageData} from "./images";
+import {$getNodeFromSelection, getLastSelection} from "./selection";
export function $isDiagramNode(node: LexicalNode | null | undefined): node is DiagramNode {
return node instanceof DiagramNode;
}, async (pngData: string) => {
return updateDrawingNodeFromData(context, node, pngData, isNew);
});
+}
+
+export function showDiagramManager(callback: (image: EditorImageData) => any) {
+ const imageManager: ImageManager = window.$components.first('image-manager') as ImageManager;
+ imageManager.show((image: EditorImageData) => {
+ callback(image);
+ }, 'drawio');
+}
+
+export function showDiagramManagerForInsert(context: EditorUiContext) {
+ const selection = getLastSelection(context.editor);
+ showDiagramManager((image: EditorImageData) => {
+ context.editor.update(() => {
+ const diagramNode = $createDiagramNode(image.id, image.url);
+ const selectedDiagram = $getNodeFromSelection(selection, $isDiagramNode);
+ if ($isDiagramNode(selectedDiagram)) {
+ selectedDiagram.replace(diagramNode);
+ } else {
+ $insertNodes([diagramNode]);
+ }
+ });
+ });
}
\ No newline at end of file