kiss-js-bloc
Version:
Bloc type state management solution for typescript
58 lines (43 loc) • 1.29 kB
text/typescript
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;
}
}