@ozen-ui/kit
Version:
React component library
47 lines (46 loc) • 1.64 kB
JavaScript
import { __read, __spreadArray } from "tslib";
import { useEffect, useState } from 'react';
export 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 = __spreadArray(__spreadArray([], __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; });
},
};
};
export var portalManager = createPortalManager();
export function usePortalManager() {
var _a = __read(useState([]), 2), portals = _a[0], setPortals = _a[1];
useEffect(function () {
var updateCb = function (portals) {
setPortals(function () { return portals; });
};
portalManager.subscribe(updateCb);
return function () {
portalManager.unsubscribe(updateCb);
};
}, []);
var add = function (portalItem) {
portalManager.add(portalItem);
};
var remove = function (ref) {
portalManager.remove(ref);
};
return { portals: portals, add: add, remove: remove };
}