@tarktech/ngx-context
Version:
Angular Context: Easy property binding for router outlet and nested component trees.
109 lines • 14 kB
JavaScript
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=