From be700e1e40db12941b86825674375648741b6c54 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Fri, 7 Aug 2020 19:15:21 +0300 Subject: [PATCH] disable if from eq to --- .../src/components/Button.js | 20 +++--- .../src/NoteService/Editor.js | 69 ++++++++++--------- .../AcceptTrackChange.js | 8 +++ .../RejectTrackChange.js | 8 +++ 4 files changed, 63 insertions(+), 42 deletions(-) diff --git a/wax-prosemirror-components/src/components/Button.js b/wax-prosemirror-components/src/components/Button.js index 4e950bc85..50bd49e97 100644 --- a/wax-prosemirror-components/src/components/Button.js +++ b/wax-prosemirror-components/src/components/Button.js @@ -1,24 +1,26 @@ -import React, { useContext } from "react"; -import styled from "styled-components"; -import { ButtonStyles } from "wax-prosemirror-themes"; -import { WaxContext } from "wax-prosemirror-core"; +import React, { useContext } from 'react'; +import styled from 'styled-components'; +import { ButtonStyles } from 'wax-prosemirror-themes'; +import { WaxContext } from 'wax-prosemirror-core'; const ButtonStyled = styled.button` ${ButtonStyles}; opacity: ${props => (props.select ? 1 : 0.4)}; - pointer-events: ${props => (props.select ? "default" : "none")}; - color: ${props => (props.isActive ? "white" : props.theme.colorButton)}; + pointer-events: ${props => (props.select ? 'default' : 'none')}; + color: ${props => (props.isActive ? 'white' : props.theme.colorButton)}; background-color: ${props => - props.isActive ? props.theme.colorPrimary : "transparent"}; + props.isActive ? props.theme.colorPrimary : 'transparent'}; &:hover { background-color: ${props => - props.isActive ? props.theme.colorPrimary : "transparent"}; + props.isActive ? props.theme.colorPrimary : 'transparent'}; } `; const Button = ({ view = {}, item }) => { if (item.onlyOnMain) { - const { view: { main } } = useContext(WaxContext); + const { + view: { main }, + } = useContext(WaxContext); view = main; } diff --git a/wax-prosemirror-services/src/NoteService/Editor.js b/wax-prosemirror-services/src/NoteService/Editor.js index 376644b2f..acd9b3974 100644 --- a/wax-prosemirror-services/src/NoteService/Editor.js +++ b/wax-prosemirror-services/src/NoteService/Editor.js @@ -15,8 +15,9 @@ export default ({ node, view }) => { const editorRef = useRef(); const context = useContext(WaxContext); const noteId = node.attrs.id; + let noteView; useEffect(() => { - const noteView = new EditorView( + noteView = new EditorView( { mount: editorRef.current }, { state: EditorState.create({ @@ -24,38 +25,7 @@ export default ({ node, view }) => { plugins: [keymap(createKeyBindings()), ...context.app.getPlugins()], }), // This is the magic part - 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, - ); - - const noteFound = filter(allNotes, { - node: { attrs: { id: noteId } }, - }); - - // TODO Remove timeout and use state to check if noteView has changed - setTimeout(() => { - context.updateView({}, noteId); - }, 20); - - if (!tr.getMeta('fromOutside')) { - let outerTr = view.state.tr, - offsetMap = StepMap.offset(noteFound[0].pos + 1); - for (let i = 0; i < transactions.length; i++) { - let steps = transactions[i].steps; - for (let j = 0; j < steps.length; j++) - outerTr.step(steps[j].map(offsetMap)); - } - - if (outerTr.docChanged) - view.dispatch(outerTr.setMeta('outsideView', 'notes')); - } - }, + dispatchTransaction, handleDOMEvents: { mousedown: () => { context.updateView({}, noteId); @@ -84,6 +54,39 @@ export default ({ node, view }) => { } }, []); + const dispatchTransaction = tr => { + const { state, transactions } = noteView.state.applyTransaction(tr); + noteView.updateState(state); + + const allNotes = DocumentHelpers.findChildrenByType( + view.state.doc, + view.state.schema.nodes.footnote, + true, + ); + + const noteFound = filter(allNotes, { + node: { attrs: { id: noteId } }, + }); + + // TODO Remove timeout and use state to check if noteView has changed + setTimeout(() => { + context.updateView({}, noteId); + }, 20); + + if (!tr.getMeta('fromOutside')) { + let outerTr = view.state.tr, + offsetMap = StepMap.offset(noteFound[0].pos + 1); + for (let i = 0; i < transactions.length; i++) { + let steps = transactions[i].steps; + for (let j = 0; j < steps.length; j++) + outerTr.step(steps[j].map(offsetMap)); + } + + if (outerTr.docChanged) + view.dispatch(outerTr.setMeta('outsideView', 'notes')); + } + }; + const createKeyBindings = () => { const keys = getKeys(); Object.keys(baseKeymap).forEach(key => { diff --git a/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js b/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js index 069ece3a1..ecde18b5b 100644 --- a/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js +++ b/wax-prosemirror-services/src/TrackChangeService/AcceptTrackChangeService/AcceptTrackChange.js @@ -67,6 +67,14 @@ class AcceptTrackChange extends Tools { }; } + select = state => { + const { + selection: { from, to }, + } = state; + if (from === to) return false; + return true; + }; + get active() { return state => {}; } diff --git a/wax-prosemirror-services/src/TrackChangeService/RejectTrackChangeService/RejectTrackChange.js b/wax-prosemirror-services/src/TrackChangeService/RejectTrackChangeService/RejectTrackChange.js index 84f8775d2..0d89d3c74 100644 --- a/wax-prosemirror-services/src/TrackChangeService/RejectTrackChangeService/RejectTrackChange.js +++ b/wax-prosemirror-services/src/TrackChangeService/RejectTrackChangeService/RejectTrackChange.js @@ -88,6 +88,14 @@ class RejectTrackChange extends Tools { }; } + select = state => { + const { + selection: { from, to }, + } = state; + if (from === to) return false; + return true; + }; + get active() { return state => {}; } -- GitLab