From 15adb1d5190258b9853f8a2ece4523ff9fb024bf Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Wed, 4 Mar 2020 14:38:51 +0200
Subject: [PATCH] fix notes rerender (needs cleaning)

---
 editors/editoria/src/Editoria.js              |  2 +-
 .../src/nodes/footNoteNode.js                 | 23 +++++++++++++++--
 .../src/NoteService/Editor.js                 | 25 +++++++++++++------
 .../src/NoteService/Note.js                   |  6 ++++-
 .../src/NoteService/NoteComponent.js          |  7 ++++++
 .../src/NoteService/NoteEditor.js             |  2 +-
 6 files changed, 53 insertions(+), 12 deletions(-)

diff --git a/editors/editoria/src/Editoria.js b/editors/editoria/src/Editoria.js
index 2072bde19..4fa725e28 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=""
+      value="this is some  text"
       layout={EditoriaLayout}
       user={user}
     />
diff --git a/wax-prosemirror-schema/src/nodes/footNoteNode.js b/wax-prosemirror-schema/src/nodes/footNoteNode.js
index 6c4667922..0beb38964 100644
--- a/wax-prosemirror-schema/src/nodes/footNoteNode.js
+++ b/wax-prosemirror-schema/src/nodes/footNoteNode.js
@@ -1,10 +1,29 @@
+import { v4 as uuid } from "uuid";
+
 const footnote = {
   group: "inline",
   content: "inline*",
   inline: true,
   atom: true,
-  toDOM: () => ["footnote", 0],
-  parseDOM: [{ tag: "footnote" }]
+  attrs: {
+    id: { default: "" }
+  },
+  toDOM: node => {
+    // node.attrs.id = uuid();
+    // console.log(node.attrs);
+    return ["footnote", node.attrs, 0];
+  },
+  parseDOM: [
+    {
+      tag: "footnote",
+      getAttrs(dom) {
+        console.log("poutsea", dom.getAttribute("id"));
+        return {
+          id: dom.getAttribute("id")
+        };
+      }
+    }
+  ]
 };
 
 export default footnote;
diff --git a/wax-prosemirror-services/src/NoteService/Editor.js b/wax-prosemirror-services/src/NoteService/Editor.js
index 1ab70ad29..89762e635 100644
--- a/wax-prosemirror-services/src/NoteService/Editor.js
+++ b/wax-prosemirror-services/src/NoteService/Editor.js
@@ -8,6 +8,7 @@ import { undo, redo } from "prosemirror-history";
 import { WaxContext } from "wax-prosemirror-core/src/ioc-react";
 import { Commands } from "wax-prosemirror-utilities";
 import { NoteEditorContainer } from "wax-prosemirror-components";
+import { DocumentHelpers } from "wax-prosemirror-utilities";
 
 export default ({ node, view, pos }) => {
   const editorRef = useRef();
@@ -25,10 +26,19 @@ export default ({ node, view, pos }) => {
         dispatchTransaction: tr => {
           let { state, transactions } = noteView.state.applyTransaction(tr);
           noteView.updateState(state);
-
+          const allNotes = DocumentHelpers.findChildrenByType(
+            view.state.doc,
+            view.state.schema.nodes.footnote,
+            true
+          );
+          let noteFound = "";
+          allNotes.forEach(thenote => {
+            if (thenote.node.attrs.id === node.attrs.id) noteFound = thenote;
+          });
           if (!tr.getMeta("fromOutside")) {
+            console.log("foutses", node, noteFound.pos);
             let outerTr = view.state.tr,
-              offsetMap = StepMap.offset(pos + 1);
+              offsetMap = StepMap.offset(noteFound.pos + 1);
             for (let i = 0; i < transactions.length; i++) {
               let steps = transactions[i].steps;
               for (let j = 0; j < steps.length; j++)
@@ -48,8 +58,9 @@ export default ({ node, view, pos }) => {
         }
       }
     );
-    // noteView.focus();
-    context.updateView({ [pos]: noteView });
+
+    // if (context.view[2]) context.view[2].focus();
+    context.updateView({ [node.attrs.id]: noteView });
   }, []);
 
   const createKeyBindings = () => {
@@ -71,8 +82,8 @@ export default ({ node, view, pos }) => {
     };
   };
 
-  if (context.view[pos]) {
-    let state = context.view[pos].state;
+  if (context.view[node.attrs.id]) {
+    let state = context.view[node.attrs.id].state;
     let start = node.content.findDiffStart(state.doc.content);
     if (start != null) {
       let { a: endA, b: endB } = node.content.findDiffEnd(state.doc.content);
@@ -81,7 +92,7 @@ export default ({ node, view, pos }) => {
         endA += overlap;
         endB += overlap;
       }
-      context.view[pos].dispatch(
+      context.view[node.attrs.id].dispatch(
         state.tr
           .replace(start, endB, node.slice(start, endA))
           .setMeta("fromOutside", true)
diff --git a/wax-prosemirror-services/src/NoteService/Note.js b/wax-prosemirror-services/src/NoteService/Note.js
index 699bbde05..3d948d20f 100644
--- a/wax-prosemirror-services/src/NoteService/Note.js
+++ b/wax-prosemirror-services/src/NoteService/Note.js
@@ -2,6 +2,7 @@ import Tools from "../lib/Tools";
 import { injectable } from "inversify";
 import { icons } from "wax-prosemirror-components";
 import { Fragment } from "prosemirror-model";
+import { v4 as uuid } from "uuid";
 
 @injectable()
 export default class Note extends Tools {
@@ -17,7 +18,10 @@ export default class Note extends Tools {
           $from.parentOffset,
           $to.parentOffset
         );
-      const footnote = state.config.schema.nodes.footnote.create(null, content);
+      const footnote = state.config.schema.nodes.footnote.create(
+        { id: uuid() },
+        content
+      );
       dispatch(state.tr.replaceSelectionWith(footnote));
     };
   }
diff --git a/wax-prosemirror-services/src/NoteService/NoteComponent.js b/wax-prosemirror-services/src/NoteService/NoteComponent.js
index 018446cf5..406f9c7bd 100644
--- a/wax-prosemirror-services/src/NoteService/NoteComponent.js
+++ b/wax-prosemirror-services/src/NoteService/NoteComponent.js
@@ -23,6 +23,13 @@ export default () => {
 };
 const updateNotes = view => {
   if (view) {
+    console.log(
+      DocumentHelpers.findChildrenByType(
+        view.state.doc,
+        view.state.schema.nodes.footnote,
+        true
+      )
+    );
     return DocumentHelpers.findChildrenByType(
       view.state.doc,
       view.state.schema.nodes.footnote,
diff --git a/wax-prosemirror-services/src/NoteService/NoteEditor.js b/wax-prosemirror-services/src/NoteService/NoteEditor.js
index 0e8f197c0..08ffa5f08 100644
--- a/wax-prosemirror-services/src/NoteService/NoteEditor.js
+++ b/wax-prosemirror-services/src/NoteService/NoteEditor.js
@@ -6,7 +6,7 @@ export default ({ notes, view }) => {
     <div>
       {notes.map(note => (
         <Editor
-          key={`editor-${note.pos}`}
+          key={note.node.attrs.id}
           node={note.node}
           pos={note.pos}
           view={view}
-- 
GitLab