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