From 091758ba2e264103c33f2a3e51f1b46b6cdcfe58 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Wed, 24 Nov 2021 11:27:37 +0200
Subject: [PATCH] move to commands and start from service

---
 editors/demo/src/HHMI/config/config.js        |  2 --
 .../MultipleChoiceQuestion.js                 | 14 +++-------
 .../MultipleChoiceQuestionService.js          |  3 +++
 .../MultipleChoiceSingleCorrectQuestion.js    | 14 +++-------
 .../MultipleDropDown.js                       | 26 ++++++++-----------
 wax-prosemirror-utilities/package.json        |  1 +
 .../src/commands/Commands.js                  | 15 ++++++++++-
 7 files changed, 37 insertions(+), 38 deletions(-)

diff --git a/editors/demo/src/HHMI/config/config.js b/editors/demo/src/HHMI/config/config.js
index 5e2ace8e2..13c015786 100644
--- a/editors/demo/src/HHMI/config/config.js
+++ b/editors/demo/src/HHMI/config/config.js
@@ -21,7 +21,6 @@ import {
   EditorInfoToolGroupServices,
   BottomInfoService,
   MultipleChoiceQuestionService,
-  MultipleChoiceSingleCorrectQuestionService,
   MultipleChoiceToolGroupService,
   FillTheGapQuestionService,
   FillTheGapToolGroupService,
@@ -69,7 +68,6 @@ export default {
   ],
 
   services: [
-    new MultipleChoiceSingleCorrectQuestionService(),
     new FillTheGapQuestionService(),
     new FillTheGapToolGroupService(),
     new MultipleChoiceQuestionService(),
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestion.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestion.js
index 754bc979a..df0d5eaaf 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestion.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestion.js
@@ -63,16 +63,10 @@ class MultipleChoiceQuestion extends Tools {
 
   get active() {
     return state => {
-      let type = '';
-      const predicate = node =>
-        node.type === state.config.schema.nodes.multiple_choice;
-      for (let i = state.selection.$from.depth; i > 0; i--) {
-        const node = state.selection.$from.node(i);
-        if (predicate(node)) {
-          type = 'multiple';
-        }
-      }
-      return type;
+      return Commands.isParentOfType(
+        state,
+        state.config.schema.nodes.multiple_choice,
+      );
     };
   }
 
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js
index 4df5be64a..9053ec2e2 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js
@@ -4,6 +4,7 @@ import multipleChoiceNode from './schema/multipleChoiceNode';
 import multipleChoiceContainerNode from './schema/multipleChoiceContainerNode';
 import QuestionComponent from './components/QuestionComponent';
 import MultipleChoiceNodeView from './MultipleChoiceNodeView';
+import MultipleChoiceSingleCorrectQuestionService from '../MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestionService';
 
 class MultipleChoiceQuestionService extends Service {
   register() {
@@ -25,6 +26,8 @@ class MultipleChoiceQuestionService extends Service {
       context: this.app,
     });
   }
+
+  dependencies = [new MultipleChoiceSingleCorrectQuestionService()];
 }
 
 export default MultipleChoiceQuestionService;
diff --git a/wax-prosemirror-services/src/MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestion.js b/wax-prosemirror-services/src/MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestion.js
index 509034543..76c4d9eee 100644
--- a/wax-prosemirror-services/src/MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestion.js
+++ b/wax-prosemirror-services/src/MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestion.js
@@ -63,16 +63,10 @@ class MultipleChoiceSingleCorrectQuestion extends Tools {
 
   get active() {
     return state => {
-      let type = '';
-      const predicate = node =>
-        node.type === state.config.schema.nodes.multiple_choice_single_correct;
-      for (let i = state.selection.$from.depth; i > 0; i--) {
-        const node = state.selection.$from.node(i);
-        if (predicate(node)) {
-          type = 'multipleSingle';
-        }
-      }
-      return type;
+      return Commands.isParentOfType(
+        state,
+        state.config.schema.nodes.multiple_choice_single_correct,
+      );
     };
   }
 
diff --git a/wax-prosemirror-services/src/WaxToolGroups/MultipleDropDownToolGroupService/MultipleDropDown.js b/wax-prosemirror-services/src/WaxToolGroups/MultipleDropDownToolGroupService/MultipleDropDown.js
index 35ef85b2a..b3ced223a 100644
--- a/wax-prosemirror-services/src/WaxToolGroups/MultipleDropDownToolGroupService/MultipleDropDown.js
+++ b/wax-prosemirror-services/src/WaxToolGroups/MultipleDropDownToolGroupService/MultipleDropDown.js
@@ -68,32 +68,28 @@ class MultipleDropDown extends ToolGroup {
         label: 'Multiple Choice',
         value: '0',
         item: this._tools[0],
-        type: 'multiple',
       },
       {
         label: 'Multiple Choice (single correct)',
         value: '1',
         item: this._tools[1],
-        type: 'multipleSingle',
-      },
-      {
-        label: 'True/False',
-        value: '2',
-        item: this._tools[0],
-        type: 'trueFalse',
-      },
-      {
-        label: 'True/False (single correct)',
-        value: '3',
-        item: this._tools[0],
-        type: 'trueFalseSingle',
       },
+      // {
+      //   label: 'True/False',
+      //   value: '2',
+      //   item: this._tools[0],
+      // },
+      // {
+      //   label: 'True/False (single correct)',
+      //   value: '3',
+      //   item: this._tools[0],
+      // },
     ];
 
     const isDisabled = this._tools[0].select(state, activeView);
     let found = '';
     dropDownOptions.forEach((option, i) => {
-      if (option.item.active(main.state) === option.type) {
+      if (option.item.active(main.state)) {
         found = option.label;
       }
     });
diff --git a/wax-prosemirror-utilities/package.json b/wax-prosemirror-utilities/package.json
index d7a7daed6..6931c3ba3 100644
--- a/wax-prosemirror-utilities/package.json
+++ b/wax-prosemirror-utilities/package.json
@@ -14,6 +14,7 @@
   },
   "dependencies": {
     "prosemirror-commands": "1.1.10",
+    "prosemirror-transform": "1.2.6",
     "prosemirror-utils": "^0.9.6",
     "uuid": "^7.0.3"
   }
diff --git a/wax-prosemirror-utilities/src/commands/Commands.js b/wax-prosemirror-utilities/src/commands/Commands.js
index 479fc0cac..99c34a84e 100644
--- a/wax-prosemirror-utilities/src/commands/Commands.js
+++ b/wax-prosemirror-utilities/src/commands/Commands.js
@@ -240,7 +240,7 @@ const createCommentOnFootnote = (state, dispatch, group, viewid) => {
 
 const isInTable = state => {
   const { $head } = state.selection;
-  for (let d = $head.depth; d > 0; d--)
+  for (let d = $head.depth; d > 0; d -= 1)
     if ($head.node(d).type.spec.tableRole === 'row') return true;
   return false;
 };
@@ -253,6 +253,18 @@ const simulateKey = (view, keyCode, key) => {
   return view.someProp('handleKeyDown', f => f(view, event));
 };
 
+const isParentOfType = (state, nodeType) => {
+  let status = false;
+  const predicate = node => node.type === nodeType;
+  for (let i = state.selection.$from.depth; i > 0; i -= 1) {
+    const node = state.selection.$from.node(i);
+    if (predicate(node)) {
+      status = true;
+    }
+  }
+  return status;
+};
+
 export default {
   isInTable,
   setBlockType,
@@ -265,4 +277,5 @@ export default {
   markActive,
   isOnSameTextBlock,
   simulateKey,
+  isParentOfType,
 };
-- 
GitLab