diff --git a/editors/demo/src/NCBI/NCBI.js b/editors/demo/src/NCBI/NCBI.js index cde261806fb08af3ced7380b6f7748d5f511c408..7b72e421adf0883b7ac6a336da5b8b8a79be86fe 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 989f1cf7899ec3ffaaa9afbae2780e0ed61d4fdc..48d3b07b3f09bcd9f62b13546f43a52675bf0d2c 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 f3ce5b96dea8736f53a3c95373b348f31b109b86..a90cdd3da09535764315962e971b83bf3c467bb8 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 f89d026c9102f42f1811ef92485dbcad99c82288..9230852441bce0f4976c6a29e6c80f3ba6a781f8 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 baf381edecdc76f4136d9d89c56fde5632dcd634..1cc337257460860f6892a67aaed47e17e051ff9e 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 5827b9db4898e89c3263c0891a5efea5b464c35f..615e1d460bd9a29e7e19d83be759273fe31aa83f 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 f04cb39f502c4168ad95aee8b9167c5c865673ea..095464e4d034e09533204bd123a078d5e496051e 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 7a3cb17fa3f797961362292c0f213a3cbf65ba77..1b6409a24c7a6f7160b20c4280f4eac923029269 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,