From 13db5407a823534f25d5ab64cd350a240dc8501d Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Mon, 5 Apr 2021 11:45:13 +0300
Subject: [PATCH] pass component in progress

---
 editors/demo/src/Editors.js                   |  2 +-
 editors/demo/src/HHMI/HHMI.js                 |  2 +
 .../MultipleChoiceQuestion.js                 |  5 ++-
 .../MultipleChoiceQuestionService.js          |  6 ++-
 .../components/TestComponent.js               |  0
 .../schema/multipleChoiceNode.js              | 24 ++++++++++++
 editors/demo/src/HHMI/config/config.js        | 22 ++++-------
 wax-prosemirror-core/src/Wax.js               |  2 +
 wax-prosemirror-core/src/WaxView.js           | 37 +++++++++++--------
 9 files changed, 68 insertions(+), 32 deletions(-)
 rename wax-prosemirror-core/src/BlockQuote.js => editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js (100%)
 create mode 100644 editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js

diff --git a/editors/demo/src/Editors.js b/editors/demo/src/Editors.js
index dac341434..774b1d788 100644
--- a/editors/demo/src/Editors.js
+++ b/editors/demo/src/Editors.js
@@ -48,7 +48,7 @@ const Editors = () => {
       case 'ncbi':
         break;
       default:
-        return <Editoria />;
+        return <HHMI />;
     }
   };
 
diff --git a/editors/demo/src/HHMI/HHMI.js b/editors/demo/src/HHMI/HHMI.js
index 956b2d8a9..f9e2283ca 100644
--- a/editors/demo/src/HHMI/HHMI.js
+++ b/editors/demo/src/HHMI/HHMI.js
@@ -4,6 +4,7 @@ import { Wax } from 'wax-prosemirror-core';
 
 import { HhmiLayout } from './layout';
 import { config } from './config';
