diff --git a/wax-prosemirror-components/src/components/comments/Comment.js b/wax-prosemirror-components/src/components/comments/Comment.js index b8e257ea25c5784dc5069c7fb6c34aa69b474d61..27d74073ab0e0f8442842c773d9c56383436813c 100644 --- a/wax-prosemirror-components/src/components/comments/Comment.js +++ b/wax-prosemirror-components/src/components/comments/Comment.js @@ -22,7 +22,7 @@ export default ({ comment, activeView, user }) => { const handleKeyDown = event => { if (event.key === 'Enter' || event.which === 13) { - saveComment(); + saveComment(event); } }; @@ -74,7 +74,7 @@ export default ({ comment, activeView, user }) => { }; const resolveComment = event => { - event.stopPropagation(); + if (event) event.stopPropagation(); let maxPos = comment.pos; let minPos = comment.pos; diff --git a/wax-prosemirror-components/src/components/comments/CommentBox.js b/wax-prosemirror-components/src/components/comments/CommentBox.js index 9cb81a741efcb90cb37c870c1c6d759f5474b362..bd4b9eaaf672ee5e3b41d789315a2d590f18f986 100644 --- a/wax-prosemirror-components/src/components/comments/CommentBox.js +++ b/wax-prosemirror-components/src/components/comments/CommentBox.js @@ -1,6 +1,6 @@ import React, { useState, useEffect, useContext } from 'react'; import { TextSelection } from 'prosemirror-state'; -import { last } from 'lodash'; +import { last, maxBy } from 'lodash'; import { Transition } from 'react-transition-group'; import styled from 'styled-components'; @@ -59,18 +59,19 @@ export default ({ comment, top, dataBox }) => { const setCommentActive = () => { const viewId = comment.attrs.viewid; - let maxPos = comment.pos; - const allCommentsWithSameId = DocumentHelpers.findAllMarksWithSameId(view[viewId].state, comment); - allCommentsWithSameId.forEach(singleComment => { - const markPosition = DocumentHelpers.findMarkPosition(view[viewId], singleComment.pos, 'comment'); - if (markPosition.to > maxPos) maxPos = markPosition.to; - }); + if (active) { + view[viewId].focus(); + return false; + } + + const allCommentsWithSameId = DocumentHelpers.findAllMarksWithSameId(view[viewId].state, comment); - if (!active && allCommentsWithSameId.length > 1) maxPos += last(allCommentsWithSameId).node.nodeSize; + const maxPos = maxBy(allCommentsWithSameId, 'pos'); + maxPos.pos += last(allCommentsWithSameId).node.nodeSize; view[viewId].dispatch( - view[viewId].state.tr.setSelection(new TextSelection(view[viewId].state.tr.doc.resolve(maxPos, maxPos))), + view[viewId].state.tr.setSelection(new TextSelection(view[viewId].state.tr.doc.resolve(maxPos.pos, maxPos.pos))), ); view[viewId].focus(); diff --git a/wax-prosemirror-utilities/src/document/DocumentHelpers.js b/wax-prosemirror-utilities/src/document/DocumentHelpers.js index ef355be3d26f8d5f998617be6a10434db349c98c..3e2caffbbde97bf6c1d23bbaf723837b6d78b507 100644 --- a/wax-prosemirror-utilities/src/document/DocumentHelpers.js +++ b/wax-prosemirror-utilities/src/document/DocumentHelpers.js @@ -96,7 +96,6 @@ const findAllMarksWithSameId = (state, mark) => { return allMarksWithSameId; }; -// TODO Also find fragmented marks const findMarkPosition = (activeView, initialPos, markType) => { const $pos = activeView.state.tr.doc.resolve(initialPos); const { parent } = $pos;