diff --git a/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js b/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js index 48192a42233ab0e885b47353dbc3fd4acc8a3a4a..9589c1b3cc34a375a081681a8820816cc8fcf0c6 100644 --- a/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js +++ b/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js @@ -1,4 +1,6 @@ -import { Mapping, RemoveMarkStep } from 'prosemirror-transform'; +import { Mapping, RemoveMarkStep, ReplaceStep } from 'prosemirror-transform'; +import { Slice } from 'prosemirror-model'; + import { minBy, maxBy } from 'lodash'; import { injectable } from 'inversify'; @@ -21,6 +23,17 @@ class AcceptTrackChange extends Tools { state.doc.nodesBetween(from, to, (node, pos) => { if ( + node.marks && + node.marks.find(mark => mark.type.name === 'deletion') + ) { + const deletionStep = new ReplaceStep( + map.map(Math.max(pos, from)), + map.map(Math.min(pos + node.nodeSize, to)), + Slice.empty, + ); + tr.step(deletionStep); + map.appendMap(deletionStep.getMap()); + } else if ( node.marks && node.marks.find(mark => mark.type.name === 'insertion') ) { @@ -29,13 +42,14 @@ class AcceptTrackChange extends Tools { ); tr.step( new RemoveMarkStep( - map.map(maxBy(pos, from)), - map.map(minBy(pos + node.nodeSize, to)), + map.map(Math.max(pos, from)), + map.map(Math.min(pos + node.nodeSize, to)), insertionMark, ), ); } }); + dispatch(tr); }; }