UNPKG

piral-core

Version:

The core library for creating a Piral instance.

39 lines 1.58 kB
import { createElement } from 'react'; import { createPortal } from 'react-dom'; export const extensionName = 'piral-extension'; export const componentName = 'piral-component'; export const contentName = 'piral-content'; export const portalName = 'piral-portal'; export const slotName = 'piral-slot'; export function attachDomPortal(id, context, element, component, props) { const portal = createPortal(createElement(component, props), element); context.showPortal(id, portal); return [id, portal]; } export function changeDomPortal(id, current, context, element, component, props) { const next = createPortal(createElement(component, props), element); context.updatePortal(id, current, next); return [id, next]; } export function convertComponent(converter, component) { if (typeof converter !== 'function') { throw new Error(`No converter for component of type "${component.type}" registered.`); } return converter(component); } export function renderInDom(context, element, component, props) { const portalId = 'pid'; let parent = element; while (parent) { if (parent instanceof Element && parent.localName === portalName && parent.hasAttribute(portalId)) { const id = parent.getAttribute(portalId); return attachDomPortal(id, context, element, component, props); } parent = parent.parentNode || parent.host; } return attachDomPortal('root', context, element, component, props); } export function defer(cb) { setTimeout(cb, 0); } //# sourceMappingURL=foreign.js.map