UNPKG

@ozen-ui/kit

Version:

React component library

47 lines (46 loc) 1.64 kB
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 }; }