UNPKG

kiss-js-bloc

Version:

Bloc type state management solution for typescript

58 lines (43 loc) 1.29 kB
const events = require('events') var myEmitter = new events.EventEmitter() /// interface that take event and return the state export interface Listener<Event, State> { (event: Event) : State; } /// interface that dispose the event export interface Disposable{ dispose() : any; } /// export class TypedEvent<Event, State> { /// private listners: Listener<Event, State>[] = []; /// on = (event : Event,listener: Listener<Event, State>): any => { console.log("Adding listner", listener) this.listners.push(listener) myEmitter.on(event, listener) //this.off(listener) return { dispose: () => this.off(listener) } } off = (listner: Listener<Event, State>) => { var callbackIndex = this.listners.indexOf(listner) console.log("dispose") if(callbackIndex>-1) { this.listners.splice(callbackIndex, 1) } } emit = (event: Event) : State => { var state; this.listners.forEach((listener) => { console.log("Listner ",listener) console.log("Event ", event) if(event==listener) { state = listener(event) } }) return state; } }