From 416c64be6b2d0c866ae5147be1a9f8b7a0246e0b Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Sun, 11 Apr 2021 04:08:54 +0300
Subject: [PATCH] only save on changes

---
 .../components/comments/ConnectedComment.js    | 18 ++++++++++--------
 wax-prosemirror-core/src/WaxView.js            | 17 +++++++++++++----
 .../src/plugins/placeholder.js                 | 16 ++++++++--------
 3 files changed, 31 insertions(+), 20 deletions(-)

diff --git a/wax-prosemirror-components/src/components/comments/ConnectedComment.js b/wax-prosemirror-components/src/components/comments/ConnectedComment.js
index acb054b89..ccbd8e6a7 100644
--- a/wax-prosemirror-components/src/components/comments/ConnectedComment.js
+++ b/wax-prosemirror-components/src/components/comments/ConnectedComment.js
@@ -74,14 +74,16 @@ export default ({ comment, top, commentId, recalculateTops }) => {
 
     allCommentsWithSameId.forEach(singleComment => {
       dispatch(
-        tr.addMark(
-          singleComment.pos,
-          singleComment.pos + singleComment.nodeSize,
-          commentMark.create({
-            ...((comment && comment.attrs) || {}),
-            conversation: comment.attrs.conversation,
-          }),
-        ),
+        tr
+          .addMark(
+            singleComment.pos,
+            singleComment.pos + singleComment.nodeSize,
+            commentMark.create({
+              ...((comment && comment.attrs) || {}),
+              conversation: comment.attrs.conversation,
+            }),
+          )
+          .setMeta('forceUpdate', true),
       );
     });
     activeView.focus();
diff --git a/wax-prosemirror-core/src/WaxView.js b/wax-prosemirror-core/src/WaxView.js
index b195a3a64..4f539788c 100644
--- a/wax-prosemirror-core/src/WaxView.js
+++ b/wax-prosemirror-core/src/WaxView.js
@@ -1,4 +1,10 @@
-import React, { useRef, useContext, useCallback, useMemo } from 'react';
+import React, {
+  useRef,
+  useContext,
+  useCallback,
+  useMemo,
+  useState,
+} from 'react';
 
 import applyDevTools from 'prosemirror-dev-tools';
 import { EditorState } from 'prosemirror-state';
@@ -10,12 +16,14 @@ import { trackedTransaction } from 'wax-prosemirror-services';
 import { WaxContext } from './WaxContext';
 import transformPasted from './helpers/TransformPasted';
 
+let previousDoc;
+
 export default props => {
   const { readonly, onBlur, options, debug, autoFocus, user } = props;
   const editorRef = useRef();
   let view;
   const context = useContext(WaxContext);
-
+  const [previousState, setPreviousState] = useState();
   const setEditorRef = useCallback(
     node => {
       if (editorRef.current) {
@@ -75,6 +83,7 @@ export default props => {
         ? trackedTransaction(transaction, view.state, user)
         : transaction;
 
+    previousDoc = view.state.doc;
     const state = view.state.apply(tr);
     view.updateState(state);
 
@@ -90,8 +99,8 @@ export default props => {
         'main',
       );
     }
-
-    props.onChange(state.doc.content);
+    if (view.state.doc !== previousDoc || tr.getMeta('forceUpdate'))
+      props.onChange(state.doc.content);
   };
 
   const editor = <div ref={setEditorRef} />;
diff --git a/wax-prosemirror-core/src/plugins/placeholder.js b/wax-prosemirror-core/src/plugins/placeholder.js
index 9a1595255..de3fd8058 100644
--- a/wax-prosemirror-core/src/plugins/placeholder.js
+++ b/wax-prosemirror-core/src/plugins/placeholder.js
@@ -1,7 +1,7 @@
-import { Plugin, PluginKey } from "prosemirror-state";
-import { Decoration, DecorationSet } from "prosemirror-view";
+import { Plugin, PluginKey } from 'prosemirror-state';
+import { Decoration, DecorationSet } from 'prosemirror-view';
 
-const placeHolderText = new PluginKey("placeHolderText");
+const placeHolderText = new PluginKey('placeHolderText');
 
 export default props => {
   return new Plugin({
@@ -17,16 +17,16 @@ export default props => {
           ) {
             decorations.push(
               Decoration.node(pos, pos + node.nodeSize, {
-                class: "empty-node",
-                "data-content": props.content
-              })
+                class: 'empty-node',
+                'data-content': props.content,
+              }),
             );
           }
         };
         state.doc.descendants(decorate);
 
         return DecorationSet.create(state.doc, decorations);
-      }
-    }
+      },
+    },
   });
 };
-- 
GitLab