UNPKG

react-popup-manager

Version:

Manage react popups, Modals, Lightboxes, Notifications, etc. easily

107 lines 4.39 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PopupManagerInternal = void 0; var generateGuid_1 = require("../utils/generateGuid"); var PopupItem_1 = require("./PopupItem"); var CLOSED_POPUPS_THRESHOLD = 10; var PopupManagerInternal = /** @class */ (function () { function PopupManagerInternal() { var _this = this; this.openPopups = []; this._closedPopups = []; this.onPopupsChangeEvents = []; this.open = function (componentClass, popupProps) { if (popupProps && popupProps.isOpen !== undefined) { throw new Error("it is not allowed to send 'isOpen' in popupProps to 'popupManager.open(component, popupProps)'"); } var guid = generateGuid_1.generateGuid(); var newPopupItem = new PopupItem_1.PopupItem(componentClass, popupProps, guid); _this.openPopups.push(newPopupItem); _this.callPopupsChangeEvents(); return { close: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return _this.close(guid, undefined, args); }, unmount: function () { return _this.unmount(guid); }, response: newPopupItem.response, }; }; this.closeAll = function () { _this.openPopups.forEach(function (popup) { popup.close(); _this.closedPopups.unshift(popup); }); _this.openPopups = []; _this.callPopupsChangeEvents(); }; } PopupManagerInternal.prototype.callPopupsChangeEvents = function () { this.onPopupsChangeEvents.forEach(function (cb) { return cb(); }); }; Object.defineProperty(PopupManagerInternal.prototype, "closedPopups", { get: function () { this._closedPopups.length = Math.min(this._closedPopups.length, CLOSED_POPUPS_THRESHOLD); return this._closedPopups; }, enumerable: false, configurable: true }); PopupManagerInternal.prototype.subscribeOnPopupsChange = function (callback) { this.onPopupsChangeEvents.push(callback); }; Object.defineProperty(PopupManagerInternal.prototype, "popups", { get: function () { return __spreadArray(__spreadArray([], this.openPopups), this.closedPopups); }, enumerable: false, configurable: true }); PopupManagerInternal.prototype.close = function (popupGuid, onConsumerOnCloseCallback, args) { var currentPopupIndex = this.openPopups.findIndex(function (_a) { var guid = _a.guid; return guid === popupGuid; }); if (currentPopupIndex === -1) { return; } var currentPopup = this.openPopups[currentPopupIndex]; currentPopup.close(onConsumerOnCloseCallback, args); var closedPopup = this.openPopups.splice(currentPopupIndex, 1)[0]; this.closedPopups.unshift(closedPopup); this.callPopupsChangeEvents(); }; PopupManagerInternal.prototype.unmount = function (popupGuid) { var closePopupIndex = this.openPopups.findIndex(function (_a) { var guid = _a.guid; return guid === popupGuid; }); var unmountPopupIndex = this.closedPopups.findIndex(function (_a) { var guid = _a.guid; return guid === popupGuid; }); var shouldCallPopupsChangeEvents; if (closePopupIndex !== -1) { shouldCallPopupsChangeEvents = true; this.openPopups.splice(closePopupIndex, 1); } if (unmountPopupIndex !== -1) { shouldCallPopupsChangeEvents = true; this.closedPopups.splice(unmountPopupIndex, 1); } if (shouldCallPopupsChangeEvents) { this.callPopupsChangeEvents(); } }; return PopupManagerInternal; }()); exports.PopupManagerInternal = PopupManagerInternal; //# sourceMappingURL=popupManagerInternal.js.map