diff --git a/wax-prosemirror-components/src/components/comments/ConnectedComment.js b/wax-prosemirror-components/src/components/comments/ConnectedComment.js index 998aae93ed85789e41b29032893621e23d9fd897..6123e7382bb9dc8761fee39e671d82dfdff61ee3 100644 --- a/wax-prosemirror-components/src/components/comments/ConnectedComment.js +++ b/wax-prosemirror-components/src/components/comments/ConnectedComment.js @@ -112,7 +112,6 @@ export default ({ comment, top, commentId, recalculateTops }) => { let minPos = comment.pos; allCommentsWithSameId.forEach(singleComment => { - console.log(singleComment.pos); const markPosition = DocumentHelpers.findMarkPosition( state, singleComment.pos, diff --git a/wax-prosemirror-utilities/src/commands/Commands.js b/wax-prosemirror-utilities/src/commands/Commands.js index 30301ef45cd82a4a601c0524fc4c883fe14ccad9..358bf429a979c8ce14fd55204f137138957147a7 100644 --- a/wax-prosemirror-utilities/src/commands/Commands.js +++ b/wax-prosemirror-utilities/src/commands/Commands.js @@ -1,5 +1,6 @@ import { v4 as uuidv4 } from 'uuid'; import { toggleMark } from 'prosemirror-commands'; +import { AddMarkStep } from 'prosemirror-transform'; const setBlockType = (nodeType, attrs = {}) => { return (state, dispatch) => { @@ -127,10 +128,10 @@ const createComment = (state, dispatch, group, viewid) => { state.doc.nodesBetween($from.pos, $to.pos, (node, from) => { if (node.type.name === 'footnote') { footnote = true; - createCommentOnFootnote(state, dispatch, group, viewid); } }); + createCommentOnFootnote(state, dispatch, group, viewid); if (footnote) return; toggleMark(state.config.schema.marks.comment, { @@ -144,47 +145,67 @@ const createComment = (state, dispatch, group, viewid) => { const createCommentOnFootnote = (state, dispatch, group, viewid) => { const { selection: { $from }, + selection, + tr, } = state; const { content } = $from.parent; - - // const $pos = state.doc.resolve($from.pos); - // const commentStart = $from.pos - $pos.textOffset; - // const commentEnd = commentStart + $pos.parent.child($pos.index()).nodeSize; + const $pos = state.doc.resolve($from.pos); + const commentStart = $from.pos - $pos.textOffset; + const commentEnd = commentStart + $pos.parent.child($pos.index()).nodeSize; let start = $from.pos; - let end = 1; + let end = commentEnd; const ranges = []; - content.content.forEach((contentNode, index) => { - start = end; - end += contentNode.nodeSize; - ranges.push({ start, end, footnote: contentNode.type.name === 'footnote' }); + + const allFragments = []; + + selection.content().content.content.forEach(node => { + node.content.content.forEach(fragment => { + allFragments.push(fragment); + }); + }); + + allFragments.forEach((contentNode, index) => { + start = index === 0 ? start : end; + end = index === 0 ? end : end + contentNode.nodeSize; + ranges.push({ + start, + end, + footnote: contentNode.type.name === 'footnote', + }); }); const mergedRanges = []; ranges.forEach((item, i) => { if (item.footnote) { mergedRanges[mergedRanges.length - 1].end = - mergedRanges[mergedRanges.length - 1].end + 2; + mergedRanges[mergedRanges.length - 1].end + 1; } else { mergedRanges.push(item); } }); - console.log(mergedRanges); - // dispatch( - // state.tr.addMark( - // $from.pos, - // $to.pos, - // state.config.schema.marks.comment.create({ - // id: uuidv4(), - // group, - // conversation: [], - // viewid, - // }), - // ), - // ); + const id = uuidv4(); + + mergedRanges.forEach(range => { + tr.step( + new AddMarkStep( + range.start, + range.end, + state.config.schema.marks.comment.create({ + id, + group, + conversation: [], + viewid, + }), + ), + ); + }); + + dispatch(tr); }; + export default { setBlockType, blockActive,