-
Notifications
You must be signed in to change notification settings - Fork 0
/
be-propagating.js
70 lines (70 loc) · 2.39 KB
/
be-propagating.js
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { config as beCnfg } from 'be-enhanced/config.js';
import { BE } from 'be-enhanced/BE.js';
export class BePropagating extends BE {
static config = {
propDefaults: {
propagate: ['self']
},
propInfo: {
...(beCnfg.propInfo),
propagators: {},
},
actions: {
hydrate: {
ifAllOf: 'propagate'
}
}
};
async hydrate(self) {
const { enhancedElement, propagate, propagators } = self;
const { BePropagating: BP } = await import('trans-render/lib/bePropagating2.js');
const newPropagators = propagators || new Map();
for (const propagatePath of propagate) {
if (newPropagators.has(propagatePath))
continue;
if (propagatePath === 'self') {
const propagator = new BP(enhancedElement);
newPropagators.set(propagatePath, propagator);
}
else {
const { homeInOn } = await import('trans-render/lib/homeInOn.js');
const target = await homeInOn(enhancedElement, propagatePath);
const propagator = new BP(target);
newPropagators.set(propagatePath, propagator);
}
}
return {
propagators: newPropagators,
resolved: true
};
}
#previousTS = new Map();
async setKeyVal(key, val, tsKey = 'timestamp') {
const { propagators } = this;
//const ts = val[tsKey];
if (propagators.has(key))
return propagators.get(key);
const { BePropagating: BP } = await import('trans-render/lib/bePropagating2.js');
const propagator = new BP(val);
propagators.set(key, propagator);
this.dispatchEvent(new Event(key));
return propagator;
}
getPropagator(key) {
return new Promise((resolve, reject) => {
const { propagators } = this;
if (propagators.has(key)) {
resolve(propagators.get(key));
return;
}
this.addEventListener(key, e => {
resolve(propagators.get(key));
});
});
}
async getGate(prop, key) {
const { Gate } = await import('./Gate.js');
const propagator = await this.getPropagator(key || 'self');
return new Gate(propagator, prop);
}
}