diff --git a/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js b/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js index 7afad204f700ffa84acbfa99792d0bca26c28403..48192a42233ab0e885b47353dbc3fd4acc8a3a4a 100644 --- a/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js +++ b/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js @@ -1,3 +1,6 @@ +import { Mapping, RemoveMarkStep } from 'prosemirror-transform'; +import { minBy, maxBy } from 'lodash'; + import { injectable } from 'inversify'; import Tools from '../../lib/Tools'; @@ -10,9 +13,12 @@ class AcceptTrackChange extends Tools { get run() { return (state, dispatch) => { const { + tr, selection: { from, to }, } = state; + const map = new Mapping(); + state.doc.nodesBetween(from, to, (node, pos) => { if ( node.marks && @@ -21,15 +27,16 @@ class AcceptTrackChange extends Tools { const insertionMark = node.marks.find( mark => mark.type.name === 'insertion', ); - dispatch( - state.tr.removeMark( - insertionMark.pos, - insertionMark.pos + node.nodeSize, - state.schema.marks.insertion, + tr.step( + new RemoveMarkStep( + map.map(maxBy(pos, from)), + map.map(minBy(pos + node.nodeSize, to)), + insertionMark, ), ); } }); + dispatch(tr); }; }