UNPKG

ngx-context-store

Version:

An alternative yet advanced mechanism for Angular components to share data.

72 lines 10.6 kB
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=