diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceNodeView.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceNodeView.js index 02ce8fd7e7b8e687d1aaaf8b430bae35696fab21..5df7616c08e064996aceb89271a2b533ecfce75f 100644 --- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceNodeView.js +++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceNodeView.js @@ -3,13 +3,22 @@ import { EditorView } from 'prosemirror-view'; import { AbstractNodeView } from 'wax-prosemirror-services'; import { StepMap } from 'prosemirror-transform'; -let questionView; export default class MultipleChoiceNodeView extends AbstractNodeView { - constructor(node, view, getPos, decorations, createPortal, Component) { - super(node, view, getPos, decorations, createPortal, Component); + constructor( + node, + view, + getPos, + decorations, + createPortal, + Component, + context, + ) { + super(node, view, getPos, decorations, createPortal, Component, context); + console.log('ccc', context); this.node = node; this.outerView = view; this.getPos = getPos; + this.context = context; this.innerView = new EditorView( { @@ -41,6 +50,12 @@ export default class MultipleChoiceNodeView extends AbstractNodeView { } dispatchInner(tr) { + this.context.updateView( + { + ['mytest']: this.innerView, + }, + 'mytest', + ); let { state, transactions } = this.innerView.state.applyTransaction(tr); this.innerView.updateState(state); diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js index 47a34c158639d79283534a7a5f12aee92159593d..5324dd73f3985b9eeabdb8207f9d2453ed60a44a 100644 --- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js +++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js @@ -16,8 +16,7 @@ class MultipleChoiceQuestionService extends Service { }); const addPortal = this.container.get('AddPortal'); - - addPortal({ nodeView, component: TestComponent }); + addPortal({ nodeView, component: TestComponent, context: this.app }); } } diff --git a/wax-prosemirror-core/src/PortalContext.js b/wax-prosemirror-core/src/PortalContext.js index 8e5b7d9a68d816c3e7f33a7e728696977f3ffcb7..193cc1d36f4e603db1d233bc8d162664e2afdf83 100644 --- a/wax-prosemirror-core/src/PortalContext.js +++ b/wax-prosemirror-core/src/PortalContext.js @@ -17,7 +17,16 @@ export default props => { id: null, getPos: () => {}, decorations: [], - createPortal: (element, component, node, view, getPos, decorations) => { + context: {}, + createPortal: ( + element, + component, + node, + view, + getPos, + decorations, + context, + ) => { setPortal({ ...portal, id: uuidv4(), @@ -27,6 +36,7 @@ export default props => { view, getPos, decorations, + context, }); }, }); diff --git a/wax-prosemirror-services/src/PortalService/AbstractNodeView.js b/wax-prosemirror-services/src/PortalService/AbstractNodeView.js index 19df6c1181a324b4e3cda3c1c2273982668425c7..14d529f163f689269e530f7d1fc76b02feefc5e6 100644 --- a/wax-prosemirror-services/src/PortalService/AbstractNodeView.js +++ b/wax-prosemirror-services/src/PortalService/AbstractNodeView.js @@ -1,13 +1,21 @@ import { v4 as uuidv4 } from 'uuid'; export default class AbstractNodeView { - constructor(node, view, getPos, decorations, createPortal, Component) { + constructor( + node, + view, + getPos, + decorations, + createPortal, + Component, + context, + ) { this.dom = document.createElement('div'); this.dom.id = uuidv4(); this.dom.classList.add('portal'); - createPortal(this.dom, Component, node, view, getPos, decorations); + createPortal(this.dom, Component, node, view, getPos, decorations, context); } update(node) { diff --git a/wax-prosemirror-services/src/PortalService/portalPlugin.js b/wax-prosemirror-services/src/PortalService/portalPlugin.js index 3c0b49d82cdcc51225dc287cb457a31079459aae..ae23ce938a3cd8f1d8b46cbb4b9c4f7d9311a031 100644 --- a/wax-prosemirror-services/src/PortalService/portalPlugin.js +++ b/wax-prosemirror-services/src/PortalService/portalPlugin.js @@ -3,20 +3,29 @@ import AbstractNodeView from './AbstractNodeView'; const portalPlugin = new PluginKey('portalPlugin'); -const CreateNodeView = (createPortal, Component, NodeView) => { +const CreateNodeView = (createPortal, Component, NodeView, context) => { return (theNode, view, getPos, decorations) => - new NodeView(theNode, view, getPos, decorations, createPortal, Component); + new NodeView( + theNode, + view, + getPos, + decorations, + createPortal, + Component, + context, + ); }; export default props => { const nodeViews = {}; props.portals.forEach(p => { const name = p.nodeView ? p.nodeView.name() : p.name; - + console.log('ppp', p); nodeViews[name] = CreateNodeView( props.createPortal, p.component, p.nodeView || AbstractNodeView, + p.context.context, ); });