From ef84bfeea0845032fc94b4f947b63e3bb40ad7c4 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Thu, 5 May 2022 18:15:10 +0300
Subject: [PATCH] display on node

---
 editors/demo/src/NCBI/NCBI.js                 |  2 --
 .../src/CommentsService/CommentsService.js    |  1 +
 .../CustomTagInlineService.js                 |  1 +
 .../src/LinkService/LinkService.js            |  1 +
 .../CreateDropDownService.js                  |  3 ++-
 .../src/OverlayService/usePosition.js         | 27 +++++++++++++++++--
 .../MultipleChoiceDropDown.js                 |  1 +
 .../src/document/DocumentHelpers.js           | 13 +++++++++
 8 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/editors/demo/src/NCBI/NCBI.js b/editors/demo/src/NCBI/NCBI.js
index cde261806..7b72e421a 100644
--- a/editors/demo/src/NCBI/NCBI.js
+++ b/editors/demo/src/NCBI/NCBI.js
@@ -61,8 +61,6 @@ const ContentArea = styled.div`
   overflow-y: auto;
 `;
 
-let a = '';
-
 const Ncbi = () => {
   const [content, setContent] = useState('');
 
diff --git a/wax-prosemirror-services/src/CommentsService/CommentsService.js b/wax-prosemirror-services/src/CommentsService/CommentsService.js
index 989f1cf78..48d3b07b3 100644
--- a/wax-prosemirror-services/src/CommentsService/CommentsService.js
+++ b/wax-prosemirror-services/src/CommentsService/CommentsService.js
@@ -19,6 +19,7 @@ export default class CommentsService extends Service {
       CommentBubbleComponent,
       {},
       {
+        nodeType: '',
         markType: '',
         followCursor: false,
         selection: true,
diff --git a/wax-prosemirror-services/src/CustomTagService/CustomTagInlineService/CustomTagInlineService.js b/wax-prosemirror-services/src/CustomTagService/CustomTagInlineService/CustomTagInlineService.js
index f3ce5b96d..a90cdd3da 100644
--- a/wax-prosemirror-services/src/CustomTagService/CustomTagInlineService/CustomTagInlineService.js
+++ b/wax-prosemirror-services/src/CustomTagService/CustomTagInlineService/CustomTagInlineService.js
@@ -11,6 +11,7 @@ class CustomTagInlineService extends Service {
       CustomTagInlineOverlayComponent,
       {},
       {
+        nodeType: '',
         markType: 'customTagInline',
         followCursor: false,
         selection: true,
diff --git a/wax-prosemirror-services/src/LinkService/LinkService.js b/wax-prosemirror-services/src/LinkService/LinkService.js
index f89d026c9..923085244 100644
--- a/wax-prosemirror-services/src/LinkService/LinkService.js
+++ b/wax-prosemirror-services/src/LinkService/LinkService.js
@@ -17,6 +17,7 @@ export default class LinkService extends Service {
       LinkComponent,
       {},
       {
+        nodeType: '',
         markType: 'link',
         followCursor: false,
         selection: false,
diff --git a/wax-prosemirror-services/src/MultipleDropDownService/CreateDropDownService/CreateDropDownService.js b/wax-prosemirror-services/src/MultipleDropDownService/CreateDropDownService/CreateDropDownService.js
index baf381ede..1cc337257 100644
--- a/wax-prosemirror-services/src/MultipleDropDownService/CreateDropDownService/CreateDropDownService.js
+++ b/wax-prosemirror-services/src/MultipleDropDownService/CreateDropDownService/CreateDropDownService.js
@@ -14,7 +14,8 @@ class CreateDropDownService extends Service {
       DropDownComponent,
       {},
       {
-        markType: 'multiple_drop_down_option',
+        nodeType: 'multiple_drop_down_option',
+        markType: '',
         followCursor: true,
         selection: false,
       },
diff --git a/wax-prosemirror-services/src/OverlayService/usePosition.js b/wax-prosemirror-services/src/OverlayService/usePosition.js
index 5827b9db4..615e1d460 100644
--- a/wax-prosemirror-services/src/OverlayService/usePosition.js
+++ b/wax-prosemirror-services/src/OverlayService/usePosition.js
@@ -21,7 +21,7 @@ export default options => {
   });
 
   let mark = {};
-
+  let node = {};
   /* Sets Default position at the end of the annotation. You
   can overwrite the default position in your component.
   Check: wax-prosemirror-components/src/components/comments/CommentBubbleComponent.js
@@ -52,6 +52,25 @@ export default options => {
     };
   };
 
+  const displayOnNode = (focusedView, overlayOptions) => {
+    const { nodeType, followCursor } = overlayOptions;
+    const PMnode = focusedView.state.schema.nodes[nodeType];
+
+    node = DocumentHelpers.findNode(focusedView.state, PMnode);
+
+    if (!isObject(node)) return defaultOverlay;
+    const { from, to } = followCursor ? focusedView.state.selection : node;
+
+    const { left, top } = calculatePosition(focusedView, from, to);
+
+    return {
+      left,
+      top,
+      from,
+      to,
+    };
+  };
+
   const displayOnMark = (focusedView, overlayOptions) => {
     const { markType, followCursor } = overlayOptions;
     const PMmark = focusedView.state.schema.marks[markType];
@@ -92,7 +111,11 @@ export default options => {
   const updatePosition = useCallback((followCursor = true) => {
     if (Object.keys(activeView).length === 0) return defaultOverlay;
 
-    const { markType, selection } = options;
+    const { markType, selection, nodeType } = options;
+
+    if (nodeType) {
+      return displayOnNode(activeView, options);
+    }
 
     if (markType && selection)
       return displayOnMarkOrSelection(activeView, options);
diff --git a/wax-prosemirror-services/src/WaxToolGroups/MultipleChoiceDropDownToolGroupService/MultipleChoiceDropDown.js b/wax-prosemirror-services/src/WaxToolGroups/MultipleChoiceDropDownToolGroupService/MultipleChoiceDropDown.js
index f04cb39f5..095464e4d 100644
--- a/wax-prosemirror-services/src/WaxToolGroups/MultipleChoiceDropDownToolGroupService/MultipleChoiceDropDown.js
+++ b/wax-prosemirror-services/src/WaxToolGroups/MultipleChoiceDropDownToolGroupService/MultipleChoiceDropDown.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-underscore-dangle */
 import React, { useMemo } from 'react';
 import { injectable, inject } from 'inversify';
 import { isEmpty } from 'lodash';
diff --git a/wax-prosemirror-utilities/src/document/DocumentHelpers.js b/wax-prosemirror-utilities/src/document/DocumentHelpers.js
index 7a3cb17fa..1b6409a24 100644
--- a/wax-prosemirror-utilities/src/document/DocumentHelpers.js
+++ b/wax-prosemirror-utilities/src/document/DocumentHelpers.js
@@ -27,6 +27,18 @@ const findMark = (state, PMmark, toArr = false) => {
   return markFound;
 };
 
+const findNode = (state, PMnode) => {
+  let nodeFound;
+  if (state.selection.node && state.selection.node.type.name === PMnode.name) {
+    nodeFound = {
+      from: state.selection.from,
+      to: state.selection.to,
+      node: state.selection.node,
+    };
+  }
+  return nodeFound;
+};
+
 const getCommentsTracksCount = main => {
   const marks = findInlineNodes(main.state.doc);
   const commentsTracksFormat = [];
@@ -270,6 +282,7 @@ const findParentOfType = (state, nodeType) => {
 
 export default {
   findMark,
+  findNode,
   findBlockNodes,
   findChildrenByType,
   findInlineNodes,
-- 
GitLab