UNPKG

@tarktech/ngx-context

Version:

Angular Context: Easy property binding for router outlet and nested component trees.

109 lines 14 kB
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, Optional, SkipSelf, ViewEncapsulation } from '@angular/core'; import { ReplaySubject, Subject } from 'rxjs'; import { isSubscribableOrPromise, parseKeys } from './internals'; import * as i0 from "@angular/core"; export class ContextProviderComponent { source; initialized = false; _contextMap = {}; _provide = ''; provided = new Map(); set contextMap(map) { this._contextMap = map || {}; } get contextMap() { return this._contextMap; } set provide(value) { this._provide = value || ''; } get provide() { return this._provide; } get component() { return this.source['_view']?.component || this.source['context']; } change$ = new ReplaySubject(1); reset$ = new Subject(); constructor(source) { this.source = source; } init() { setTimeout(() => { const THIS = this; const context = new Map(); const provided = parseKeys(this.provide).filter(key => key && key in this.component); provided.forEach(key => { if (isSubscribableOrPromise(this.component[key])) { this.change$.next(key); return; } const propertyDescriptor = Object.getOwnPropertyDescriptor(this.component, key) || Object.getOwnPropertyDescriptor(this.component.__proto__, key); this.provided.set(key, propertyDescriptor); const { value, writable, get: getter, set: setter, ...prop } = propertyDescriptor; Object.defineProperty(this.component, key, { ...prop, get: getter ? function () { return getter.call(this); } : function () { return context.get(key); }, set: setter ? function () { setter.apply(this, arguments); THIS.change$.next(key); } : function (newValue) { context.set(key, newValue); THIS.change$.next(key); }, }); this.component[key] = value || this.component[key]; }); }, 0); } reset() { this.provided.forEach((propertyDescriptor, key) => { const value = this.component[key]; Object.defineProperty(this.component, key, propertyDescriptor); this.component[key] = value; }); this.provided.clear(); this.change$.next(''); this.reset$.next(); } ngOnChanges() { if (this.initialized) { this.reset(); if (this.source) this.init(); } } ngOnInit() { this.initialized = true; this.ngOnChanges(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ContextProviderComponent, deps: [{ token: i0.ChangeDetectorRef, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: ContextProviderComponent, selector: "context-provider", inputs: { contextMap: "contextMap", provide: "provide" }, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ContextProviderComponent, decorators: [{ type: Component, args: [{ selector: 'context-provider', template: '<ng-content></ng-content>', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef, decorators: [{ type: Optional }, { type: SkipSelf }] }]; }, propDecorators: { contextMap: [{ type: Input }], provide: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbnRleHQvc3JjL2xpYi9wcm92aWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFHTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQVNqRSxNQUFNLE9BQU8sd0JBQXdCO0lBaUN6QjtJQWhDRixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLFdBQVcsR0FBZSxFQUFFLENBQUM7SUFDN0IsUUFBUSxHQUFzQixFQUFFLENBQUM7SUFFekMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFFckIsSUFDSSxVQUFVLENBQUMsR0FBZTtRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFDSSxPQUFPLENBQUMsS0FBd0I7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FB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QUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFYixJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7dUdBN0dVLHdCQUF3QjsyRkFBeEIsd0JBQXdCLHVJQUp6QiwyQkFBMkI7OzJGQUkxQix3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0Qzs7MEJBZ0NJLFFBQVE7OzBCQUNSLFFBQVE7NENBeEJQLFVBQVU7c0JBRGIsS0FBSztnQkFTRixPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIFNraXBTZWxmLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgaXNTdWJzY3JpYmFibGVPclByb21pc2UsIHBhcnNlS2V5cyB9IGZyb20gJy4vaW50ZXJuYWxzJztcclxuaW1wb3J0IHsgQ29udGV4dE1hcCB9IGZyb20gJy4vc3ltYm9scyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvbnRleHQtcHJvdmlkZXInLFxyXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRleHRQcm92aWRlckNvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcclxuICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY29udGV4dE1hcDogQ29udGV4dE1hcCA9IHt9O1xyXG4gIHByaXZhdGUgX3Byb3ZpZGU6IHN0cmluZyB8IHN0cmluZ1tdID0gJyc7XHJcblxyXG4gIHByb3ZpZGVkID0gbmV3IE1hcCgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb250ZXh0TWFwKG1hcDogQ29udGV4dE1hcCkge1xyXG4gICAgdGhpcy5fY29udGV4dE1hcCA9IG1hcCB8fCB7fTtcclxuICB9XHJcbiAgZ2V0IGNvbnRleHRNYXAoKTogQ29udGV4dE1hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dE1hcDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHByb3ZpZGUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLl9wcm92aWRlID0gdmFsdWUgfHwgJyc7XHJcbiAgfVxyXG4gIGdldCBwcm92aWRlKCk6IHN0cmluZyB8IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm92aWRlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbXBvbmVudCgpOiBUIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZVsnX3ZpZXcnXT8uY29tcG9uZW50IHx8IHRoaXMuc291cmNlWydjb250ZXh0J11cclxuICB9XHJcblxyXG4gIGNoYW5nZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KDEpO1xyXG4gIHJlc2V0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIEBTa2lwU2VsZigpXHJcbiAgICBwcml2YXRlIHNvdXJjZTogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgVEhJUyA9IHRoaXM7XHJcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgTWFwKCk7XHJcbiAgICAgIGNvbnN0IHByb3ZpZGVkID0gcGFyc2VLZXlzKHRoaXMucHJvdmlkZSkuZmlsdGVyKFxyXG4gICAgICAgIGtleSA9PiBrZXkgJiYga2V5IGluICh0aGlzLmNvbXBvbmVudCBhcyBvYmplY3QpLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcHJvdmlkZWQuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGlmIChpc1N1YnNjcmliYWJsZU9yUHJvbWlzZSh0aGlzLmNvbXBvbmVudFtrZXldKSkge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2UkLm5leHQoa2V5KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3BlcnR5RGVzY3JpcHRvciA9XHJcbiAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMuY29tcG9uZW50LCBrZXkpIHx8XHJcbiAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCh0aGlzLmNvbXBvbmVudCBhcyBhbnkpLl9fcHJvdG9fXywga2V5KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcm92aWRlZC5zZXQoa2V5LCBwcm9wZXJ0eURlc2NyaXB0b3IpO1xyXG5cclxuICAgICAgICBjb25zdCB7IHZhbHVlLCB3cml0YWJsZSwgZ2V0OiBnZXR0ZXIsIHNldDogc2V0dGVyLCAuLi5wcm9wIH0gPSBwcm9wZXJ0eURlc2NyaXB0b3I7XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNvbXBvbmVudCwga2V5LCB7XHJcbiAgICAgICAgICAuLi5wcm9wLFxyXG4gICAgICAgICAgZ2V0OiBnZXR0ZXJcclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKTogYW55IHtcclxuICAgICAgICAgICAgICByZXR1cm4gZ2V0dGVyLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoKTogYW55IHtcclxuICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXQoa2V5KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIHNldDogc2V0dGVyXHJcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHNldHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgIFRISVMuY2hhbmdlJC5uZXh0KGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAobmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQuc2V0KGtleSwgbmV3VmFsdWUpO1xyXG4gICAgICAgICAgICAgIFRISVMuY2hhbmdlJC5uZXh0KGtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50W2tleV0gPSB2YWx1ZSB8fCB0aGlzLmNvbXBvbmVudFtrZXldO1xyXG4gICAgICB9KTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldCgpIHtcclxuICAgIHRoaXMucHJvdmlkZWQuZm9yRWFjaCgocHJvcGVydHlEZXNjcmlwdG9yLCBrZXkpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbXBvbmVudFtrZXldO1xyXG5cclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuY29tcG9uZW50LCBrZXksIHByb3BlcnR5RGVzY3JpcHRvcik7XHJcblxyXG4gICAgICB0aGlzLmNvbXBvbmVudFtrZXldID0gdmFsdWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnByb3ZpZGVkLmNsZWFyKCk7XHJcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgnJyk7XHJcbiAgICB0aGlzLnJlc2V0JC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNvdXJjZSkgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iXX0=