UNPKG

8.54 kBJavaScriptView Raw
1import { Directive, Input } from '@angular/core';
2import { autorun } from 'mobx';
3import * as i0 from "@angular/core";
4// import { mobxAngularDebug } from '../utils/mobx-angular-debug';
5export class MobxAutorunDirective {
6 constructor(templateRef, viewContainer) {
7 Object.defineProperty(this, "templateRef", {
8 enumerable: true,
9 configurable: true,
10 writable: true,
11 value: templateRef
12 });
13 Object.defineProperty(this, "viewContainer", {
14 enumerable: true,
15 configurable: true,
16 writable: true,
17 value: viewContainer
18 });
19 Object.defineProperty(this, "templateBindings", {
20 enumerable: true,
21 configurable: true,
22 writable: true,
23 value: {}
24 });
25 Object.defineProperty(this, "dispose", {
26 enumerable: true,
27 configurable: true,
28 writable: true,
29 value: void 0
30 });
31 Object.defineProperty(this, "view", {
32 enumerable: true,
33 configurable: true,
34 writable: true,
35 value: void 0
36 });
37 Object.defineProperty(this, "allAutorunOptions", {
38 enumerable: true,
39 configurable: true,
40 writable: true,
41 value: [
42 'delay',
43 'scheduler',
44 'requiresObservable',
45 'name',
46 'onError'
47 ]
48 });
49 Object.defineProperty(this, "mobxAutorun", {
50 enumerable: true,
51 configurable: true,
52 writable: true,
53 value: void 0
54 });
55 }
56 ngOnInit() {
57 this.view = this.viewContainer.createEmbeddedView(this.templateRef);
58 if (this.dispose) {
59 this.dispose();
60 }
61 if (this.shouldDetach()) {
62 this.view.detach();
63 }
64 this.autoDetect(this.view);
65 // mobxAngularDebug(this.view, this.dispose);
66 }
67 shouldDetach() {
68 return this.mobxAutorun && this.mobxAutorun.detach;
69 }
70 autoDetect(view) {
71 const opts = this.getAutorunOptions();
72 this.dispose = autorun(() => view.detectChanges(), opts);
73 }
74 getAutorunOptions() {
75 return Object.keys(this.mobxAutorun || {}).reduce((opts, current) => {
76 if (this.allAutorunOptions.includes(current)) {
77 opts[current] = this.mobxAutorun[current];
78 }
79 return opts;
80 }, {});
81 }
82 ngOnDestroy() {
83 if (this.dispose) {
84 this.dispose();
85 }
86 }
87}
88Object.defineProperty(MobxAutorunDirective, "\u0275fac", {
89 enumerable: true,
90 configurable: true,
91 writable: true,
92 value: i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MobxAutorunDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive })
93});
94Object.defineProperty(MobxAutorunDirective, "\u0275dir", {
95 enumerable: true,
96 configurable: true,
97 writable: true,
98 value: i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: MobxAutorunDirective, selector: "[mobxAutorun]", inputs: { mobxAutorun: "mobxAutorun" }, ngImport: i0 })
99});
100i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MobxAutorunDirective, decorators: [{
101 type: Directive,
102 args: [{ selector: '[mobxAutorun]' }]
103 }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { mobxAutorun: [{
104 type: Input
105 }] } });
106//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1hdXRvcnVuLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21vYngtYW5ndWxhci9zcmMvbGliL21vYngtYXV0b3J1bi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFLVCxLQUFLLEVBRU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBbUIsTUFBTSxNQUFNLENBQUM7O0FBQ2hELGtFQUFrRTtBQUdsRSxNQUFNLE9BQU8sb0JBQW9CO0lBYS9CLFlBQ1ksV0FBNkIsRUFDN0IsYUFBK0I7Ozs7O21CQUQvQjs7Ozs7O21CQUNBOztRQWRaOzs7O21CQUE2QixFQUFFO1dBQUM7UUFDaEM7Ozs7O1dBQXVCO1FBQ3ZCOzs7OztXQUFxQztRQUNyQzs7OzttQkFBbUU7Z0JBQ2pFLE9BQU87Z0JBQ1AsV0FBVztnQkFDWCxvQkFBb0I7Z0JBQ3BCLE1BQU07Z0JBQ04sU0FBUzthQUNWO1dBQUM7UUFDRjs7Ozs7V0FBcUI7SUFLbEIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXBFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsNkNBQTZDO0lBQy9DLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ3JELENBQUM7SUFFRCxVQUFVLENBQUMsSUFBMEI7UUFDbkMsTUFBTSxJQUFJLEdBQW9CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2xFLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFnQyxDQUFDLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDOzs7Ozs7Z0dBdkRVLG9CQUFvQjs7Ozs7O29GQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO2lJQVk3QixXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBUZW1wbGF0ZVJlZixcclxuICBPbkluaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIElucHV0LFxyXG4gIEVtYmVkZGVkVmlld1JlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBhdXRvcnVuLCBJQXV0b3J1bk9wdGlvbnMgfSBmcm9tICdtb2J4JztcclxuLy8gaW1wb3J0IHsgbW9ieEFuZ3VsYXJEZWJ1ZyB9IGZyb20gJy4uL3V0aWxzL21vYngtYW5ndWxhci1kZWJ1Zyc7XHJcblxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbW9ieEF1dG9ydW5dJyB9KVxyXG5leHBvcnQgY2xhc3MgTW9ieEF1dG9ydW5EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJvdGVjdGVkIHRlbXBsYXRlQmluZGluZ3MgPSB7fTtcclxuICBwcm90ZWN0ZWQgZGlzcG9zZTogYW55O1xyXG4gIHByb3RlY3RlZCB2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGFsbEF1dG9ydW5PcHRpb25zOiBBcnJheTxrZXlvZiBJQXV0b3J1bk9wdGlvbnM+ID0gW1xyXG4gICAgJ2RlbGF5JyxcclxuICAgICdzY2hlZHVsZXInLFxyXG4gICAgJ3JlcXVpcmVzT2JzZXJ2YWJsZScsXHJcbiAgICAnbmFtZScsXHJcbiAgICAnb25FcnJvcidcclxuICBdO1xyXG4gIEBJbnB1dCgpIG1vYnhBdXRvcnVuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcclxuICAgIHByb3RlY3RlZCB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudmlldyA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XHJcblxyXG4gICAgaWYgKHRoaXMuZGlzcG9zZSkge1xyXG4gICAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG91bGREZXRhY2goKSkge1xyXG4gICAgICB0aGlzLnZpZXcuZGV0YWNoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dG9EZXRlY3QodGhpcy52aWV3KTtcclxuICAgIC8vIG1vYnhBbmd1bGFyRGVidWcodGhpcy52aWV3LCB0aGlzLmRpc3Bvc2UpO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkRGV0YWNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW9ieEF1dG9ydW4gJiYgdGhpcy5tb2J4QXV0b3J1bi5kZXRhY2g7XHJcbiAgfVxyXG5cclxuICBhdXRvRGV0ZWN0KHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+KSB7XHJcbiAgICBjb25zdCBvcHRzOiBJQXV0b3J1bk9wdGlvbnMgPSB0aGlzLmdldEF1dG9ydW5PcHRpb25zKCk7XHJcblxyXG4gICAgdGhpcy5kaXNwb3NlID0gYXV0b3J1bigoKSA9PiB2aWV3LmRldGVjdENoYW5nZXMoKSwgb3B0cyk7XHJcbiAgfVxyXG5cclxuICBnZXRBdXRvcnVuT3B0aW9ucygpOiBJQXV0b3J1bk9wdGlvbnMge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubW9ieEF1dG9ydW4gfHwge30pLnJlZHVjZSgob3B0cywgY3VycmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5hbGxBdXRvcnVuT3B0aW9ucy5pbmNsdWRlcyhjdXJyZW50IGFzIGtleW9mIElBdXRvcnVuT3B0aW9ucykpIHtcclxuICAgICAgICBvcHRzW2N1cnJlbnRdID0gdGhpcy5tb2J4QXV0b3J1bltjdXJyZW50XTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb3B0cztcclxuICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuZGlzcG9zZSkge1xyXG4gICAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
\No newline at end of file