From af70ca5504a58388bddf996bc7bc6e43231e493f Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Mon, 26 Apr 2021 11:18:10 +0300 Subject: [PATCH] provide wax context for tools --- .../MultipleChoiceNodeView.js | 21 ++++++++++++++++--- .../MultipleChoiceQuestionService.js | 3 +-- wax-prosemirror-core/src/PortalContext.js | 12 ++++++++++- .../src/PortalService/AbstractNodeView.js | 12 +++++++++-- .../src/PortalService/portalPlugin.js | 15 ++++++++++--- 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceNodeView.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceNodeView.js index 02ce8fd7e..5df7616c0 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 47a34c158..5324dd73f 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 8e5b7d9a6..193cc1d36 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 19df6c118..14d529f16 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 3c0b49d82..ae23ce938 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, ); }); -- GitLab