From 980f75bd9a95d4bd347ec646d09eef3a0184f99d Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Thu, 24 Sep 2020 19:11:22 +0300 Subject: [PATCH] fix noteEditor updating main --- .../src/NoteService/Editor.js | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/wax-prosemirror-services/src/NoteService/Editor.js b/wax-prosemirror-services/src/NoteService/Editor.js index 4edbe7113..980f3d086 100644 --- a/wax-prosemirror-services/src/NoteService/Editor.js +++ b/wax-prosemirror-services/src/NoteService/Editor.js @@ -1,5 +1,5 @@ /* eslint react/prop-types: 0 */ -import React, { useEffect, useRef, useContext } from 'react'; +import React, { useEffect, useRef, useContext, useState } from 'react'; import { filter } from 'lodash'; import { EditorView } from 'prosemirror-view'; import { EditorState, TextSelection } from 'prosemirror-state'; @@ -18,6 +18,8 @@ export default ({ node, view }) => { const context = useContext(WaxContext); const noteId = node.attrs.id; let noteView; + let updateMainView = true; + useEffect(() => { noteView = new EditorView( { mount: editorRef.current }, @@ -41,6 +43,9 @@ export default ({ node, view }) => { transformPasted: slice => { return transformPasted(slice, noteView); }, + handleKeyPress: (noteEditorView, from, to, content) => { + updateMainView = false; + }, }, ); @@ -80,21 +85,24 @@ export default ({ node, view }) => { }); // TODO Remove timeout and use state to check if noteView has changed - setTimeout(() => { - context.updateView({}, noteId); - }, 20); + if (updateMainView) { + setTimeout(() => { + context.updateView({}, noteId); + }, 20); + } if (!tr.getMeta('fromOutside')) { const outerTr = view.state.tr; const offsetMap = StepMap.offset(noteFound[0].pos + 1); for (let i = 0; i < transactions.length; i++) { - let steps = transactions[i].steps; + let { steps } = transactions[i]; for (let j = 0; j < steps.length; j++) outerTr.step(steps[j].map(offsetMap)); } if (outerTr.docChanged) view.dispatch(outerTr.setMeta('outsideView', 'notes')); + updateMainView = true; } }; @@ -115,11 +123,11 @@ export default ({ node, view }) => { }; if (context.view[noteId]) { - let state = context.view[noteId].state; - let start = node.content.findDiffStart(state.doc.content); + const { state } = context.view[noteId]; + const start = node.content.findDiffStart(state.doc.content); if (start != null) { let { a: endA, b: endB } = node.content.findDiffEnd(state.doc.content); - let overlap = start - Math.min(endA, endB); + const overlap = start - Math.min(endA, endB); if (overlap > 0) { endA += overlap; endB += overlap; -- GitLab