diff --git a/editors/editoria/package.json b/editors/editoria/package.json index f7b8b48108385498b8a7e8dc4bdd0807fed6a33e..e3f390a2289f59232eea9bca74421a1176f92551 100644 --- a/editors/editoria/package.json +++ b/editors/editoria/package.json @@ -6,7 +6,7 @@ "@guardian/prosemirror-invisibles": "^1.2.0", "@pubsweet/ui-toolkit": "^2.3.1", "fontsource-merriweather": "^3.0.9", - "prosemirror-tables": "^1.1.0", + "prosemirror-tables": "^1.1.1", "react": "^16.13.1", "react-dom": "^16.13.1", "react-panelgroup": "^1.0.10", diff --git a/wax-prosemirror-components/src/components/comments/ConnectedComment.js b/wax-prosemirror-components/src/components/comments/ConnectedComment.js index 23269d7894fa3f31788b812ee006d757c32c412b..acb054b8940b4152e8bccea7de2a67356d9fe3d4 100644 --- a/wax-prosemirror-components/src/components/comments/ConnectedComment.js +++ b/wax-prosemirror-components/src/components/comments/ConnectedComment.js @@ -17,6 +17,7 @@ const ConnectedCommentStyled = styled.div` `; export default ({ comment, top, commentId, recalculateTops }) => { + const context = useContext(WaxContext); const { view, view: { @@ -26,7 +27,7 @@ export default ({ comment, top, commentId, recalculateTops }) => { }, app, activeView, - } = useContext(WaxContext); + } = context; const [isActive, setIsActive] = useState(false); const [clickPost, setClickPost] = useState(false); @@ -53,6 +54,7 @@ export default ({ comment, top, commentId, recalculateTops }) => { useEffect(() => { setIsActive(false); + recalculateTops(); if (activeComment && commentId === activeComment.attrs.id) { setIsActive(true); recalculateTops(); @@ -92,6 +94,8 @@ export default ({ comment, top, commentId, recalculateTops }) => { return false; } + if (viewId !== 'main') context.updateView({}, viewId); + const maxPos = maxBy(allCommentsWithSameId, 'pos'); maxPos.pos += last(allCommentsWithSameId).node.nodeSize; @@ -120,6 +124,7 @@ export default ({ comment, top, commentId, recalculateTops }) => { }); // if (allCommentsWithSameId.length > 1); // maxPos += last(allCommentsWithSameId).node.nodeSize; + recalculateTops(); dispatch(state.tr.removeMark(minPos, maxPos, commentMark)); activeView.focus(); }; @@ -138,7 +143,7 @@ export default ({ comment, top, commentId, recalculateTops }) => { onClickResolve(); activeView.focus(); } - }, 200); + }, 400); }; const MemorizedComponent = useMemo( diff --git a/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js b/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js index cc2972a118bdfdf0ee90cbb7c31d74134be54ecb..b4e28d9e16c2b5a97b8179692b13e8156109f734 100644 --- a/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js +++ b/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js @@ -19,7 +19,8 @@ const ConnectedTrackChangeStyled = styled.div` `; export default ({ trackChangeId, top, recalculateTops, trackChange }) => { - const { app, activeView, view } = useContext(WaxContext); + const context = useContext(WaxContext); + const { app, activeView, view } = context; const user = app.config.get('user'); const [isActive, setIsActive] = useState(false); const { state, dispatch } = activeView; @@ -37,6 +38,8 @@ export default ({ trackChangeId, top, recalculateTops, trackChange }) => { const onClickBox = trackData => { if (trackData.node) return focusOnBlcock(trackData); + if (viewId !== 'main') context.updateView({}, viewId); + const allTracksWithSameId = DocumentHelpers.findAllMarksWithSameId( view[viewId].state, trackData, @@ -67,6 +70,7 @@ export default ({ trackChangeId, top, recalculateTops, trackChange }) => { useEffect(() => { setIsActive(false); + recalculateTops(); if (activeTrackChange && trackChangeId === activeTrackChange.attrs.id) { setIsActive(true); recalculateTops(); diff --git a/wax-prosemirror-services/src/LinkService/LinkTool.js b/wax-prosemirror-services/src/LinkService/LinkTool.js index c8301594fa42ea8c21d2f8d8a307c330039f6459..f9ee82a4051e3193b3b9c3da1e1bdc57970b52b3 100644 --- a/wax-prosemirror-services/src/LinkService/LinkTool.js +++ b/wax-prosemirror-services/src/LinkService/LinkTool.js @@ -25,6 +25,10 @@ export default class LinkTool extends Tools { }; } + select = state => { + return Commands.isOnSameTextBlock(state); + }; + get active() { return state => { return Commands.markActive(state.config.schema.marks.link)(state); diff --git a/wax-prosemirror-services/src/NoteService/Editor.js b/wax-prosemirror-services/src/NoteService/Editor.js index d8b7871bd1586f88a251eda49d5e0d60979a31d6..a77c8da0c009c1cacd268916ef99e2dc9d5fb66a 100644 --- a/wax-prosemirror-services/src/NoteService/Editor.js +++ b/wax-prosemirror-services/src/NoteService/Editor.js @@ -2,7 +2,7 @@ import React, { useEffect, useRef, useContext, useMemo } from 'react'; import { filter } from 'lodash'; import { EditorView } from 'prosemirror-view'; -import { EditorState } from 'prosemirror-state'; +import { EditorState, TextSelection } from 'prosemirror-state'; import { StepMap } from 'prosemirror-transform'; import { baseKeymap } from 'prosemirror-commands'; import { keymap } from 'prosemirror-keymap'; @@ -37,6 +37,14 @@ export default ({ node, view }) => { // This is the magic part dispatchTransaction, handleDOMEvents: { + blur: () => { + context.view[noteId].dispatch( + context.view[noteId].state.tr.setSelection( + new TextSelection(context.view[noteId].state.tr.doc.resolve(0)), + ), + ); + }, + mousedown: () => { context.updateView({}, noteId); clickInNote = true; diff --git a/yarn.lock b/yarn.lock index c57fb7235ad8b2e92e54da7186123ddb097f75cc..a1a25e10fdad58384f6458f67a11ac985e6bbaa1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14600,17 +14600,6 @@ prosemirror-state@1.3.3, prosemirror-state@>=1.0.0, prosemirror-state@^1.0.0, pr prosemirror-model "^1.0.0" prosemirror-transform "^1.0.0" -prosemirror-tables@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.1.0.tgz#e7fc65e57a44759b0b999d8c71294f79e5a4d54b" - integrity sha512-E00+KSbDw65966GdiLBpqTNxIextw0RavlGmvdv/dyYbN9OTD0gzaoCU1S8MAbz4GLKmY9Y/g4nSiC1IL1ThQg== - dependencies: - prosemirror-keymap "^1.1.2" - prosemirror-model "^1.8.1" - prosemirror-state "^1.3.1" - prosemirror-transform "^1.2.1" - prosemirror-view "^1.13.3" - prosemirror-tables@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.1.1.tgz#ad66300cc49500455cf1243bb129c9e7d883321e"