ngx-context-store
Version:
An alternative yet advanced mechanism for Angular components to share data.
72 lines • 10.6 kB
JavaScript
import { Directive, forwardRef, Inject, Input, Optional, SkipSelf } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
export class NgxContextStoreSetDirective {
constructor(templateRef, viewContainer, parentContextHolder) {
var _a;
this.templateRef = templateRef;
this.viewContainer = viewContainer;
this.parentContextHolder = parentContextHolder;
this.context$ = new BehaviorSubject({});
this._parentSubsciption = (_a = this.parentContextHolder) === null || _a === void 0 ? void 0 : _a.context$.subscribe(ctx => this.updateContext());
}
ngOnInit() {
// structural and attribute directive compatibility
if (this.templateRef && this.viewContainer) {
this._view = this.viewContainer.createEmbeddedView(this.templateRef);
}
}
ngOnChanges(changes) {
var _a, _b, _c, _d, _e;
if ((changes === null || changes === void 0 ? void 0 : changes.setContext) || (changes === null || changes === void 0 ? void 0 : changes.setContextUnder)) {
const setContextUnder = (_c = (_b = (_a = changes === null || changes === void 0 ? void 0 : changes.setContextUnder) === null || _a === void 0 ? void 0 : _a.currentValue) !== null && _b !== void 0 ? _b : this.setContextUnder) !== null && _c !== void 0 ? _c : '$implicit';
const setContextValue = (_e = (_d = changes === null || changes === void 0 ? void 0 : changes.setContext) === null || _d === void 0 ? void 0 : _d.currentValue) !== null && _e !== void 0 ? _e : this.setContext;
this._localContext = Object.assign(Object.assign({}, this._localContext), { [setContextUnder]: setContextValue });
}
else if (changes === null || changes === void 0 ? void 0 : changes.setContextO) {
this._localContext = Object.assign({}, changes === null || changes === void 0 ? void 0 : changes.setContextO.currentValue);
}
this.updateContext();
}
ngOnDestroy() {
if (this._view) {
this.viewContainer.clear();
this._view = undefined;
}
if (this._parentSubsciption) {
this._parentSubsciption.unsubscribe();
}
this.context$.complete();
}
updateContext() {
var _a, _b;
const parentContext = (_b = (_a = this.parentContextHolder) === null || _a === void 0 ? void 0 : _a.context$.value) !== null && _b !== void 0 ? _b : undefined;
this.context$.next(Object.assign(Object.assign({}, parentContext), this._localContext));
}
}
NgxContextStoreSetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.10", ngImport: i0, type: NgxContextStoreSetDirective, deps: [{ token: i0.TemplateRef, optional: true }, { token: i0.ViewContainerRef, optional: true }, { token: forwardRef(() => NgxContextStoreSetDirective), optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
NgxContextStoreSetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.10", type: NgxContextStoreSetDirective, selector: "[setContext], [setContextO]", inputs: { setContext: "setContext", setContextUnder: "setContextUnder", setContextO: "setContextO" }, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.10", ngImport: i0, type: NgxContextStoreSetDirective, decorators: [{
type: Directive,
args: [{
selector: '[setContext], [setContextO]',
}]
}], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
type: Optional
}] }, { type: i0.ViewContainerRef, decorators: [{
type: Optional
}] }, { type: NgxContextStoreSetDirective, decorators: [{
type: Optional
}, {
type: SkipSelf
}, {
type: Inject,
args: [forwardRef(() => NgxContextStoreSetDirective)]
}] }]; }, propDecorators: { setContext: [{
type: Input
}], setContextUnder: [{
type: Input
}], setContextO: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNvbnRleHQtc3RvcmUtc2V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb250ZXh0LXN0b3JlL3NyYy9saWIvbmd4LWNvbnRleHQtc3RvcmUtc2V0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFtQixVQUFVLEVBQVEsTUFBTSxFQUFFLEtBQUssRUFBZ0MsUUFBUSxFQUFpQixRQUFRLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQzVMLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDOztBQU1yRCxNQUFNLE9BQU8sMkJBQTJCO0lBV3RDLFlBQ3NCLFdBQTZCLEVBQzdCLGFBQStCLEVBSTNDLG1CQUFnRDs7UUFMcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUkzQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTZCO1FBWm5ELGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBdUIsRUFBRSxDQUFDLENBQUM7UUFjOUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQUEsSUFBSSxDQUFDLG1CQUFtQiwwQ0FBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELFFBQVE7UUFDTixtREFBbUQ7UUFDbkQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7O1FBQ2hDLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsVUFBVSxNQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxlQUFlLENBQUEsRUFBRTtZQUNuRCxNQUFNLGVBQWUsR0FBRyxNQUFBLE1BQUEsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZUFBZSwwQ0FBRSxZQUFZLG1DQUFJLElBQUksQ0FBQyxlQUFlLG1DQUFJLFdBQVcsQ0FBQztZQUN0RyxNQUFNLGVBQWUsR0FBRyxNQUFBLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsMENBQUUsWUFBWSxtQ0FBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzdFLElBQUksQ0FBQyxhQUFhLG1DQUFRLElBQUksQ0FBQyxhQUFhLEdBQUssRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFFLENBQUM7U0FDM0Y7YUFBTSxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGFBQWEscUJBQVEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUUsQ0FBQztTQUMvRDtRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7U0FDeEI7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxhQUFhOztRQUNuQixNQUFNLGFBQWEsR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLG1CQUFtQiwwQ0FBRSxRQUFRLENBQUMsS0FBSyxtQ0FBSSxTQUFTLENBQUM7UUFDNUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGlDQUFNLGFBQWEsR0FBSyxJQUFJLENBQUMsYUFBYSxFQUFHLENBQUM7SUFDbEUsQ0FBQzs7eUhBdERVLDJCQUEyQiw2R0FnQjVCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQzs2R0FoQjVDLDJCQUEyQjs0RkFBM0IsMkJBQTJCO2tCQUh2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw2QkFBNkI7aUJBQ3hDOzswQkFhSSxRQUFROzswQkFDUixRQUFROzhCQUlvQiwyQkFBMkI7MEJBSHZELFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDOzRDQVQ5QyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRW1iZWRkZWRWaWV3UmVmLCBmb3J3YXJkUmVmLCBIb3N0LCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgU2ltcGxlQ2hhbmdlcywgU2tpcFNlbGYsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmd4Q29udGV4dFN0b3JlTW9kZWwgfSBmcm9tICcuL25neC1jb250ZXh0LXN0b3JlLW1vZGVsJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NldENvbnRleHRdLCBbc2V0Q29udGV4dE9dJyxcbn0pXG5leHBvcnQgY2xhc3MgTmd4Q29udGV4dFN0b3JlU2V0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3ZpZXc6IEVtYmVkZGVkVmlld1JlZjxOZ3hDb250ZXh0U3RvcmVNb2RlbD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3BhcmVudFN1YnNjaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIFxuICBwcml2YXRlIF9sb2NhbENvbnRleHQ6IE5neENvbnRleHRTdG9yZU1vZGVsO1xuICBwdWJsaWMgY29udGV4dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5neENvbnRleHRTdG9yZU1vZGVsPih7fSk7XG5cbiAgQElucHV0KCkgc2V0Q29udGV4dDogYW55O1xuICBASW5wdXQoKSBzZXRDb250ZXh0VW5kZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgc2V0Q29udGV4dE86IE5neENvbnRleHRTdG9yZU1vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQFNraXBTZWxmKClcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gTmd4Q29udGV4dFN0b3JlU2V0RGlyZWN0aXZlKSlcbiAgICBwcml2YXRlIHBhcmVudENvbnRleHRIb2xkZXI6IE5neENvbnRleHRTdG9yZVNldERpcmVjdGl2ZVxuICApIHtcbiAgICB0aGlzLl9wYXJlbnRTdWJzY2lwdGlvbiA9IHRoaXMucGFyZW50Q29udGV4dEhvbGRlcj8uY29udGV4dCQuc3Vic2NyaWJlKGN0eCA9PiB0aGlzLnVwZGF0ZUNvbnRleHQoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBzdHJ1Y3R1cmFsIGFuZCBhdHRyaWJ1dGUgZGlyZWN0aXZlIGNvbXBhdGliaWxpdHlcbiAgICBpZiAodGhpcy50ZW1wbGF0ZVJlZiAmJiB0aGlzLnZpZXdDb250YWluZXIpIHtcbiAgICAgIHRoaXMuX3ZpZXcgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcz8uc2V0Q29udGV4dCB8fCBjaGFuZ2VzPy5zZXRDb250ZXh0VW5kZXIpIHtcbiAgICAgIGNvbnN0IHNldENvbnRleHRVbmRlciA9IGNoYW5nZXM/LnNldENvbnRleHRVbmRlcj8uY3VycmVudFZhbHVlID8/IHRoaXMuc2V0Q29udGV4dFVuZGVyID8/ICckaW1wbGljaXQnO1xuICAgICAgY29uc3Qgc2V0Q29udGV4dFZhbHVlID0gY2hhbmdlcz8uc2V0Q29udGV4dD8uY3VycmVudFZhbHVlID8/IHRoaXMuc2V0Q29udGV4dDtcbiAgICAgIHRoaXMuX2xvY2FsQ29udGV4dCA9IHsgLi4udGhpcy5fbG9jYWxDb250ZXh0LCAuLi57IFtzZXRDb250ZXh0VW5kZXJdOiBzZXRDb250ZXh0VmFsdWUgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlcz8uc2V0Q29udGV4dE8pIHtcbiAgICAgIHRoaXMuX2xvY2FsQ29udGV4dCA9IHsgLi4uY2hhbmdlcz8uc2V0Q29udGV4dE8uY3VycmVudFZhbHVlIH07XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29udGV4dCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX3ZpZXcpIHtcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgdGhpcy5fdmlldyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhcmVudFN1YnNjaXB0aW9uKSB7XG4gICAgICB0aGlzLl9wYXJlbnRTdWJzY2lwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbnRleHQoKSB7XG4gICAgY29uc3QgcGFyZW50Q29udGV4dCA9IHRoaXMucGFyZW50Q29udGV4dEhvbGRlcj8uY29udGV4dCQudmFsdWUgPz8gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29udGV4dCQubmV4dCh7IC4uLnBhcmVudENvbnRleHQsIC4uLnRoaXMuX2xvY2FsQ29udGV4dCB9KTtcbiAgfVxuXG59XG4iXX0=