Skip to content
Snippets Groups Projects
Commit 0fa350aa authored by chris's avatar chris
Browse files

create question/answer component

parent 6d168500
No related branches found
No related tags found
1 merge request!359new node structure
......@@ -19,7 +19,7 @@ export default class EssayAnswerNodeView extends AbstractNodeView {
}
static name() {
return 'essay';
return 'essay_answer';
}
update(node) {
......
......@@ -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);
};
}
......
......@@ -19,7 +19,7 @@ export default class EssayQuestionNodeView extends AbstractNodeView {
}
static name() {
return 'essay';
return 'essay_question';
}
update(node) {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment