-
Notifications
You must be signed in to change notification settings - Fork 30
/
modifier-manager.js
58 lines (44 loc) · 1.3 KB
/
modifier-manager.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
import Ember from 'ember';
import { capabilities } from '@ember/modifier';
import { set } from '@ember/object';
import { schedule } from '@ember/runloop';
import { DESTROYING, DESTROYED } from './modifier';
class ClassBasedModifierManager {
capabilities = capabilities('3.13');
createModifier(factory, args) {
let { owner, class: modifier } = factory;
return new modifier(owner, args);
}
installModifier(instance, element) {
instance.element = element;
instance.didReceiveArguments();
instance.didInstall();
}
updateModifier(instance, args) {
// TODO: this should be an args proxy
set(instance, 'args', args);
instance.didUpdateArguments();
instance.didReceiveArguments();
}
destroyModifier(instance) {
instance.willRemove();
instance.element = null;
if (instance[DESTROYING]) {
return;
}
let meta = Ember.meta(instance);
meta.setSourceDestroying();
instance[DESTROYING] = true;
schedule('actions', instance, instance.willDestroy);
schedule('destroy', undefined, scheduleDestroy, instance, meta);
}
}
function scheduleDestroy(modifier, meta) {
if (modifier[DESTROYED]) {
return;
}
Ember.destroy(modifier);
meta.setSourceDestroyed();
modifier[DESTROYED] = true;
}
export default new ClassBasedModifierManager();