piral-core
Version:
The core library for creating a Piral instance.
39 lines • 1.58 kB
JavaScript
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