From 8926bf2736d9c080020f9691b7650bbc6c7fe100 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Mon, 25 Apr 2022 16:42:17 +0300
Subject: [PATCH] container tool

---
 .../MultipleDropDownQuestion.js               | 38 ++++++++++++++++++-
 1 file changed, 36 insertions(+), 2 deletions(-)

diff --git a/wax-prosemirror-services/src/MultipleDropDownService/MultipleDropDownQuestion.js b/wax-prosemirror-services/src/MultipleDropDownService/MultipleDropDownQuestion.js
index 1f791e6b4..b462f9b35 100644
--- a/wax-prosemirror-services/src/MultipleDropDownService/MultipleDropDownQuestion.js
+++ b/wax-prosemirror-services/src/MultipleDropDownService/MultipleDropDownQuestion.js
@@ -1,5 +1,8 @@
 import { injectable } from 'inversify';
+import { findWrapping } from 'prosemirror-transform';
+import { v4 as uuidv4 } from 'uuid';
 import Tools from '../lib/Tools';
+import helpers from '../MultipleChoiceQuestionService/helpers/helpers';
 
 @injectable()
 class FillTheGapQuestion extends Tools {
@@ -8,14 +11,45 @@ class FillTheGapQuestion extends Tools {
   name = 'Multiple Drop Down';
 
   get run() {
-    return (state, dispatch, view) => {};
+    return (state, dispatch, view) => {
+      helpers.checkifEmpty(view);
+      const { $from, $to } = view.state.selection;
+      const range = $from.blockRange($to);
+      const { tr } = view.state;
+
+      const wrapping =
+        range &&
+        findWrapping(
+          range,
+          state.config.schema.nodes.multiple_drop_down_container,
+          {
+            id: uuidv4(),
+          },
+        );
+      if (!wrapping) return false;
+      tr.wrap(range, wrapping);
+      dispatch(tr);
+    };
   }
 
   get active() {
     return state => {};
   }
 
-  select = (state, activeViewId, activeView) => {};
+  select = (state, activeViewId, activeView) => {
+    const { disallowedTools } = activeView.props;
+    let status = true;
+    const { from, to } = state.selection;
+    if (from === null || disallowedTools.includes('MultipleDropDown'))
+      return false;
+
+    state.doc.nodesBetween(from, to, (node, pos) => {
+      if (node.type.groups.includes('questions')) {
+        status = false;
+      }
+    });
+    return status;
+  };
 
   get enable() {
     return state => {};
-- 
GitLab