-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcompoundEvent.js
More file actions
36 lines (33 loc) · 931 Bytes
/
compoundEvent.js
File metadata and controls
36 lines (33 loc) · 931 Bytes
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
import eventManager from './eventManager.js';
import wrap from './2.pokemon.js';
export default function compound(...events) {
const callback = events.pop();
if (typeof callback !== 'function') throw new Error('Callback not provided');
const cache = {};
let triggered = 0;
// TODO: cache data
function trigger(event, ...data) {
if (!cache[event].triggered) {
cache[event].triggered = this.singleton ? 'singleton' : true;
triggered += 1;
}
if (triggered >= events.length) {
events.forEach((ev) => {
const e = cache[ev];
// Only reset if not singleton
if (e.triggered !== true) return;
e.triggered = false;
triggered -= 1;
});
wrap(callback);
}
}
events.forEach((ev) => {
cache[ev] = {
triggered: false,
};
eventManager.on(ev, function wrapper(...data) {
trigger.call(this, ev, ...data);
});
});
}