diff --git a/wax-prosemirror-services/src/EssayService/EssayAnswerNodeView.js b/wax-prosemirror-services/src/EssayService/EssayAnswerNodeView.js index 8d77d716b6b665f66ee75d409bbbce2799a663c8..01c9fd33d1809458220955496683748caf7b2b17 100644 --- a/wax-prosemirror-services/src/EssayService/EssayAnswerNodeView.js +++ b/wax-prosemirror-services/src/EssayService/EssayAnswerNodeView.js @@ -19,7 +19,7 @@ export default class EssayAnswerNodeView extends AbstractNodeView { } static name() { - return 'essay'; + return 'essay_answer'; } update(node) { diff --git a/wax-prosemirror-services/src/EssayService/EssayQuestion.js b/wax-prosemirror-services/src/EssayService/EssayQuestion.js index b918f825142d53fa72cbe7a2d79a775dad29fe69..dc85658ad28acaecf90abb4143019cf054e3d667 100644 --- a/wax-prosemirror-services/src/EssayService/EssayQuestion.js +++ b/wax-prosemirror-services/src/EssayService/EssayQuestion.js @@ -3,6 +3,9 @@ import { isEmpty } from 'lodash'; import { injectable } from 'inversify'; import { v4 as uuidv4 } from 'uuid'; import { Commands } from 'wax-prosemirror-utilities'; +import { Fragment } from 'prosemirror-model'; +import { TextSelection } from 'prosemirror-state'; +import { findWrapping } from 'prosemirror-transform'; import ToolBarBtn from './components/ToolBarBtn'; import Tools from '../lib/Tools'; @@ -20,6 +23,34 @@ const checkifEmpty = view => { } }; +const createEmptyParagraph = (context, newAnswerId) => { + if (context.view[newAnswerId]) { + context.view[newAnswerId].dispatch( + context.view[newAnswerId].state.tr.setSelection( + TextSelection.between( + context.view[newAnswerId].state.selection.$anchor, + context.view[newAnswerId].state.selection.$head, + ), + ), + ); + if (context.view[newAnswerId].dispatch) { + const type = context.view.main.state.schema.nodes.paragraph; + context.view[newAnswerId].dispatch( + context.view[newAnswerId].state.tr.insert(0, type.create()), + ); + } + context.view[newAnswerId].dispatch( + context.view[newAnswerId].state.tr.setSelection( + TextSelection.between( + context.view[newAnswerId].state.selection.$anchor, + context.view[newAnswerId].state.selection.$head, + ), + ), + ); + context.view[newAnswerId].focus(); + } +}; + @injectable() class EssayQuestion extends Tools { title = 'Add Essay Question'; @@ -28,9 +59,47 @@ class EssayQuestion extends Tools { label = 'Essay'; get run() { - return (main, dispatch) => { + return (main, context) => { checkifEmpty(main); - //const { state, dispatch } = main; + const { state, dispatch } = main; + /* Create Wrapping */ + const { $from, $to } = state.selection; + const range = $from.blockRange($to); + const { tr } = main.state; + + const wrapping = + range && + findWrapping(range, main.state.config.schema.nodes.essay_container, { + id: uuidv4(), + }); + if (!wrapping) return false; + tr.wrap(range, wrapping); + + // const map = tr.mapping.maps[0]; + // let newPos = 0; + // map.forEach((_from, _to, _newFrom, newTo) => { + // newPos = newTo; + // }); + + tr.setSelection(TextSelection.create(tr.doc, range.$to.pos)); + + const essayQuestion = main.state.config.schema.nodes.essay_question.create( + { id: uuidv4() }, + Fragment.empty, + ); + const essayAnswer = main.state.config.schema.nodes.essay_answer.create( + { id: uuidv4() }, + Fragment.empty, + ); + + tr.replaceSelectionWith(essayQuestion); + tr.replaceSelectionWith(essayAnswer); + dispatch(tr); + + // setTimeout(() => { + // createEmptyParagraph(context, essayQuestion.attrs.id); + // createEmptyParagraph(context, essayAnswer.attrs.id); + // }, 50); }; } diff --git a/wax-prosemirror-services/src/EssayService/EssayQuestionNodeView.js b/wax-prosemirror-services/src/EssayService/EssayQuestionNodeView.js index b10ec56559f28a2ad75a482211859554f1626cfc..867d0dcd1ac7ec6ca32c45918da9e9fcee10440e 100644 --- a/wax-prosemirror-services/src/EssayService/EssayQuestionNodeView.js +++ b/wax-prosemirror-services/src/EssayService/EssayQuestionNodeView.js @@ -19,7 +19,7 @@ export default class EssayQuestionNodeView extends AbstractNodeView { } static name() { - return 'essay'; + return 'essay_question'; } update(node) {