From d9de45d82f16a92845c6d331283c91a8ee654d1d Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Thu, 16 Dec 2021 12:47:36 +0200
Subject: [PATCH] add essay question node

---
 editors/demo/src/Editors.js                    |  2 +-
 .../src/EssayService/EssayQuestion.js          |  5 ++++-
 .../EssayService/components/EditorComponent.js | 18 ++++++------------
 .../EssayService/components/EssayComponent.js  |  4 +++-
 .../src/EssayService/schema/essayNode.js       |  2 +-
 5 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/editors/demo/src/Editors.js b/editors/demo/src/Editors.js
index abd0628fb..d19991a2e 100644
--- a/editors/demo/src/Editors.js
+++ b/editors/demo/src/Editors.js
@@ -70,7 +70,7 @@ const Editors = () => {
       case 'ncbi':
         return <NCBI />;
       default:
-        return <Editoria />;
+        return <HHMI />;
     }
   };
 
diff --git a/wax-prosemirror-services/src/EssayService/EssayQuestion.js b/wax-prosemirror-services/src/EssayService/EssayQuestion.js
index a02f7931a..aca581aab 100644
--- a/wax-prosemirror-services/src/EssayService/EssayQuestion.js
+++ b/wax-prosemirror-services/src/EssayService/EssayQuestion.js
@@ -1,5 +1,6 @@
 import { injectable } from 'inversify';
 import { wrapIn } from 'prosemirror-commands';
+import { v4 as uuidv4 } from 'uuid';
 import Tools from '../lib/Tools';
 
 @injectable()
@@ -11,7 +12,9 @@ class EssayQuestion extends Tools {
 
   get run() {
     return (state, dispatch) => {
-      wrapIn(state.config.schema.nodes.essay)(state, dispatch);
+      wrapIn(state.config.schema.nodes.essay, {
+        id: uuidv4(),
+      })(state, dispatch);
     };
   }
 
diff --git a/wax-prosemirror-services/src/EssayService/components/EditorComponent.js b/wax-prosemirror-services/src/EssayService/components/EditorComponent.js
index 6a3fbc010..90f48a3c2 100644
--- a/wax-prosemirror-services/src/EssayService/components/EditorComponent.js
+++ b/wax-prosemirror-services/src/EssayService/components/EditorComponent.js
@@ -45,6 +45,7 @@ const EditorComponent = ({ node, view, getPos }) => {
   const editorRef = useRef();
 
   const context = useContext(WaxContext);
+  const { activeViewId } = context;
   let questionView;
   const questionId = node.attrs.id;
   const isEditable = context.view.main.props.editable(editable => {
@@ -98,21 +99,14 @@ const EditorComponent = ({ node, view, getPos }) => {
         disallowedTools: ['Images', 'Lists', 'lift', 'MultipleChoice'],
         handleDOMEvents: {
           mousedown: () => {
-            context.view.main.dispatch(
-              context.view.main.state.tr.setSelection(
-                new TextSelection(
-                  context.view.main.state.tr.doc.resolve(getPos() + 2),
+            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.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/EssayService/components/EssayComponent.js b/wax-prosemirror-services/src/EssayService/components/EssayComponent.js
index ace6f2e91..efc17d00e 100644
--- a/wax-prosemirror-services/src/EssayService/components/EssayComponent.js
+++ b/wax-prosemirror-services/src/EssayService/components/EssayComponent.js
@@ -1,5 +1,7 @@
+/* eslint-disable react/prop-types */
 import React from 'react';
+import EditorComponent from './EditorComponent';
 
 export default ({ node, view, getPos }) => {
-  return <span>Essay</span>;
+  return <EditorComponent getPos={getPos} node={node} view={view} />;
 };
diff --git a/wax-prosemirror-services/src/EssayService/schema/essayNode.js b/wax-prosemirror-services/src/EssayService/schema/essayNode.js
index e87a69822..257009cb8 100644
--- a/wax-prosemirror-services/src/EssayService/schema/essayNode.js
+++ b/wax-prosemirror-services/src/EssayService/schema/essayNode.js
@@ -1,9 +1,9 @@
 const essayNode = {
   attrs: {
     class: { default: 'essay' },
+    id: { default: '' },
   },
   group: 'block questions',
-  atom: true,
   selectable: true,
   draggable: true,
   content: 'block+',
-- 
GitLab