@ozen-ui/kit
Version:
React component library
52 lines (51 loc) • 1.93 kB
JavaScript
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 };
}
;