diff --git a/wax-prosemirror-components/src/components/comments/Comment.js b/wax-prosemirror-components/src/components/comments/Comment.js index 346b0c220288f184ff52bc39d555df81308fc9d8..6845cc58adf9f372f9d7b21f6b71912bbc87ea2d 100644 --- a/wax-prosemirror-components/src/components/comments/Comment.js +++ b/wax-prosemirror-components/src/components/comments/Comment.js @@ -85,7 +85,6 @@ export default ({ comment, activeView, user, active }) => { } if (conversation.length === 0 && value === '') { - console.log('here?'); resolveComment(); } }; diff --git a/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js b/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js index 3c4d0b4946ce309124de63bbe92beec55250eec5..5fa2fe0eb554a59301c69a0daa4a0475c905f5db 100644 --- a/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js +++ b/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js @@ -1,9 +1,7 @@ import { Mapping, RemoveMarkStep, ReplaceStep } from 'prosemirror-transform'; import { Slice } from 'prosemirror-model'; - -import { minBy, maxBy } from 'lodash'; - import { injectable } from 'inversify'; +import removeNode from '../track-changes/helpers/removeNode'; import Tools from '../../lib/Tools'; export default @@ -18,10 +16,17 @@ class AcceptTrackChange extends Tools { tr, selection: { from, to }, } = state; + tr.setMeta('AcceptReject', true); const map = new Mapping(); state.doc.nodesBetween(from, to, (node, pos) => { + if ( + node.attrs.track && + node.attrs.track.find(track => track.type === 'deletion') + ) { + removeNode(tr, node, pos, map, true); + } if ( node.marks && node.marks.find(mark => mark.type.name === 'deletion') diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markDeletion.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markDeletion.js index bb4ba72bf2ebd1441b9385fc88669bc8db632b0a..3b9c686d5a6bb0c30fecae2aa16c765131a79b7b 100644 --- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markDeletion.js +++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/markDeletion.js @@ -1,58 +1,53 @@ -import { Selection, TextSelection } from "prosemirror-state"; -import { Slice } from "prosemirror-model"; -import { ReplaceStep, Mapping } from "prosemirror-transform"; +import { Selection, TextSelection } from 'prosemirror-state'; +import { Slice } from 'prosemirror-model'; +import { ReplaceStep, Mapping } from 'prosemirror-transform'; const markDeletion = (tr, from, to, user, date, group) => { const deletionMark = tr.doc.type.schema.marks.deletion.create({ user: user.userId, - username: user.username + username: user.username, // date }); - let firstTableCellChild = false; + const deletionMap = new Mapping(); - // Add deletion mark to block nodes (figures, text blocks) and find already deleted inline nodes (and leave them alone) + tr.doc.nodesBetween(from, to, (node, pos) => { - if (pos < from && node.type.name === "table_cell") { - firstTableCellChild = true; - return true; - } else if ((pos < from && node.isBlock) || firstTableCellChild) { - firstTableCellChild = false; - return true; - } else if (["table_row", "table_cell"].includes(node.type.name)) { - return false; - } else if ( + if (node.type.name.includes('table')) { + return; + } + if ( node.isInline && node.marks.find( mark => - mark.type.name === "insertion" && mark.attrs.user === user.userId + mark.type.name === 'insertion' && mark.attrs.user === user.userId, ) ) { const removeStep = new ReplaceStep( deletionMap.map(Math.max(from, pos)), deletionMap.map(Math.min(to, pos + node.nodeSize)), - Slice.empty + Slice.empty, ); if (!tr.maybeStep(removeStep).failed) { deletionMap.appendMap(removeStep.getMap()); } } else if ( node.isInline && - !node.marks.find(mark => mark.type.name === "deletion") + !node.marks.find(mark => mark.type.name === 'deletion') ) { tr.addMark( deletionMap.map(Math.max(from, pos)), deletionMap.map(Math.min(to, pos + node.nodeSize)), - deletionMark + deletionMark, ); } else if ( node.attrs.track && - !node.attrs.track.find(trackAttr => trackAttr.type === "deletion") && - !["bullet_list", "ordered_list"].includes(node.type.name) + !node.attrs.track.find(trackAttr => trackAttr.type === 'deletion') && + !['bullet_list', 'ordered_list'].includes(node.type.name) ) { if ( node.attrs.track.find( trackAttr => - trackAttr.type === "insertion" && trackAttr.user === user.userId + trackAttr.type === 'insertion' && trackAttr.user === user.userId, ) ) { let removeStep; @@ -64,14 +59,14 @@ const markDeletion = (tr, from, to, user, date, group) => { removeStep = new ReplaceStep( deletionMap.map(selectionBefore.$anchor.pos), deletionMap.map(to), - Slice.empty + Slice.empty, ); } } else { removeStep = new ReplaceStep( deletionMap.map(Math.max(from, pos)), deletionMap.map(Math.min(to, pos + node.nodeSize)), - Slice.empty + Slice.empty, ); } @@ -79,19 +74,21 @@ const markDeletion = (tr, from, to, user, date, group) => { deletionMap.appendMap(removeStep.getMap()); } } else { - const track = node.attrs.track.slice(); - track.push({ - type: "deletion", - user: user.userId, - username: user.username - // date - }); - tr.setNodeMarkup( - deletionMap.map(pos), - null, - Object.assign({}, node.attrs, { track }), - node.marks - ); + if (node.content.size === 0) { + const track = node.attrs.track.slice(); + track.push({ + type: 'deletion', + user: user.userId, + username: user.username, + // date + }); + tr.setNodeMarkup( + deletionMap.map(pos), + null, + Object.assign({}, node.attrs, { track }), + node.marks, + ); + } } } }); diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js index d891fb64eda079b0b4040eb37730771239b08cc3..bdb8990b1c2a5c16003d27e97cad88a6a23503a3 100644 --- a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js +++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js @@ -98,10 +98,10 @@ const trackedTransaction = (tr, state, user) => { const caretPos = map.map(tr.selection.from - 2, -1); newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos))); } else { - const slice = map.slice(newTr.selection.from, newTr.selection.to); - map.appendMap(slice); - // const caretPos = map.map(tr.selection.from, -1); - // newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos))); + const caretPos = map.map(tr.selection.from, -1); + newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos))); + // const slice = map.slice(newTr.selection.from, newTr.selection.to); + // map.appendMap(slice); } } if (tr.storedMarksSet) {