From e997ed7494d3c1be968e3c08b345eaa80fc65a32 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Mon, 3 Feb 2020 13:00:41 +0200
Subject: [PATCH] move commands to utilities

---
 editors/editoria/src/Editoria.js              |  1 -
 .../src/track-changes/trackedTransaction.js   |  3 +-
 .../DisplayBlockLevel/TitleService/Title.js   |  1 -
 .../src/ImageService/Image.js                 |  4 +--
 .../src/InlineAnnotations/CodeService/Code.js |  4 +--
 .../EmphasisService/Emphasis.js               |  4 +--
 .../SmallCapsService/SmallCaps.js             |  4 +--
 .../StrikeThroughService/StrikeThrough.js     |  6 ++--
 .../InlineAnnotations/StrongService/Strong.js |  4 +--
 .../SubscriptService/Subscript.js             |  4 +--
 .../SuperscriptService/Superscript.js         |  4 +--
 .../UnderlineService/Underline.js             |  4 +--
 .../src/LinkService/LinkTool.js               | 17 +++-------
 .../BulletListService/BulletList.js           |  4 +--
 .../OrderedListService/OrderedList.js         |  4 +--
 .../src/NoteService/Editor.js                 |  9 +++--
 .../src/OverlayService/usePosition.js         |  1 -
 .../EditTableService/TableDropDownOptions.js  |  4 +--
 .../TablesService/InsertTableService/Table.js |  6 ++--
 wax-prosemirror-utilities/index.js            |  1 +
 .../src/commands/Commands.js                  | 34 ++++++-------------
 21 files changed, 50 insertions(+), 73 deletions(-)
 rename wax-prosemirror-services/src/lib/Utils.js => wax-prosemirror-utilities/src/commands/Commands.js (64%)

