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