@wordpress/components
Version:
UI components for WordPress.
46 lines (40 loc) • 1.37 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useSlot;
var _element = require("@wordpress/element");
var _slotFillContext = _interopRequireDefault(require("./slot-fill-context"));
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
function useSlot(name) {
const registry = (0, _element.useContext)(_slotFillContext.default);
const slot = registry.slots[name] || {};
const slotFills = registry.fills[name];
const fills = (0, _element.useMemo)(() => slotFills || [], [slotFills]);
const updateSlot = (0, _element.useCallback)(fillProps => {
registry.updateSlot(name, fillProps);
}, [name, registry.updateSlot]);
const unregisterSlot = (0, _element.useCallback)(slotRef => {
registry.unregisterSlot(name, slotRef);
}, [name, registry.unregisterSlot]);
const registerFill = (0, _element.useCallback)(fillRef => {
registry.registerFill(name, fillRef);
}, [name, registry.registerFill]);
const unregisterFill = (0, _element.useCallback)(fillRef => {
registry.unregisterFill(name, fillRef);
}, [name, registry.unregisterFill]);
return { ...slot,
updateSlot,
unregisterSlot,
fills,
registerFill,
unregisterFill
};
}
//# sourceMappingURL=use-slot.js.map