@wordpress/components
Version:
UI components for WordPress.
64 lines (54 loc) • 1.45 kB
JavaScript
;
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