diff --git a/editors/editoria/src/Editoria.js b/editors/editoria/src/Editoria.js
index 7551560bc..78e16814b 100644
--- a/editors/editoria/src/Editoria.js
+++ b/editors/editoria/src/Editoria.js
@@ -48,7 +48,6 @@ const Editoria = () => (
       autoFocus
       placeholder="Type Something..."
       fileUpload={file => renderImage(file)}
-      TrackChange
       value={
         '<p class="paragraph">this is some text <a href="www.sss.ff" >some</a> more</p>'
       }
diff --git a/wax-prosemirror-core/src/track-changes/trackedTransaction.js b/wax-prosemirror-core/src/track-changes/trackedTransaction.js
index e5fce4329..8f98b7f69 100644
--- a/wax-prosemirror-core/src/track-changes/trackedTransaction.js
+++ b/wax-prosemirror-core/src/track-changes/trackedTransaction.js
@@ -49,7 +49,8 @@ const trackedTransaction = (tr, state, currentUser) => {
       return;
     }
 
-    if (step instanceof ReplaceStep) {
+    //if (step instanceof ReplaceStep) {
+    if (step.jsonID === "replace") {
       const newStep = approved
         ? step
         : step.slice.size && !cellDeleteTr
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js b/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js
index 94c85205f..9f77b510c 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js
@@ -1,7 +1,6 @@
 import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { setBlockType } from "prosemirror-commands";
-import { blockActive } from "../../lib/Utils";
 
 @injectable()
 export default class Title extends Tools {
diff --git a/wax-prosemirror-services/src/ImageService/Image.js b/wax-prosemirror-services/src/ImageService/Image.js
index 41d4a1ba6..e4cd287c4 100644
--- a/wax-prosemirror-services/src/ImageService/Image.js
+++ b/wax-prosemirror-services/src/ImageService/Image.js
@@ -4,7 +4,7 @@ import { isEmpty } from "lodash";
 import { injectable } from "inversify";
 import { icons, ImageUpload } from "wax-prosemirror-components";
 import Tools from "../lib/Tools";
-import { canInsert } from "../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import fileUpload from "./fileUpload";
 
 @injectable()
@@ -18,7 +18,7 @@ export default class Image extends Tools {
 
   get enable() {
     return state => {
-      return canInsert(state.config.schema.nodes.image)(state);
+      return Commands.canInsert(state.config.schema.nodes.image)(state);
     };
   }
 
diff --git a/wax-prosemirror-services/src/InlineAnnotations/CodeService/Code.js b/wax-prosemirror-services/src/InlineAnnotations/CodeService/Code.js
index 61887249a..ba88b541c 100644
--- a/wax-prosemirror-services/src/InlineAnnotations/CodeService/Code.js
+++ b/wax-prosemirror-services/src/InlineAnnotations/CodeService/Code.js
@@ -1,5 +1,5 @@
 import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
@@ -17,7 +17,7 @@ export default class Code extends Tools {
 
   get active() {
     return state => {
-      return markActive(state.config.schema.marks.code)(state);
+      return Commands.markActive(state.config.schema.marks.code)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/InlineAnnotations/EmphasisService/Emphasis.js b/wax-prosemirror-services/src/InlineAnnotations/EmphasisService/Emphasis.js
index 21f977f7a..e248a1604 100644
--- a/wax-prosemirror-services/src/InlineAnnotations/EmphasisService/Emphasis.js
+++ b/wax-prosemirror-services/src/InlineAnnotations/EmphasisService/Emphasis.js
@@ -1,5 +1,5 @@
 import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
@@ -17,7 +17,7 @@ export default class Emphasis extends Tools {
 
   get active() {
     return state => {
-      return markActive(state.config.schema.marks.em)(state);
+      return Commands.markActive(state.config.schema.marks.em)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/InlineAnnotations/SmallCapsService/SmallCaps.js b/wax-prosemirror-services/src/InlineAnnotations/SmallCapsService/SmallCaps.js
index 34162290c..e424113e5 100644
--- a/wax-prosemirror-services/src/InlineAnnotations/SmallCapsService/SmallCaps.js
+++ b/wax-prosemirror-services/src/InlineAnnotations/SmallCapsService/SmallCaps.js
@@ -1,5 +1,5 @@
 import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
@@ -17,7 +17,7 @@ export default class SmallCaps extends Tools {
 
   get active() {
     return state => {
-      return markActive(state.config.schema.marks.smallcaps)(state);
+      return Commands.markActive(state.config.schema.marks.smallcaps)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/InlineAnnotations/StrikeThroughService/StrikeThrough.js b/wax-prosemirror-services/src/InlineAnnotations/StrikeThroughService/StrikeThrough.js
index ef38b0a08..60b3be567 100644
--- a/wax-prosemirror-services/src/InlineAnnotations/StrikeThroughService/StrikeThrough.js
+++ b/wax-prosemirror-services/src/InlineAnnotations/StrikeThroughService/StrikeThrough.js
@@ -1,5 +1,5 @@
 import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
@@ -17,7 +17,9 @@ export default class StrikeThrough extends Tools {
 
   get active() {
     return state => {
-      return markActive(state.config.schema.marks.strikethrough)(state);
+      return Commands.markActive(state.config.schema.marks.strikethrough)(
+        state
+      );
     };
   }
 }
diff --git a/wax-prosemirror-services/src/InlineAnnotations/StrongService/Strong.js b/wax-prosemirror-services/src/InlineAnnotations/StrongService/Strong.js
index c2f94db1e..989f238a2 100644
--- a/wax-prosemirror-services/src/InlineAnnotations/StrongService/Strong.js
+++ b/wax-prosemirror-services/src/InlineAnnotations/StrongService/Strong.js
@@ -1,5 +1,5 @@
 import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
@@ -17,7 +17,7 @@ export default class Strong extends Tools {
 
   get active() {
     return state => {
-      return markActive(state.config.schema.marks.strong)(state);
+      return Commands.markActive(state.config.schema.marks.strong)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/InlineAnnotations/SubscriptService/Subscript.js b/wax-prosemirror-services/src/InlineAnnotations/SubscriptService/Subscript.js
index 53ef5fc74..9bfd47526 100644
--- a/wax-prosemirror-services/src/InlineAnnotations/SubscriptService/Subscript.js
+++ b/wax-prosemirror-services/src/InlineAnnotations/SubscriptService/Subscript.js
@@ -1,5 +1,5 @@
 import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
@@ -17,7 +17,7 @@ export default class Subscript extends Tools {
 
   get active() {
     return state => {
-      return markActive(state.config.schema.marks.subscript)(state);
+      return Commands.markActive(state.config.schema.marks.subscript)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/InlineAnnotations/SuperscriptService/Superscript.js b/wax-prosemirror-services/src/InlineAnnotations/SuperscriptService/Superscript.js
index 9063597cd..f502bbf7c 100644
--- a/wax-prosemirror-services/src/InlineAnnotations/SuperscriptService/Superscript.js
+++ b/wax-prosemirror-services/src/InlineAnnotations/SuperscriptService/Superscript.js
@@ -1,5 +1,5 @@
 import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
@@ -17,7 +17,7 @@ export default class Superscript extends Tools {
 
   get active() {
     return state => {
-      return markActive(state.config.schema.marks.superscript)(state);
+      return Commands.markActive(state.config.schema.marks.superscript)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/InlineAnnotations/UnderlineService/Underline.js b/wax-prosemirror-services/src/InlineAnnotations/UnderlineService/Underline.js
index 1c1026b9c..168dcb15f 100644
--- a/wax-prosemirror-services/src/InlineAnnotations/UnderlineService/Underline.js
+++ b/wax-prosemirror-services/src/InlineAnnotations/UnderlineService/Underline.js
@@ -1,5 +1,5 @@
 import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
@@ -17,7 +17,7 @@ export default class Underline extends Tools {
 
   get active() {
     return state => {
-      return markActive(state.config.schema.marks.underline)(state);
+      return Commands.markActive(state.config.schema.marks.underline)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/LinkService/LinkTool.js b/wax-prosemirror-services/src/LinkService/LinkTool.js
index 6a02fde44..a34f89301 100644
--- a/wax-prosemirror-services/src/LinkService/LinkTool.js
+++ b/wax-prosemirror-services/src/LinkService/LinkTool.js
@@ -1,5 +1,5 @@
 import { toggleMark } from "prosemirror-commands";
-import { markActive } from "../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
@@ -11,20 +11,11 @@ export default class LinkTool extends Tools {
 
   get run() {
     return (state, dispatch) => {
-      if (markActive(state.config.schema.marks.link)(state)) {
+      if (Commands.markActive(state.config.schema.marks.link)(state)) {
         toggleMark(state.config.schema.marks.link)(state, dispatch);
         return true;
       }
-      const { selection: { $from, $to } } = state;
-      dispatch(
-        state.tr
-          .setMeta("addToHistory", false)
-          .addMark(
-            $from.pos,
-            $to.pos,
-            state.schema.marks.link.create({ href: "" })
-          )
-      );
+      Commands.createLink(state, dispatch);
     };
   }
 
@@ -34,7 +25,7 @@ export default class LinkTool extends Tools {
 
   get active() {
     return state => {
-      return markActive(state.config.schema.marks.link)(state);
+      return Commands.markActive(state.config.schema.marks.link)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/ListsService/BulletListService/BulletList.js b/wax-prosemirror-services/src/ListsService/BulletListService/BulletList.js
index 9caea1dc7..80ab99f14 100644
--- a/wax-prosemirror-services/src/ListsService/BulletListService/BulletList.js
+++ b/wax-prosemirror-services/src/ListsService/BulletListService/BulletList.js
@@ -2,7 +2,7 @@ import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
 import { wrapInList } from "prosemirror-schema-list";
-import { blockActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 
 @injectable()
 export default class BulletList extends Tools {
@@ -23,7 +23,7 @@ export default class BulletList extends Tools {
 
   get active() {
     return state => {
-      return blockActive(state.config.schema.nodes.bulletlist)(state);
+      return Commands.blockActive(state.config.schema.nodes.bulletlist)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js b/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js
index cff84727c..9f01a6b82 100644
--- a/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js
+++ b/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js
@@ -2,7 +2,7 @@ import Tools from "../../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
 import { wrapInList } from "prosemirror-schema-list";
-import { blockActive } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 
 @injectable()
 export default class OrderedList extends Tools {
@@ -23,7 +23,7 @@ export default class OrderedList extends Tools {
 
   get active() {
     return state => {
-      return blockActive(state.config.schema.nodes.orderedlist)(state);
+      return Commands.blockActive(state.config.schema.nodes.orderedlist)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/NoteService/Editor.js b/wax-prosemirror-services/src/NoteService/Editor.js
index 5f7c4a852..3e6b902dc 100644
--- a/wax-prosemirror-services/src/NoteService/Editor.js
+++ b/wax-prosemirror-services/src/NoteService/Editor.js
@@ -5,8 +5,7 @@ import { StepMap } from "prosemirror-transform";
 import { keymap } from "prosemirror-keymap";
 import { undo, redo } from "prosemirror-history";
 import { WaxContext } from "wax-prosemirror-core/src/ioc-react";
-
-import { markActive } from "../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 
 export default ({ node, view, pos }) => {
   const editorRef = useRef();
@@ -23,9 +22,9 @@ export default ({ node, view, pos }) => {
               "Mod-z": () => undo(view.state, view.dispatch),
               "Mod-y": () => redo(view.state, view.dispatch),
               "Mod-u": () =>
-                markActive(noteView.state.config.schema.marks.underline)(
-                  noteView.state
-                )
+                Commands.markActive(
+                  noteView.state.config.schema.marks.underline
+                )(noteView.state)
             })
           ]
         }),
diff --git a/wax-prosemirror-services/src/OverlayService/usePosition.js b/wax-prosemirror-services/src/OverlayService/usePosition.js
index e4fe442f4..2dfaa600c 100644
--- a/wax-prosemirror-services/src/OverlayService/usePosition.js
+++ b/wax-prosemirror-services/src/OverlayService/usePosition.js
@@ -1,6 +1,5 @@
 import { useState, useContext, useEffect, useCallback } from "react";
 import { isObject } from "lodash";
-import { markActive, getMarkPosition } from "../lib/Utils";
 import { WaxContext } from "wax-prosemirror-core/src/ioc-react";
 import { DocumentHelpers } from "wax-prosemirror-utilities";
 
diff --git a/wax-prosemirror-services/src/TablesService/EditTableService/TableDropDownOptions.js b/wax-prosemirror-services/src/TablesService/EditTableService/TableDropDownOptions.js
index b9d317b1c..25ea0d512 100644
--- a/wax-prosemirror-services/src/TablesService/EditTableService/TableDropDownOptions.js
+++ b/wax-prosemirror-services/src/TablesService/EditTableService/TableDropDownOptions.js
@@ -4,7 +4,7 @@ import { injectable } from "inversify";
 import { isEmpty } from "lodash";
 import { TableDropDown } from "wax-prosemirror-components";
 import { addColumnBefore } from "prosemirror-tables";
-import { canInsert } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import Tools from "../../lib/Tools";
 
 @injectable()
@@ -20,7 +20,7 @@ export default class TableDropDownOptions extends Tools {
 
   get enable() {
     return state => {
-      return canInsert(state.config.schema.nodes.table)(state);
+      return Commands.canInsert(state.config.schema.nodes.table)(state);
     };
   }
 
diff --git a/wax-prosemirror-services/src/TablesService/InsertTableService/Table.js b/wax-prosemirror-services/src/TablesService/InsertTableService/Table.js
index 238c9084e..cae1293ff 100644
--- a/wax-prosemirror-services/src/TablesService/InsertTableService/Table.js
+++ b/wax-prosemirror-services/src/TablesService/InsertTableService/Table.js
@@ -1,5 +1,5 @@
 import Tools from "../../lib/Tools";
-import { createTable, canInsert } from "../../lib/Utils";
+import { Commands } from "wax-prosemirror-utilities";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
 
@@ -10,13 +10,13 @@ export default class Table extends Tools {
 
   get run() {
     return (state, dispatch) => {
-      return createTable(state, dispatch);
+      return Commands.createTable(state, dispatch);
     };
   }
 
   get enable() {
     return state => {
-      return canInsert(state.config.schema.nodes.table)(state);
+      return Commands.canInsert(state.config.schema.nodes.table)(state);
     };
   }
 }
diff --git a/wax-prosemirror-utilities/index.js b/wax-prosemirror-utilities/index.js
index d2548468a..6996a4213 100644
--- a/wax-prosemirror-utilities/index.js
+++ b/wax-prosemirror-utilities/index.js
@@ -1,2 +1,3 @@
 export { default as SchemaHelpers } from "./src/schema/SchemaHelpers";
 export { default as DocumentHelpers } from "./src/document/DocumentHelpers";
+export { default as Commands } from "./src/commands/Commands";
diff --git a/wax-prosemirror-services/src/lib/Utils.js b/wax-prosemirror-utilities/src/commands/Commands.js
similarity index 64%
rename from wax-prosemirror-services/src/lib/Utils.js
rename to wax-prosemirror-utilities/src/commands/Commands.js
index a686d1b86..16d1fb8d6 100644
--- a/wax-prosemirror-services/src/lib/Utils.js
+++ b/wax-prosemirror-utilities/src/commands/Commands.js
@@ -30,29 +30,6 @@ const canInsert = type => state => {
   return false;
 };
 
-const getMarkPosition = ($start, mark) => {
-  let startIndex = $start.index(),
-    endIndex = $start.indexAfter();
-  while (
-    startIndex > 0 &&
-    mark.isInSet($start.parent.child(startIndex - 1).marks)
-  )
-    startIndex--;
-  while (
-    endIndex < $start.parent.childCount &&
-    mark.isInSet($start.parent.child(endIndex).marks)
-  )
-    endIndex++;
-  let startPos = $start.start(),
-    endPos = startPos;
-  for (let i = 0; i < endIndex; i++) {
-    let size = $start.parent.child(i).nodeSize;
-    if (i < startIndex) startPos += size;
-    endPos += size;
-  }
-  return { from: startPos, to: endPos };
-};
-
 const createTable = (state, dispatch) => {
   let rowCount = window && window.prompt("How many rows?", 2);
   let colCount = window && window.prompt("How many columns?", 2);
@@ -71,4 +48,13 @@ const createTable = (state, dispatch) => {
   dispatch(state.tr.replaceSelectionWith(table));
 };
 
-export { markActive, blockActive, canInsert, createTable, getMarkPosition };
+const createLink = (state, dispatch) => {
+  const { selection: { $from, $to } } = state;
+  dispatch(
+    state.tr
+      .setMeta("addToHistory", false)
+      .addMark($from.pos, $to.pos, state.schema.marks.link.create({ href: "" }))
+  );
+};
+
+export default { markActive, blockActive, canInsert, createTable, createLink };
-- 
GitLab