UNPKG

@mlightcad/common

Version:

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![npm version](https://img.shields.io/npm/v/@mlightcad/common.svg)](https://www.npmjs.com/package/@mlightcad/common)

133 lines 4.37 kB
/** * @fileoverview Simple event manager implementation for the AutoCAD Common library. * * This module provides a lightweight event management system for handling * listeners and dispatching events with type-safe payload support. * * @module AcCmEventManager * @version 1.0.0 */ var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; /** * Simple event manager for handling event listeners and dispatching events. * * Provides a lightweight alternative to the more complex AcCmEventDispatcher * for cases where you need basic event handling with type-safe payloads. * * @template T - The type of the event payload. * * @example * ```typescript * // Create an event manager for string payloads * const manager = new AcCmEventManager<string>() * * // Add a listener * manager.addEventListener((message) => { * console.log('Received:', message) * }) * * // Dispatch an event * manager.dispatch('Hello, World!') * * // For complex payloads * interface LoadEvent { * url: string * progress: number * } * * const loadManager = new AcCmEventManager<LoadEvent>() * loadManager.addEventListener(({ url, progress }) => { * console.log(`Loading ${url}: ${progress}%`) * }) * ``` */ var AcCmEventManager = /** @class */ (function () { function AcCmEventManager() { this.listeners = []; } /** * Add the event listener * @param listener Input listener to be added */ AcCmEventManager.prototype.addEventListener = function (listener) { this.listeners.push(listener); }; /** * Remove the listener * @param listener Input listener to be removed */ AcCmEventManager.prototype.removeEventListener = function (listener) { this.listeners = this.listeners.filter(function (s) { return s !== listener; }); }; /** * Remove all listeners bound to the target and add one new listener * @param listener Input listener to be added */ AcCmEventManager.prototype.replaceEventListener = function (listener) { this.removeEventListener(listener); this.addEventListener(listener); }; /** * Notify all listeners * @param payload Input payload passed to listener */ AcCmEventManager.prototype.dispatch = function (payload) { var e_1, _a; var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } try { for (var _b = __values(this.listeners), _c = _b.next(); !_c.done; _c = _b.next()) { var item = _c.value; var listener = item; listener.call.apply(listener, __spreadArray([null, payload], __read(args), false)); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } }; return AcCmEventManager; }()); export { AcCmEventManager }; //# sourceMappingURL=AcCmEventManager.js.map