@gechiui/components
Version:
UI components for GeChiUI.
92 lines (73 loc) • 2.04 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _element = require("@gechiui/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _lodash = require("lodash");
var _context = _interopRequireDefault(require("./context"));
var _useSlot = _interopRequireDefault(require("./use-slot"));
// @ts-nocheck
/**
* External dependencies
*/
/**
* GeChiUI dependencies
*/
/**
* Internal dependencies
*/
function FillComponent(_ref) {
let {
name,
children,
registerFill,
unregisterFill
} = _ref;
const slot = (0, _useSlot.default)(name);
const ref = (0, _element.useRef)({
name,
children
});
(0, _element.useLayoutEffect)(() => {
registerFill(name, ref.current);
return () => unregisterFill(name, ref.current);
}, []);
(0, _element.useLayoutEffect)(() => {
ref.current.children = children;
if (slot) {
slot.forceUpdate();
}
}, [children]);
(0, _element.useLayoutEffect)(() => {
if (name === ref.current.name) {
// ignore initial effect
return;
}
unregisterFill(ref.current.name, ref.current);
ref.current.name = name;
registerFill(name, ref.current);
}, [name]);
if (!slot || !slot.node) {
return null;
} // If a function is passed as a child, provide it with the fillProps.
if ((0, _lodash.isFunction)(children)) {
children = children(slot.props.fillProps);
}
return (0, _element.createPortal)(children, slot.node);
}
const Fill = props => (0, _element.createElement)(_context.default.Consumer, null, _ref2 => {
let {
registerFill,
unregisterFill
} = _ref2;
return (0, _element.createElement)(FillComponent, (0, _extends2.default)({}, props, {
registerFill: registerFill,
unregisterFill: unregisterFill
}));
});
var _default = Fill;
exports.default = _default;
//# sourceMappingURL=fill.js.map