@dark-engine/platform-server
Version:
Dark renderer for server
32 lines (31 loc) • 941 B
JavaScript
import { component, useMemo, useLayoutEffect, __useCursor as useCursor } from '@dark-engine/core';
import { illegal, removeContent } from '../utils';
const $$portal = Symbol('portal');
function createPortal(slot, container, key) {
if (process.env.NODE_ENV !== 'production') {
if (!(container instanceof Element)) {
illegal(`The createPortal only gets a valid element as container!`);
}
}
return Portal({ key, container, slot });
}
const Portal = component(
props => {
const cursor = useCursor();
const el = props.container;
const scope = useMemo(() => {
removeContent(el);
return { el };
}, []);
useLayoutEffect(() => {
return () => removeContent(scope.el);
}, []);
cursor.hook.setIsPortal(true);
cursor.el = el;
scope.el = el;
return props.slot;
},
{ token: $$portal, displayName: 'Portal' },
);
export { createPortal };
//# sourceMappingURL=portal.js.map