UNPKG

@wordpress/components

Version:
88 lines (84 loc) 2.21 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = SlotFillProvider; var _element = require("@wordpress/element"); var _isShallowEqual = _interopRequireDefault(require("@wordpress/is-shallow-equal")); var _compose = require("@wordpress/compose"); var _slotFillContext = _interopRequireDefault(require("./slot-fill-context")); var _jsxRuntime = require("react/jsx-runtime"); /** * WordPress dependencies */ /** * Internal dependencies */ function createSlotRegistry() { const slots = (0, _compose.observableMap)(); const fills = (0, _compose.observableMap)(); const registerSlot = (name, ref, fillProps) => { slots.set(name, { ref, fillProps }); }; const unregisterSlot = (name, ref) => { const slot = slots.get(name); if (!slot) { return; } // Make sure we're not unregistering a slot registered by another element // See https://github.com/WordPress/gutenberg/pull/19242#issuecomment-590295412 if (slot.ref !== ref) { return; } slots.delete(name); }; const updateSlot = (name, ref, fillProps) => { const slot = slots.get(name); if (!slot) { return; } if (slot.ref !== ref) { return; } if ((0, _isShallowEqual.default)(slot.fillProps, fillProps)) { return; } slots.set(name, { ref, fillProps }); }; const registerFill = (name, ref) => { fills.set(name, [...(fills.get(name) || []), ref]); }; const unregisterFill = (name, ref) => { const fillsForName = fills.get(name); if (!fillsForName) { return; } fills.set(name, fillsForName.filter(fillRef => fillRef !== ref)); }; return { slots, fills, registerSlot, updateSlot, unregisterSlot, registerFill, unregisterFill }; } function SlotFillProvider({ children }) { const [registry] = (0, _element.useState)(createSlotRegistry); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_slotFillContext.default.Provider, { value: registry, children: children }); } //# sourceMappingURL=slot-fill-provider.js.map