UNPKG

jcore-ui

Version:

jcore-ui - components for building an interface

44 lines (35 loc) 1.19 kB
import { IObject, IFunction } from '../interfaces/index'; export type TEventEmitter = EventEmitter; class EventEmitter { events: IObject constructor() { this.events = {}; } on(event: string, listener: IFunction) { if (typeof this.events[event] !== 'object') { this.events[event] = []; } this.events[event].push(listener); return () => this.removeListener(event, listener); } removeListener(event: string, listener: IFunction) { if (typeof this.events[event] === 'object') { const idx = this.events[event].indexOf(listener); if (idx > -1) { this.events[event].splice(idx, 1); } } } emit(event: string, ...args: any) { if (typeof this.events[event] === 'object') { this.events[event].forEach((listener: IFunction) => listener.apply(this, args)); } } once(event: string, listener: IFunction) { const remove = this.on(event, (...args) => { remove(); listener.apply(this, args); }); } }; export default EventEmitter