UNPKG

@ozen-ui/kit

Version:

React component library

52 lines (51 loc) 1.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.portalManager = exports.createPortalManager = void 0; exports.usePortalManager = usePortalManager; var tslib_1 = require("tslib"); var react_1 = require("react"); var createPortalManager = function () { var portalItems = []; var events = []; var update = function () { events.forEach(function (event) { return event(portalItems); }); }; return { get: function () { return portalItems; }, add: function (portalItem) { portalItems = tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(portalItems), false), [portalItem], false).sort(function (a, b) { return a.key - b.key; }); update(); }, remove: function (ref) { portalItems = portalItems.filter(function (portalItem) { return portalItem.ref !== ref; }); update(); }, subscribe: function (event) { events.push(event); }, unsubscribe: function (event) { events = events.filter(function (e) { return e !== event; }); }, }; }; exports.createPortalManager = createPortalManager; exports.portalManager = (0, exports.createPortalManager)(); function usePortalManager() { var _a = tslib_1.__read((0, react_1.useState)([]), 2), portals = _a[0], setPortals = _a[1]; (0, react_1.useEffect)(function () { var updateCb = function (portals) { setPortals(function () { return portals; }); }; exports.portalManager.subscribe(updateCb); return function () { exports.portalManager.unsubscribe(updateCb); }; }, []); var add = function (portalItem) { exports.portalManager.add(portalItem); }; var remove = function (ref) { exports.portalManager.remove(ref); }; return { portals: portals, add: add, remove: remove }; }