From f527304ffbe4c8cf6656405479c1e2d01785ee09 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Tue, 4 Jan 2022 13:04:23 +0200
Subject: [PATCH] add list support

---
 .../components/QuestionEditorComponent.js     | 29 ++++++++++++-------
 .../plugins/placeholder.js                    |  6 +++-
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/QuestionEditorComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/QuestionEditorComponent.js
index d19ad04d1..2d5a16dab 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/QuestionEditorComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/QuestionEditorComponent.js
@@ -7,9 +7,14 @@ import { EditorView } from 'prosemirror-view';
 import { EditorState, TextSelection } from 'prosemirror-state';
 import { StepMap } from 'prosemirror-transform';
 import { keymap } from 'prosemirror-keymap';
-import { baseKeymap } from 'prosemirror-commands';
+import { baseKeymap, chainCommands } from 'prosemirror-commands';
 import { undo, redo } from 'prosemirror-history';
 import { WaxContext } from 'wax-prosemirror-core';
+import {
+  splitListItem,
+  liftListItem,
+  sinkListItem,
+} from 'prosemirror-schema-list';
 import Placeholder from '../plugins/placeholder';
 
 const EditorWrapper = styled.div`
@@ -40,7 +45,6 @@ const EditorWrapper = styled.div`
     }
   }
 `;
-
 const QuestionEditorComponent = ({ node, view, getPos }) => {
   const editorRef = useRef();
 
@@ -56,7 +60,11 @@ const QuestionEditorComponent = ({ node, view, getPos }) => {
   const createKeyBindings = () => {
     const keys = getKeys();
     Object.keys(baseKeymap).forEach(key => {
-      keys[key] = baseKeymap[key];
+      if (keys[key]) {
+        keys[key] = chainCommands(keys[key], baseKeymap[key]);
+      } else {
+        keys[key] = baseKeymap[key];
+      }
     });
     return keys;
   };
@@ -65,6 +73,13 @@ const QuestionEditorComponent = ({ node, view, getPos }) => {
     return {
       'Mod-z': () => undo(view.state, view.dispatch),
       'Mod-y': () => redo(view.state, view.dispatch),
+      'Mod-[': liftListItem(view.state.schema.nodes.list_item),
+      'Mod-]': sinkListItem(view.state.schema.nodes.list_item),
+      Enter: () =>
+        splitListItem(questionView.state.schema.nodes.list_item)(
+          questionView.state,
+          questionView.dispatch,
+        ),
     };
   };
 
@@ -105,14 +120,6 @@ const QuestionEditorComponent = ({ node, view, getPos }) => {
                 ),
               ),
             );
-            // context.view[activeViewId].dispatch(
-            //   context.view[activeViewId].state.tr.setSelection(
-            //     TextSelection.between(
-            //       context.view[activeViewId].state.selection.$anchor,
-            //       context.view[activeViewId].state.selection.$head,
-            //     ),
-            //   ),
-            // );
             context.updateView({}, questionId);
             // Kludge to prevent issues due to the fact that the whole
             // footnote is node-selected (and thus DOM-selected) when
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/plugins/placeholder.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/plugins/placeholder.js
index de3fd8058..76b602b84 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/plugins/placeholder.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/plugins/placeholder.js
@@ -9,11 +9,15 @@ export default props => {
     props: {
       decorations: state => {
         const decorations = [];
+        const isList =
+          state.doc.content.content[0].type.name !== 'orderedlist' ||
+          state.doc.content.content[0].type.name !== 'bulletlist';
         const decorate = (node, pos) => {
           if (
             node.type.isBlock &&
             node.childCount === 0 &&
-            state.doc.content.childCount === 1
+            state.doc.content.childCount === 1 &&
+            !isList
           ) {
             decorations.push(
               Decoration.node(pos, pos + node.nodeSize, {
-- 
GitLab