diff --git a/wax-prosemirror-components/src/components/comments/ConnectedComment.js b/wax-prosemirror-components/src/components/comments/ConnectedComment.js index acb054b8940b4152e8bccea7de2a67356d9fe3d4..ccbd8e6a738479dcac30f048a042ce11affb105d 100644 --- a/wax-prosemirror-components/src/components/comments/ConnectedComment.js +++ b/wax-prosemirror-components/src/components/comments/ConnectedComment.js @@ -74,14 +74,16 @@ export default ({ comment, top, commentId, recalculateTops }) => { allCommentsWithSameId.forEach(singleComment => { dispatch( - tr.addMark( - singleComment.pos, - singleComment.pos + singleComment.nodeSize, - commentMark.create({ - ...((comment && comment.attrs) || {}), - conversation: comment.attrs.conversation, - }), - ), + tr + .addMark( + singleComment.pos, + singleComment.pos + singleComment.nodeSize, + commentMark.create({ + ...((comment && comment.attrs) || {}), + conversation: comment.attrs.conversation, + }), + ) + .setMeta('forceUpdate', true), ); }); activeView.focus(); diff --git a/wax-prosemirror-core/src/WaxView.js b/wax-prosemirror-core/src/WaxView.js index b195a3a641ec5b3c501102474cd78341887b4b8f..4f539788ccc9f36ff0edf93ce8f6cdd3b7d8f109 100644 --- a/wax-prosemirror-core/src/WaxView.js +++ b/wax-prosemirror-core/src/WaxView.js @@ -1,4 +1,10 @@ -import React, { useRef, useContext, useCallback, useMemo } from 'react'; +import React, { + useRef, + useContext, + useCallback, + useMemo, + useState, +} from 'react'; import applyDevTools from 'prosemirror-dev-tools'; import { EditorState } from 'prosemirror-state'; @@ -10,12 +16,14 @@ import { trackedTransaction } from 'wax-prosemirror-services'; import { WaxContext } from './WaxContext'; import transformPasted from './helpers/TransformPasted'; +let previousDoc; + export default props => { const { readonly, onBlur, options, debug, autoFocus, user } = props; const editorRef = useRef(); let view; const context = useContext(WaxContext); - + const [previousState, setPreviousState] = useState(); const setEditorRef = useCallback( node => { if (editorRef.current) { @@ -75,6 +83,7 @@ export default props => { ? trackedTransaction(transaction, view.state, user) : transaction; + previousDoc = view.state.doc; const state = view.state.apply(tr); view.updateState(state); @@ -90,8 +99,8 @@ export default props => { 'main', ); } - - props.onChange(state.doc.content); + if (view.state.doc !== previousDoc || tr.getMeta('forceUpdate')) + props.onChange(state.doc.content); }; const editor = <div ref={setEditorRef} />; diff --git a/wax-prosemirror-core/src/plugins/placeholder.js b/wax-prosemirror-core/src/plugins/placeholder.js index 9a1595255314421161ae17a4222cffdf09e491a2..de3fd8058b9735f9951aa71c2bc5cb74a75b28a1 100644 --- a/wax-prosemirror-core/src/plugins/placeholder.js +++ b/wax-prosemirror-core/src/plugins/placeholder.js @@ -1,7 +1,7 @@ -import { Plugin, PluginKey } from "prosemirror-state"; -import { Decoration, DecorationSet } from "prosemirror-view"; +import { Plugin, PluginKey } from 'prosemirror-state'; +import { Decoration, DecorationSet } from 'prosemirror-view'; -const placeHolderText = new PluginKey("placeHolderText"); +const placeHolderText = new PluginKey('placeHolderText'); export default props => { return new Plugin({ @@ -17,16 +17,16 @@ export default props => { ) { decorations.push( Decoration.node(pos, pos + node.nodeSize, { - class: "empty-node", - "data-content": props.content - }) + class: 'empty-node', + 'data-content': props.content, + }), ); } }; state.doc.descendants(decorate); return DecorationSet.create(state.doc, decorations); - } - } + }, + }, }); };