UNPKG

@wordpress/components

Version:
64 lines (54 loc) 1.45 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = Fill; var _element = require("@wordpress/element"); var _useSlot = _interopRequireDefault(require("./use-slot")); /** * WordPress dependencies */ /** * Internal dependencies */ function useForceUpdate() { const [, setState] = (0, _element.useState)({}); const mounted = (0, _element.useRef)(true); (0, _element.useEffect)(() => { return () => { mounted.current = false; }; }, []); return () => { if (mounted.current) { setState({}); } }; } function Fill({ name, children }) { const slot = (0, _useSlot.default)(name); const ref = (0, _element.useRef)({ rerender: useForceUpdate() }); (0, _element.useEffect)(() => { // We register fills so we can keep track of their existance. // Some Slot implementations need to know if there're already fills // registered so they can choose to render themselves or not. slot.registerFill(ref); return () => { slot.unregisterFill(ref); }; }, [slot.registerFill, slot.unregisterFill]); if (!slot.ref || !slot.ref.current) { return null; } if (typeof children === 'function') { children = children(slot.fillProps); } return (0, _element.createPortal)(children, slot.ref.current); } //# sourceMappingURL=fill.js.map