From 53eaa1e2c8412a7d8080a0c0533d46f60928ed36 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Fri, 29 Jan 2021 15:21:08 +0200 Subject: [PATCH] fix comment count --- editors/editoria/src/layout/EditoriaLayout.js | 40 +++--------------- .../TrackChangeOptionsComponent.js | 14 ++++++- .../src/document/DocumentHelpers.js | 41 ++++++++++++++++++- 3 files changed, 56 insertions(+), 39 deletions(-) diff --git a/editors/editoria/src/layout/EditoriaLayout.js b/editors/editoria/src/layout/EditoriaLayout.js index c01a05806..5871d1f6d 100644 --- a/editors/editoria/src/layout/EditoriaLayout.js +++ b/editors/editoria/src/layout/EditoriaLayout.js @@ -196,38 +196,6 @@ const getNotes = main => { return notes; }; -const getCommentsTracks = main => { - const marks = DocumentHelpers.findInlineNodes(main.state.doc); - const commentsTracks = []; - marks.map(node => { - if (node.node.marks.length > 0) { - node.node.marks.filter(mark => { - if ( - mark.type.name === 'comment' || - mark.type.name === 'insertion' || - mark.type.name === 'deletion' || - mark.type.name === 'format_change' - ) { - mark.pos = node.pos; - commentsTracks.push(mark); - } - }); - } - }); - return commentsTracks; -}; - -const getTrackBlockNodes = main => { - const allBlockNodes = DocumentHelpers.findBlockNodes(main.state.doc); - const trackBlockNodes = []; - allBlockNodes.map(node => { - if (node.node.attrs.track && node.node.attrs.track.length > 0) { - trackBlockNodes.push(node); - } - }); - return trackBlockNodes; -}; - const LeftSideBar = ComponentPlugin('leftSideBar'); const MainMenuToolBar = ComponentPlugin('mainMenuToolBar'); const NotesArea = ComponentPlugin('notesArea'); @@ -258,8 +226,10 @@ const EditoriaLayout = ({ editor }) => { }; } const notes = main && getNotes(main); - const commentsTracks = main && getCommentsTracks(main).length; - const trackBlockNodes = main && getTrackBlockNodes(main).length; + const commentsTracksCount = + main && DocumentHelpers.getCommentsTracksCount(main); + const trackBlockNodesCount = + main && DocumentHelpers.getTrackBlockNodesCount(main); const areNotes = notes && !!notes.length && notes.length > 0; @@ -302,7 +272,7 @@ const EditoriaLayout = ({ editor }) => { <CommentsContainer> <CommentTrackToolsContainer> <CommentTrackTools> - {commentsTracks + trackBlockNodes} COMMENTS AND + {commentsTracksCount + trackBlockNodesCount} COMMENTS AND SUGGESTIONS <CommentTrackOptions> <CommentTrackToolBar /> diff --git a/wax-prosemirror-components/src/components/trackChanges/TrackChangeOptionsComponent.js b/wax-prosemirror-components/src/components/trackChanges/TrackChangeOptionsComponent.js index 5e9e65003..ae95ecb26 100644 --- a/wax-prosemirror-components/src/components/trackChanges/TrackChangeOptionsComponent.js +++ b/wax-prosemirror-components/src/components/trackChanges/TrackChangeOptionsComponent.js @@ -163,12 +163,22 @@ const getTrackBlockNodes = main => { }; const getComments = main => { - const comments = DocumentHelpers.findChildrenByMark( + const comments = []; + const commentsNodes = DocumentHelpers.findChildrenByMark( main.state.doc, main.state.schema.marks.comment, true, ); - return comments; + commentsNodes.map(node => { + if (node.node.marks.length > 0) { + node.node.marks.filter(mark => { + if (mark.type.name === 'comment') { + comments.push(mark); + } + }); + } + }); + return [...new Set(comments.map(item => item.attrs.id))]; }; const TrackChangeOptionsComponent = ({ diff --git a/wax-prosemirror-utilities/src/document/DocumentHelpers.js b/wax-prosemirror-utilities/src/document/DocumentHelpers.js index b5b0f7b9e..cea418a11 100644 --- a/wax-prosemirror-utilities/src/document/DocumentHelpers.js +++ b/wax-prosemirror-utilities/src/document/DocumentHelpers.js @@ -1,5 +1,3 @@ -import { isObject } from 'lodash'; - const findMark = (state, PMmark, toArr = false) => { const { selection: { $from, $to }, @@ -27,6 +25,43 @@ const findMark = (state, PMmark, toArr = false) => { return markFound; }; +const getCommentsTracksCount = main => { + const marks = findInlineNodes(main.state.doc); + const commentsTracksFormat = []; + const insertionsDeletions = []; + marks.map(node => { + if (node.node.marks.length > 0) { + node.node.marks.filter(mark => { + if ( + mark.type.name === 'comment' || + mark.type.name === 'format_change' + ) { + commentsTracksFormat.push(mark); + } else if ( + mark.type.name === 'insertion' || + mark.type.name === 'deletion' + ) { + insertionsDeletions.push(mark); + } + }); + } + }); + const unique = [...new Set(commentsTracksFormat.map(item => item.attrs.id))]; + const total = unique.length + insertionsDeletions.length; + return total; +}; + +const getTrackBlockNodesCount = main => { + const allBlockNodes = findBlockNodes(main.state.doc); + const trackBlockNodes = []; + allBlockNodes.map(node => { + if (node.node.attrs.track && node.node.attrs.track.length > 0) { + trackBlockNodes.push(node); + } + }); + return trackBlockNodes.length; +}; + /* TODO */ /* this is a hacky workaround for now to find marks that are pm will break them. Correct way is to be done @@ -172,4 +207,6 @@ export default { findFragmentedMark, findAllMarksWithSameId, findMarkPosition, + getCommentsTracksCount, + getTrackBlockNodesCount, }; -- GitLab