From ce2fbcd8fc77f4eb242dd7353b765f57cfad67ce Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Tue, 27 Jun 2023 16:40:54 +0300 Subject: [PATCH] fix deletions --- .../FillTheGapContainerComponent.js | 44 +++++++++++-------- .../components/MatchingContainerComponent.js | 15 ++++++- .../MultipleDropDownContainerComponent.js | 33 +++++++++++++- 3 files changed, 70 insertions(+), 22 deletions(-) diff --git a/wax-prosemirror-services/src/FillTheGapQuestionService/components/FillTheGapContainerComponent.js b/wax-prosemirror-services/src/FillTheGapQuestionService/components/FillTheGapContainerComponent.js index 7c9dd0489..0320b05d6 100644 --- a/wax-prosemirror-services/src/FillTheGapQuestionService/components/FillTheGapContainerComponent.js +++ b/wax-prosemirror-services/src/FillTheGapQuestionService/components/FillTheGapContainerComponent.js @@ -1,5 +1,10 @@ import React, { useContext, useRef, useState } from 'react'; -import { WaxContext, ComponentPlugin, Icon } from 'wax-prosemirror-core'; +import { + WaxContext, + ComponentPlugin, + DocumentHelpers, + Icon, +} from 'wax-prosemirror-core'; import { th } from '@pubsweet/ui-toolkit'; import styled from 'styled-components'; @@ -97,15 +102,18 @@ export default ({ node, view, getPos }) => { }; const removeQuestion = () => { - const nodeFound = findNodes(context.pmViews.main.state, getPos(), node); - if (nodeFound) { - context.pmViews.main.dispatch( - context.pmViews.main.state.tr.delete( - getPos(), - getPos() + nodeFound.nodeSize, - ), - ); - } + const allNodes = getNodes(context.pmViews.main); + + allNodes.forEach(singleNode => { + if (singleNode.node.attrs.id === node.attrs.id) { + context.pmViews.main.dispatch( + context.pmViews.main.state.tr.delete( + singleNode.pos, + singleNode.pos + singleNode.node.nodeSize, + ), + ); + } + }); }; return ( @@ -152,15 +160,13 @@ export default ({ node, view, getPos }) => { ); }; -const findNodes = (state, pos, fillTheGapNode) => { - let nodeFound = ''; - state.doc.nodesBetween(pos, pos + 2, (node, from) => { - if ( - node.type.name === 'fill_the_gap_container' && - node.attrs.id === fillTheGapNode.attrs.id - ) { - nodeFound = node; +const getNodes = view => { + const allNodes = DocumentHelpers.findBlockNodes(view.state.doc); + const fillTheGapContainerNodes = []; + allNodes.forEach(node => { + if (node.node.type.name === 'fill_the_gap_container') { + fillTheGapContainerNodes.push(node); } }); - return nodeFound; + return fillTheGapContainerNodes; }; diff --git a/wax-prosemirror-services/src/MatchingService/components/MatchingContainerComponent.js b/wax-prosemirror-services/src/MatchingService/components/MatchingContainerComponent.js index c1ea11dc9..9eb97d8a9 100644 --- a/wax-prosemirror-services/src/MatchingService/components/MatchingContainerComponent.js +++ b/wax-prosemirror-services/src/MatchingService/components/MatchingContainerComponent.js @@ -264,7 +264,20 @@ export default ({ node, view, getPos }) => { const { testMode } = customProps; const { feedback } = node.attrs; - const removeQuestion = () => {}; + const removeQuestion = () => { + const allNodes = getNodes(context.pmViews.main); + + allNodes.forEach(singleNode => { + if (singleNode.node.attrs.id === node.attrs.id) { + context.pmViews.main.dispatch( + context.pmViews.main.state.tr.delete( + singleNode.pos, + singleNode.pos + singleNode.node.nodeSize, + ), + ); + } + }); + }; return ( <MatchingWrapper> diff --git a/wax-prosemirror-services/src/MultipleDropDownService/components/MultipleDropDownContainerComponent.js b/wax-prosemirror-services/src/MultipleDropDownService/components/MultipleDropDownContainerComponent.js index a2e6efe91..8959bb0a1 100644 --- a/wax-prosemirror-services/src/MultipleDropDownService/components/MultipleDropDownContainerComponent.js +++ b/wax-prosemirror-services/src/MultipleDropDownService/components/MultipleDropDownContainerComponent.js @@ -1,5 +1,10 @@ import React, { useContext } from 'react'; -import { WaxContext, ComponentPlugin, Icon } from 'wax-prosemirror-core'; +import { + WaxContext, + ComponentPlugin, + DocumentHelpers, + Icon, +} from 'wax-prosemirror-core'; import styled from 'styled-components'; import ContainerEditor from './ContainerEditor'; import FeedbackComponent from '../../MultipleChoiceQuestionService/components/FeedbackComponent'; @@ -58,7 +63,20 @@ export default ({ node, view, getPos }) => { const { testMode } = customProps; const { feedback } = node.attrs; - const removeQuestion = () => {}; + const removeQuestion = () => { + const allNodes = getNodes(context.pmViews.main); + + allNodes.forEach(singleNode => { + if (singleNode.node.attrs.id === node.attrs.id) { + context.pmViews.main.dispatch( + context.pmViews.main.state.tr.delete( + singleNode.pos, + singleNode.pos + singleNode.node.nodeSize, + ), + ); + } + }); + }; return ( <MultipleDropDownpWrapper> @@ -91,3 +109,14 @@ export default ({ node, view, getPos }) => { </MultipleDropDownpWrapper> ); }; + +const getNodes = view => { + const allNodes = DocumentHelpers.findBlockNodes(view.state.doc); + const multipleDropContainerNodes = []; + allNodes.forEach(node => { + if (node.node.type.name === 'multiple_drop_down_container') { + multipleDropContainerNodes.push(node); + } + }); + return multipleDropContainerNodes; +}; -- GitLab