UNPKG

dockview-solid

Version:

Zero dependency layout manager supporting tabs, grids and splitviews

39 lines (38 loc) 1.27 kB
import { render } from 'solid-js/web'; import { createStore } from 'solid-js/store'; import { createComponent } from 'solid-js'; /** * SolidJS replacement for ReactPart: mounts a Solid component into a DOM node and allows imperative prop updates. */ export class SolidPart { constructor(parent, component, parameters) { this.parent = parent; this.component = component; this.parameters = parameters; this.disposed = false; this.createPortal(); } createPortal() { const initialProps = Object.assign({}, this.parameters); let setStateLocal; // Mount Solid component into parent element this.disposeRoot = render(() => { const [state, setState] = createStore(initialProps); setStateLocal = setState; return createComponent(this.component, state); }, this.parent); this.setState = (props) => { setStateLocal((prev) => Object.assign({}, prev, props)); }; } update(props) { if (this.disposed) { throw new Error('invalid operation: resource is already disposed'); } this.setState(props); } dispose() { this.disposeRoot(); this.disposed = true; } }