From 212bb8ec60796eeb8577871ff0924610e3634d49 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Mon, 11 May 2020 12:59:50 +0300
Subject: [PATCH] move cursor when on deletion

---
 editors/editoria/src/Editoria.js                |  4 +++-
 .../track-changes/helpers/replaceStep.js        | 17 +++++++++++++----
 .../track-changes/trackedTransaction.js         | 13 +++++++++++++
 3 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/editors/editoria/src/Editoria.js b/editors/editoria/src/Editoria.js
index 0c382d617..dc0a2b609 100644
--- a/editors/editoria/src/Editoria.js
+++ b/editors/editoria/src/Editoria.js
@@ -47,7 +47,9 @@ const Editoria = () => (
       autoFocus
       placeholder="Type Something..."
       fileUpload={file => renderImage(file)}
-      value={"<p>this is some content</p><p>second paragraph</p>"}
+      value={
+        '<p class="paragraph">this is <span class="deletion user-1234" data-id="" data-user="1234" data-username="demo" data-date="26486384" data-group="">some</span> content</p><p class="paragraph">second paragraph</p>'
+      }
       layout={EditoriaLayout}
       TrackChange
       // onChange={source => console.log(source)}
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js
index e0bfd55ef..72c2028b2 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js
@@ -1,21 +1,29 @@
 import { ReplaceStep } from "prosemirror-transform";
 import { CellSelection } from "prosemirror-tables";
+import { DocumentHelpers } from "wax-prosemirror-utilities";
 
 import markDeletion from "./markDeletion";
 import markInsertion from "./markInsertion";
 
 const replaceStep = (state, tr, step, newTr, map, doc, user, date) => {
-  // We only insert content if this is not directly a tr for cell deletion. This is because tables delete rows by deleting the
-  // contents of each cell and replacing it with an empty paragraph.
   const cellDeleteTr =
     ["deleteContentBackward", "deleteContentForward"].includes(
       tr.getMeta("inputType")
     ) && state.selection instanceof CellSelection;
 
+  // if deletion mark move to the end of deletion
+  const deletionMarkSchema = state.schema.marks.deletion;
+  const deletionMark = DocumentHelpers.findMark(
+    state,
+    deletionMarkSchema,
+    false
+  );
+  const positionTo = deletionMark ? deletionMark.to : step.to;
+
   const newStep = !cellDeleteTr
     ? new ReplaceStep(
-        step.to, // We insert all the same steps, but with "from"/"to" both set to "to" in order not to delete content. Mapped as needed.
-        step.to,
+        positionTo, // We insert all the same steps, but with "from"/"to" both set to "to" in order not to delete content. Mapped as needed.
+        positionTo,
         step.slice,
         step.structure
       )
@@ -28,6 +36,7 @@ const replaceStep = (state, tr, step, newTr, map, doc, user, date) => {
       return;
     }
     const mappedNewStepTo = newStep.getMap().map(newStep.to);
+
     markInsertion(trTemp, newStep.from, mappedNewStepTo, user, date);
     // We condense it down to a single replace step.
     const condensedStep = new ReplaceStep(
diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js
index ce0933097..ee80e0839 100644
--- a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js
+++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js
@@ -13,6 +13,8 @@ import {
   Mapping
 } from "prosemirror-transform";
 
+import { DocumentHelpers } from "wax-prosemirror-utilities";
+
 import replaceStep from "./helpers/replaceStep";
 import replaceAroundStep from "./helpers/replaceAroundStep";
 import addMarkStep from "./helpers/addMarkStep";
@@ -65,6 +67,13 @@ const trackedTransaction = (tr, state, user) => {
   }
 
   if (tr.selectionSet) {
+    const deletionMarkSchema = state.schema.marks.deletion;
+    const deletionMark = DocumentHelpers.findMark(
+      state,
+      deletionMarkSchema,
+      false
+    );
+
     if (
       tr.selection instanceof TextSelection &&
       (tr.selection.from < state.selection.from ||
@@ -72,7 +81,11 @@ const trackedTransaction = (tr, state, user) => {
     ) {
       const caretPos = map.map(tr.selection.from, -1);
       newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos)));
+    } else if (tr.selection.from > state.selection.from && deletionMark) {
+      const caretPos = map.map(deletionMark.to + 1, 1);
+      newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos)));
     } else {
+      console.log("not");
       newTr.setSelection(tr.selection.map(newTr.doc, map));
     }
   }
-- 
GitLab