Skip to content
Snippets Groups Projects
Commit 15adb1d5 authored by chris's avatar chris
Browse files

fix notes rerender (needs cleaning)

parent 3fa65a4e
No related branches found
No related tags found
1 merge request!70Notes rerender
......@@ -47,7 +47,7 @@ const Editoria = () => (
autoFocus
placeholder="Type Something..."
fileUpload={file => renderImage(file)}
value=""
value="this is some text"
layout={EditoriaLayout}
user={user}
/>
......
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;
......@@ -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)
......
......@@ -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));
};
}
......
......@@ -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,
......
......@@ -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}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment