-
Notifications
You must be signed in to change notification settings - Fork 2
/
EventListeners.ts
43 lines (39 loc) · 1.08 KB
/
EventListeners.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import Base from './BaseClasses/Base';
import { EVENT, LOG_TYPE } from './Enums';
export default class EventListeners extends Base {
public subscribe(event: EVENT, cb: (...args: any[]) => void) {
let eventData = this.EventListeners.find(r => r.event === event);
if (eventData) {
eventData.cb.push(cb);
} else {
eventData = {
cb: [cb],
// tslint:disable-next-line: object-shorthand-properties-first
event,
};
this.EventListeners.push(eventData);
}
return () => {
if (eventData) {
const idx = eventData.cb.findIndex(r => r === cb);
eventData.cb.splice(idx, 1);
} else {
const mesg = 'Invalid event';
this.run(EVENT.message, LOG_TYPE.error, mesg);
this.log(LOG_TYPE.error, mesg);
}
};
}
public run(event: EVENT, ...args: any[]) {
const eventData = this.EventListeners.find(r => r.event === event);
if (eventData) {
eventData.cb.forEach((r) => {
try {
r(...args);
} finally {
// continue
}
});
}
}
}