+import TestComponent from './MultipleChoiceQuestionService/components/TestComponent';
 
 const renderImage = file => {
   const reader = new FileReader();
@@ -24,6 +25,7 @@ const Hhmi = () => {
         fileUpload={file => renderImage(file)}
         value=""
         targetFormat="JSON"
+        nodeViews={[{ multiple_choice: { component: TestComponent } }]}
         // readonly
         layout={HhmiLayout}
         // onChange={source => console.log(source)}
diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js
index 7f7cbdec7..e921c333d 100644
--- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js
+++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js
@@ -1,5 +1,6 @@
 import { injectable } from 'inversify';
 import { Tools } from 'wax-prosemirror-services';
+import { wrapIn } from 'prosemirror-commands';
 
 @injectable()
 class MultipleChoiceQuestion extends Tools {
@@ -8,7 +9,9 @@ class MultipleChoiceQuestion extends Tools {
   name = 'Multiple Choice';
 
   get run() {
-    return (state, dispatch) => {};
+    return (state, dispatch) => {
+      wrapIn(state.config.schema.nodes.multiple_choice)(state, dispatch);
+    };
   }
 
   get active() {
diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js
index c128ee420..7d926286d 100644
--- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js
+++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js
@@ -1,5 +1,6 @@
 import { Service } from 'wax-prosemirror-services';
 import MultipleChoiceQuestion from './MultipleChoiceQuestion';
+import multipleChoiceNode from './schema/multipleChoiceNode';
 
 class MultipleChoiceQuestionService extends Service {
   boot() {}
@@ -7,7 +8,10 @@ class MultipleChoiceQuestionService extends Service {
   register() {
     this.container.bind('MultipleChoiceQuestion').to(MultipleChoiceQuestion);
     const createNode = this.container.get('CreateNode');
-    console.log(createNode);
+    createNode({
+      multiple_choice: multipleChoiceNode,
+    });
+    console.log(this.schema);
   }
 }
 
diff --git a/wax-prosemirror-core/src/BlockQuote.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js
similarity index 100%
rename from wax-prosemirror-core/src/BlockQuote.js
rename to editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js
diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js
new file mode 100644
index 000000000..da9539965
--- /dev/null
+++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js
@@ -0,0 +1,24 @@
+// const multipleChoiceNode = {
+//   group: 'block multiple',
+//   content: 'text*',
+//   atom: true,
+//   code: true,
+//   toDOM: () => ['multiple-choice', { class: 'multiple-choice' }, 0],
+//   parseDOM: [
+//     {
+//       tag: 'multiple-choice',
+//     },
+//   ],
+// };
+
+const multipleChoiceNode = {
+  content: 'block+',
+  group: 'block',
+  defining: true,
+  parseDOM: [{ tag: 'multiple-choice' }],
+  toDOM() {
+    return ['multiple-choice', 0];
+  },
+};
+
+export default multipleChoiceNode;
diff --git a/editors/demo/src/HHMI/config/config.js b/editors/demo/src/HHMI/config/config.js
index e972699d6..d0e0640f5 100644
--- a/editors/demo/src/HHMI/config/config.js
+++ b/editors/demo/src/HHMI/config/config.js
@@ -17,17 +17,8 @@ import {
   DisplayToolGroupService,
   TextBlockLevelService,
   TextToolGroupService,
-  NoteService,
-  NoteToolGroupService,
-  TrackChangeService,
-  CommentsService,
-  CodeBlockService,
-  CodeBlockToolGroupService,
   DisplayTextToolGroupService,
   MathService,
-  FindAndReplaceService,
-  EditingSuggestingService,
-  TrackingAndEditingToolGroupService,
   FullScreenService,
   FullScreenToolGroupService,
   SpecialCharactersService,
@@ -38,13 +29,13 @@ import {
   BottomInfoService,
   TransformService,
   TransformToolGroupService,
-  TrackOptionsToolGroupService,
-  TrackCommentOptionsToolGroupService,
-  CustomTagInlineToolGroupService,
-  CustomTagBlockToolGroupService,
-  CustomTagService,
 } from 'wax-prosemirror-services';
 
+/* Questions Services */
+
+import MultipleChoiceQuestionService from '../MultipleChoiceQuestionService/MultipleChoiceQuestionService';
+import QuestionsToolGroupService from '../QuestionsToolGroupService/QuestionsToolGroupService';
+
 import { DefaultSchema } from 'wax-prosemirror-utilities';
 
 import { WaxSelectionPlugin } from 'wax-prosemirror-plugins';
@@ -77,6 +68,7 @@ export default {
         'Images',
         'SpecialCharacters',
         'Tables',
+        'Questions',
         'FullScreen',
       ],
     },
@@ -93,6 +85,8 @@ export default {
   ],
 
   services: [
+    new MultipleChoiceQuestionService(),
+    new QuestionsToolGroupService(),
     new DisplayBlockLevelService(),
     new DisplayToolGroupService(),
     new TextBlockLevelService(),
diff --git a/wax-prosemirror-core/src/Wax.js b/wax-prosemirror-core/src/Wax.js
index fc15ccd02..b344cce3c 100644
--- a/wax-prosemirror-core/src/Wax.js
+++ b/wax-prosemirror-core/src/Wax.js
@@ -66,6 +66,7 @@ const Wax = props => {
     user,
     onChange,
     targetFormat,
+    nodeViews,
   } = props;
 
   if (!application) return null;
@@ -144,6 +145,7 @@ const Wax = props => {
         targetFormat={targetFormat}
         TrackChange={TrackChange}
         user={user}
+        nodeViews={nodeViews}
       >
         {({ editor }) => <WaxRender className={className} editor={editor} />}
       </WaxView>
diff --git a/wax-prosemirror-core/src/WaxView.js b/wax-prosemirror-core/src/WaxView.js
index 41563bdb7..f12d4c69a 100644
--- a/wax-prosemirror-core/src/WaxView.js
+++ b/wax-prosemirror-core/src/WaxView.js
@@ -10,7 +10,6 @@ import { trackedTransaction } from 'wax-prosemirror-services';
 import { WaxContext, useReactNodeViewPortals } from './WaxContext';
 import transformPasted from './helpers/TransformPasted';
 import { createReactNodeView } from './ReactNodeView';
-import BlockQuote from './BlockQuote';
 
 let previousDoc;
 
@@ -23,13 +22,13 @@ export default props => {
     autoFocus,
     user,
     targetFormat,
+    nodeViews,
   } = props;
 
   const editorRef = useRef();
   let view;
   const context = useContext(WaxContext);
   const { createPortal } = useReactNodeViewPortals();
-
   const handleCreatePortal = useCallback(createPortal, []);
 
   const setEditorRef = useCallback(
@@ -49,19 +48,7 @@ export default props => {
             user,
             scrollMargin: 200,
             scrollThreshold: 200,
-            nodeViews: {
-              blockquote(node, view, getPos, decorations) {
-                console.log('rerenders for ever');
-                return createReactNodeView({
-                  node,
-                  view,
-                  getPos,
-                  decorations,
-                  component: BlockQuote,
-                  onCreatePortal: handleCreatePortal,
-                });
-              },
-            },
+            nodeViews: createNodeVies(),
             handleDOMEvents: {
               blur: onBlur
                 ? view => {
@@ -97,6 +84,26 @@ export default props => {
     [readonly],
   );
 
+  const createNodeVies = () => {
+    const test = nodeViews.map((nodeView, key) => {
+      return {
+        multiple_choice(node, view, getPos, decorations) {
+          console.log('rerenders for ever');
+          return createReactNodeView({
+            node,
+            view,
+            getPos,
+            decorations,
+            component: nodeView.multiple_choice.component,
+            onCreatePortal: handleCreatePortal,
+          });
+        },
+      };
+    });
+    console.log(test);
+    return test[0];
+  };
+
   const dispatchTransaction = transaction => {
     const { TrackChange } = props;
     const tr =
-- 
GitLab