mobx-angular
Version:
Angular connector to MobX (2 and above)
58 lines • 6.86 kB
JavaScript
import { Directive, Input } from '@angular/core';
import { autorun } from 'mobx';
import * as i0 from "@angular/core";
// import { mobxAngularDebug } from '../utils/mobx-angular-debug';
export class MobxAutorunDirective {
constructor(templateRef, viewContainer) {
this.templateRef = templateRef;
this.viewContainer = viewContainer;
this.templateBindings = {};
this.allAutorunOptions = [
'delay',
'scheduler',
'requiresObservable',
'name',
'onError'
];
}
ngOnInit() {
this.view = this.viewContainer.createEmbeddedView(this.templateRef);
if (this.dispose) {
this.dispose();
}
if (this.shouldDetach()) {
this.view.detach();
}
this.autoDetect(this.view);
// mobxAngularDebug(this.view, this.dispose);
}
shouldDetach() {
return this.mobxAutorun && this.mobxAutorun.detach;
}
autoDetect(view) {
const opts = this.getAutorunOptions();
this.dispose = autorun(() => view.detectChanges(), opts);
}
getAutorunOptions() {
return Object.keys(this.mobxAutorun || {}).reduce((opts, current) => {
if (this.allAutorunOptions.includes(current)) {
opts[current] = this.mobxAutorun[current];
}
return opts;
}, {});
}
ngOnDestroy() {
if (this.dispose) {
this.dispose();
}
}
}
MobxAutorunDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: MobxAutorunDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
MobxAutorunDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.5", type: MobxAutorunDirective, selector: "[mobxAutorun]", inputs: { mobxAutorun: "mobxAutorun" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: MobxAutorunDirective, decorators: [{
type: Directive,
args: [{ selector: '[mobxAutorun]' }]
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { mobxAutorun: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1hdXRvcnVuLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21vYngtYW5ndWxhci9zcmMvbGliL21vYngtYXV0b3J1bi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFLVCxLQUFLLEVBRU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBbUIsTUFBTSxNQUFNLENBQUM7O0FBQ2hELGtFQUFrRTtBQUdsRSxNQUFNLE9BQU8sb0JBQW9CO0lBYS9CLFlBQ1ksV0FBNkIsRUFDN0IsYUFBK0I7UUFEL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQWRqQyxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFHZixzQkFBaUIsR0FBaUM7WUFDakUsT0FBTztZQUNQLFdBQVc7WUFDWCxvQkFBb0I7WUFDcEIsTUFBTTtZQUNOLFNBQVM7U0FDVixDQUFDO0lBTUMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXBFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsNkNBQTZDO0lBQy9DLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ3JELENBQUM7SUFFRCxVQUFVLENBQUMsSUFBMEI7UUFDbkMsTUFBTSxJQUFJLEdBQW9CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2xFLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFnQyxDQUFDLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDOztpSEF2RFUsb0JBQW9CO3FHQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFEaEMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7aUlBWTdCLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgSW5wdXQsXG4gIEVtYmVkZGVkVmlld1JlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGF1dG9ydW4sIElBdXRvcnVuT3B0aW9ucyB9IGZyb20gJ21vYngnO1xuLy8gaW1wb3J0IHsgbW9ieEFuZ3VsYXJEZWJ1ZyB9IGZyb20gJy4uL3V0aWxzL21vYngtYW5ndWxhci1kZWJ1Zyc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1ttb2J4QXV0b3J1bl0nIH0pXG5leHBvcnQgY2xhc3MgTW9ieEF1dG9ydW5EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCB0ZW1wbGF0ZUJpbmRpbmdzID0ge307XG4gIHByb3RlY3RlZCBkaXNwb3NlOiBhbnk7XG4gIHByb3RlY3RlZCB2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxBdXRvcnVuT3B0aW9uczogQXJyYXk8a2V5b2YgSUF1dG9ydW5PcHRpb25zPiA9IFtcbiAgICAnZGVsYXknLFxuICAgICdzY2hlZHVsZXInLFxuICAgICdyZXF1aXJlc09ic2VydmFibGUnLFxuICAgICduYW1lJyxcbiAgICAnb25FcnJvcidcbiAgXTtcbiAgQElucHV0KCkgbW9ieEF1dG9ydW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIHByb3RlY3RlZCB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZpZXcgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuXG4gICAgaWYgKHRoaXMuZGlzcG9zZSkge1xuICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvdWxkRGV0YWNoKCkpIHtcbiAgICAgIHRoaXMudmlldy5kZXRhY2goKTtcbiAgICB9XG4gICAgdGhpcy5hdXRvRGV0ZWN0KHRoaXMudmlldyk7XG4gICAgLy8gbW9ieEFuZ3VsYXJEZWJ1Zyh0aGlzLnZpZXcsIHRoaXMuZGlzcG9zZSk7XG4gIH1cblxuICBzaG91bGREZXRhY2goKSB7XG4gICAgcmV0dXJuIHRoaXMubW9ieEF1dG9ydW4gJiYgdGhpcy5tb2J4QXV0b3J1bi5kZXRhY2g7XG4gIH1cblxuICBhdXRvRGV0ZWN0KHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+KSB7XG4gICAgY29uc3Qgb3B0czogSUF1dG9ydW5PcHRpb25zID0gdGhpcy5nZXRBdXRvcnVuT3B0aW9ucygpO1xuXG4gICAgdGhpcy5kaXNwb3NlID0gYXV0b3J1bigoKSA9PiB2aWV3LmRldGVjdENoYW5nZXMoKSwgb3B0cyk7XG4gIH1cblxuICBnZXRBdXRvcnVuT3B0aW9ucygpOiBJQXV0b3J1bk9wdGlvbnMge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm1vYnhBdXRvcnVuIHx8IHt9KS5yZWR1Y2UoKG9wdHMsIGN1cnJlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmFsbEF1dG9ydW5PcHRpb25zLmluY2x1ZGVzKGN1cnJlbnQgYXMga2V5b2YgSUF1dG9ydW5PcHRpb25zKSkge1xuICAgICAgICBvcHRzW2N1cnJlbnRdID0gdGhpcy5tb2J4QXV0b3J1bltjdXJyZW50XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRzO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRpc3Bvc2UpIHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxufVxuIl19