/** * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal * @author Alexander Rose */ import * as React from 'react'; import * as ReactDOM from 'react-dom'; import { Plugin } from './plugin'; import { PluginUIContext } from './context'; import { DefaultPluginUISpec, PluginUISpec } from './spec'; export async function createPluginUI(target: HTMLElement, spec?: PluginUISpec, options?: { onBeforeUIRender?: (ctx: PluginUIContext) => (Promise | void) }) { const ctx = new PluginUIContext(spec || DefaultPluginUISpec()); await ctx.init(); if (options?.onBeforeUIRender) { await options.onBeforeUIRender(ctx); } ReactDOM.render(React.createElement(Plugin, { plugin: ctx }), target); try { await ctx.canvas3dInitialized; } catch { // Error reported in UI/console elsewhere. } return ctx; }