mobx-angular
Version:
Angular connector to MobX (2 and above)
58 lines • 6.89 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();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: MobxAutorunDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: MobxAutorunDirective, selector: "[mobxAutorun]", inputs: { mobxAutorun: "mobxAutorun" }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: MobxAutorunDirective, decorators: [{
type: Directive,
args: [{ selector: '[mobxAutorun]' }]
}], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }], propDecorators: { mobxAutorun: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1hdXRvcnVuLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21vYngtYW5ndWxhci9zcmMvbGliL21vYngtYXV0b3J1bi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFLVCxLQUFLLEVBRU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBbUIsTUFBTSxNQUFNLENBQUM7O0FBQ2hELGtFQUFrRTtBQUdsRSxNQUFNLE9BQU8sb0JBQW9CO0lBYS9CLFlBQ1ksV0FBNkIsRUFDN0IsYUFBK0I7UUFEL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQWRqQyxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFHZixzQkFBaUIsR0FBaUM7WUFDakUsT0FBTztZQUNQLFdBQVc7WUFDWCxvQkFBb0I7WUFDcEIsTUFBTTtZQUNOLFNBQVM7U0FDVixDQUFDO0lBTUMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXBFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQiw2Q0FBNkM7SUFDL0MsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDckQsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUEwQjtRQUNuQyxNQUFNLElBQUksR0FBb0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDbEUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQWdDLENBQUMsRUFBRSxDQUFDO2dCQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQzs4R0F2RFUsb0JBQW9CO2tHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFOytHQVk3QixXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIElucHV0LFxuICBFbWJlZGRlZFZpZXdSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhdXRvcnVuLCBJQXV0b3J1bk9wdGlvbnMgfSBmcm9tICdtb2J4Jztcbi8vIGltcG9ydCB7IG1vYnhBbmd1bGFyRGVidWcgfSBmcm9tICcuLi91dGlscy9tb2J4LWFuZ3VsYXItZGVidWcnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbW9ieEF1dG9ydW5dJyB9KVxuZXhwb3J0IGNsYXNzIE1vYnhBdXRvcnVuRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgdGVtcGxhdGVCaW5kaW5ncyA9IHt9O1xuICBwcm90ZWN0ZWQgZGlzcG9zZTogYW55O1xuICBwcm90ZWN0ZWQgdmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsQXV0b3J1bk9wdGlvbnM6IEFycmF5PGtleW9mIElBdXRvcnVuT3B0aW9ucz4gPSBbXG4gICAgJ2RlbGF5JyxcbiAgICAnc2NoZWR1bGVyJyxcbiAgICAncmVxdWlyZXNPYnNlcnZhYmxlJyxcbiAgICAnbmFtZScsXG4gICAgJ29uRXJyb3InXG4gIF07XG4gIEBJbnB1dCgpIG1vYnhBdXRvcnVuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcm90ZWN0ZWQgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy52aWV3ID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmKTtcblxuICAgIGlmICh0aGlzLmRpc3Bvc2UpIHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3VsZERldGFjaCgpKSB7XG4gICAgICB0aGlzLnZpZXcuZGV0YWNoKCk7XG4gICAgfVxuICAgIHRoaXMuYXV0b0RldGVjdCh0aGlzLnZpZXcpO1xuICAgIC8vIG1vYnhBbmd1bGFyRGVidWcodGhpcy52aWV3LCB0aGlzLmRpc3Bvc2UpO1xuICB9XG5cbiAgc2hvdWxkRGV0YWNoKCkge1xuICAgIHJldHVybiB0aGlzLm1vYnhBdXRvcnVuICYmIHRoaXMubW9ieEF1dG9ydW4uZGV0YWNoO1xuICB9XG5cbiAgYXV0b0RldGVjdCh2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55Pikge1xuICAgIGNvbnN0IG9wdHM6IElBdXRvcnVuT3B0aW9ucyA9IHRoaXMuZ2V0QXV0b3J1bk9wdGlvbnMoKTtcblxuICAgIHRoaXMuZGlzcG9zZSA9IGF1dG9ydW4oKCkgPT4gdmlldy5kZXRlY3RDaGFuZ2VzKCksIG9wdHMpO1xuICB9XG5cbiAgZ2V0QXV0b3J1bk9wdGlvbnMoKTogSUF1dG9ydW5PcHRpb25zIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tb2J4QXV0b3J1biB8fCB7fSkucmVkdWNlKChvcHRzLCBjdXJyZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5hbGxBdXRvcnVuT3B0aW9ucy5pbmNsdWRlcyhjdXJyZW50IGFzIGtleW9mIElBdXRvcnVuT3B0aW9ucykpIHtcbiAgICAgICAgb3B0c1tjdXJyZW50XSA9IHRoaXMubW9ieEF1dG9ydW5bY3VycmVudF07XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0cztcbiAgICB9LCB7fSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5kaXNwb3NlKSB7XG4gICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==