]> BookStack Code Mirror - bookstack/blobdiff - resources/js/wysiwyg/utils/diagrams.ts
Perms: Fixed some issues made when adding transactions
[bookstack] / resources / js / wysiwyg / utils / diagrams.ts
index 50d7d5b3f36e536dcbb2e28374e31794fe5f8ec8..ffd8e603b99fe2d4c7e35814099ed01b94c6f67d 100644 (file)
@@ -1,8 +1,11 @@
-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;
@@ -67,4 +70,26 @@ export function $openDrawingEditorForNode(context: EditorUiContext, node: Diagra
     }, 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