From 6315e97518478778f903fa0def81ed187ec0d7df Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Thu, 25 Jun 2020 18:41:32 +0300
Subject: [PATCH] save conversation on mark

---
 editors/editoria/src/Editoria.js               |  2 +-
 .../src/components/comments/CommentBox.js      | 18 +++++++++++++++++-
 .../src/components/link/LinkComponent.js       |  1 +
 .../src/components/rightArea/RightArea.js      |  1 +
 .../src/marks/commentMark.js                   |  2 +-
 .../src/document/DocumentHelpers.js            |  7 ++++++-
 6 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/editors/editoria/src/Editoria.js b/editors/editoria/src/Editoria.js
index f94f3052f..e2cd4aede 100644
--- a/editors/editoria/src/Editoria.js
+++ b/editors/editoria/src/Editoria.js
@@ -47,7 +47,7 @@ const Editoria = () => (
       autoFocus
       placeholder="Type Something..."
       fileUpload={file => renderImage(file)}
-      value={`<p class="paragraph">This is the first paragraph</p><p class="paragraph">This is the second paragraph</p><p class="author">This is an author</p>`}
+      value={`<p class="paragraph">This is the first paragraph</p><p class="paragraph">This is the <span class="comment" data-id="ff7552b8-956c-4822-99b5-826715751c45" data-conversation="[{&quot;demo&quot;:&quot;dsdadsa&quot;}]" data-group="main">second</span> paragraph</p><p class="author">This is an author</p>`}
       // value={`<p class="paragraph"><span class="comment" data-id="834ba3c5-1fcf-4a42-8e2f-1f975f229716" data-conversation="[]" data-group="main">and a </span><span class="insertion" data-id="" data-user="1234" data-username="demo" data-date="26541557" data-group=""><span class="comment" data-id="834ba3c5-1fcf-4a42-8e2f-1f975f229716" data-conversation="[]" data-group="main">sdasdssd</span></span><span class="comment" data-id="834ba3c5-1fcf-4a42-8e2f-1f975f229716" data-conversation="[]" data-group="main">paragraph</span></p><p class="paragraph">more</p>`}
       layout={EditoriaLayout}
       TrackChange
diff --git a/wax-prosemirror-components/src/components/comments/CommentBox.js b/wax-prosemirror-components/src/components/comments/CommentBox.js
index 38f74a170..e17cc7489 100644
--- a/wax-prosemirror-components/src/components/comments/CommentBox.js
+++ b/wax-prosemirror-components/src/components/comments/CommentBox.js
@@ -37,6 +37,7 @@ export default ({ comment, view, top, dataBox }) => {
   const { view: { main: { props: { user } } }, app, activeView } = useContext(
       WaxContext
     ),
+    { state, dispatch } = activeView,
     commentInput = useRef(null),
     [animate, setAnimate] = useState(false),
     [commentAnnotation, setCommentAnnotation] = useState(comment),
@@ -59,7 +60,22 @@ export default ({ comment, view, top, dataBox }) => {
 
   const saveComment = () => {
     const { current: { value } } = commentInput;
-    console.log(commentAnnotation, currentUser, value);
+    const { tr, doc } = state;
+    const commentMark = state.schema.marks.comment;
+
+    const obj = { [user.username]: value };
+    commentAnnotation.attrs.conversation.push(obj);
+
+    dispatch(
+      tr.addMark(
+        commentAnnotation.pos,
+        commentAnnotation.pos + commentAnnotation.node.nodeSize,
+        commentMark.create({
+          ...((commentAnnotation && commentAnnotation.attrs) || {}),
+          conversation: commentAnnotation.attrs.conversation
+        })
+      )
+    );
   };
 
   return (
diff --git a/wax-prosemirror-components/src/components/link/LinkComponent.js b/wax-prosemirror-components/src/components/link/LinkComponent.js
index c44c989fe..a7ac13a3b 100644
--- a/wax-prosemirror-components/src/components/link/LinkComponent.js
+++ b/wax-prosemirror-components/src/components/link/LinkComponent.js
@@ -19,6 +19,7 @@ const Button = styled.button`
 `;
 
 const LinkComponent = ({ mark, setPosition, position }) => {
+  console.log(mark);
   const href = mark ? mark.attrs.href : null,
     linkMark = mark ? mark : null,
     { view: { main }, activeView } = useContext(WaxContext),
diff --git a/wax-prosemirror-components/src/components/rightArea/RightArea.js b/wax-prosemirror-components/src/components/rightArea/RightArea.js
index fe0fc66e1..4eae5f947 100644
--- a/wax-prosemirror-components/src/components/rightArea/RightArea.js
+++ b/wax-prosemirror-components/src/components/rightArea/RightArea.js
@@ -156,6 +156,7 @@ const updateMarks = view => {
             mark.type.name === "format_change"
           ) {
             mark.pos = node.pos;
+            mark.node = node.node;
             finalMarks.push(mark);
           }
         });
diff --git a/wax-prosemirror-schema/src/marks/commentMark.js b/wax-prosemirror-schema/src/marks/commentMark.js
index 2c2f36a33..b946d7dd8 100644
--- a/wax-prosemirror-schema/src/marks/commentMark.js
+++ b/wax-prosemirror-schema/src/marks/commentMark.js
@@ -15,7 +15,7 @@ const comment = {
           class: hook.dom.getAttribute("class"),
           id: hook.dom.dataset.id,
           group: hook.dom.dataset.group,
-          conversation: hook.dom.dataset.conversation
+          conversation: JSON.parse(hook.dom.dataset.conversation)
         });
         next();
       }
diff --git a/wax-prosemirror-utilities/src/document/DocumentHelpers.js b/wax-prosemirror-utilities/src/document/DocumentHelpers.js
index 716b5c35a..37a09a354 100644
--- a/wax-prosemirror-utilities/src/document/DocumentHelpers.js
+++ b/wax-prosemirror-utilities/src/document/DocumentHelpers.js
@@ -62,10 +62,15 @@ const findChildrenByMark = (node, markType, descend) => {
   return findChildren(node, child => markType.isInSet(child.marks), descend);
 };
 
+export const findChildrenByAttr = (node, predicate, descend) => {
+  return findChildren(node, child => !!predicate(child.attrs), descend);
+};
+
 export default {
   findMark,
   findBlockNodes,
   findChildrenByType,
   findInlineNodes,
-  findChildrenByMark
+  findChildrenByMark,
+  findChildrenByAttr
 };
-- 
GitLab