diff --git a/wax-prosemirror-core/src/WaxContext.js b/wax-prosemirror-core/src/WaxContext.js new file mode 100644 index 0000000000000000000000000000000000000000..a4e012e9d88c02573dd02e6b644744a867b4dafc --- /dev/null +++ b/wax-prosemirror-core/src/WaxContext.js @@ -0,0 +1,51 @@ +import React, { useContext, useState } from "react"; + +export const WaxContext = React.createContext({ + view: {}, + activeView: {}, + activeViewId: null, + app: null, + updateView: null, + updateActiveView: null +}); + +export default props => { + const [context, setContext] = useState({ + app: props.app, + view: props.view || {}, + activeView: props.activeView || {}, + activeViewId: props.activeViewId || {}, + updateView: (newView, activeViewId) => { + const view = Object.assign(context.view, newView); + const activeView = view[activeViewId || context.activeViewId]; + setContext({ + ...context, + view, + activeView: activeView, + activeViewId: activeViewId || context.activeViewId + }); + } + }); + + return ( + <WaxContext.Provider + value={{ + ...context + }} + > + {props.children} + </WaxContext.Provider> + ); +}; + +export const useInjection = identifier => { + const { app: { container } } = useContext(WaxContext); + + if (!container) { + throw new Error(); + } + + return container.isBound(identifier) + ? { instance: container.get(identifier) } + : null; +};