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