@this-dot/route-config
Version:
A library containing directives and services for configuring components via Route's routeData property
49 lines • 8.76 kB
JavaScript
import { Injectable } from '@angular/core';
import { isTruthy } from '@this-dot/utils';
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
import { distinctUntilChanged, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';
import { RouteConfigService } from '../route-config.service';
import * as i0 from "@angular/core";
import * as i1 from "../route-config.service";
class RouteDataHasService {
setTags(tags) {
const tagArray = Array.isArray(tags) ? tags : [tags];
this.tags$.next(tagArray);
}
setPropName(propName) {
this.propName$.next(propName);
}
setElseTemplate(elseTemplate) {
this.elseTemplate$.next(elseTemplate);
}
constructor(routeConfigService) {
this.routeConfigService = routeConfigService;
this.tags$ = new BehaviorSubject([]);
this.propName$ = new BehaviorSubject(undefined);
this.elseTemplate$ = new BehaviorSubject(null);
this.destroy$ = new Subject();
this.display$ = combineLatest([
this.tags$,
this.propName$.pipe(filter(isTruthy), switchMap((propName) => this.routeConfigService.getLeafConfig(propName, []))),
]).pipe(map(([tags, routeValues]) => !!tags.find((tag) => routeValues.includes(tag))), distinctUntilChanged());
this.createView$ = combineLatest([this.display$, this.elseTemplate$]).pipe(tap(() => this.viewContainer.clear()), tap(([show, elseTemplate]) => show
? void this.viewContainer.createEmbeddedView(this.template)
: void (elseTemplate && this.viewContainer.createEmbeddedView(elseTemplate))));
}
init(template, viewContainer) {
this.template = template;
this.viewContainer = viewContainer;
this.createView$.pipe(takeUntil(this.destroy$)).subscribe();
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RouteDataHasService, deps: [{ token: i1.RouteConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RouteDataHasService }); }
}
export { RouteDataHasService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RouteDataHasService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.RouteConfigService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtZGF0YS1oYXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcm91dGUtY29uZmlnL3NyYy9saWIvcm91dGUtZGF0YS1oYXMvcm91dGUtZGF0YS1oYXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUE0QyxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUU3RCxNQUNhLG1CQUFtQjtJQWtDOUIsT0FBTyxDQUFDLElBQTZCO1FBQ25DLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQXdCO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxlQUFlLENBQUMsWUFBZ0M7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFlBQW9CLGtCQUFzRDtRQUF0RCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9DO1FBdENsRSxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDN0MsY0FBUyxHQUFHLElBQUksZUFBZSxDQUE2QixTQUFTLENBQUMsQ0FBQztRQUN2RSxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUE0QixJQUFJLENBQUMsQ0FBQztRQUNyRSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUvQixhQUFRLEdBQUcsYUFBYSxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLO1lBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2pCLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFDaEIsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFXLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUN2RjtTQUNGLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDeEYsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztRQUVlLGdCQUFXLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3BGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FDM0IsSUFBSTtZQUNGLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMzRCxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQy9FLENBQ0YsQ0FBQztJQWUyRSxDQUFDO0lBRTlFLElBQUksQ0FBQyxRQUE0QixFQUFFLGFBQStCO1FBQ2hFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQTFEVSxtQkFBbUI7a0hBQW5CLG1CQUFtQjs7U0FBbkIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1RydXRoeSB9IGZyb20gJ0B0aGlzLWRvdC91dGlscyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJvdXRlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3JvdXRlLWNvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJvdXRlRGF0YUhhc1NlcnZpY2U8XG4gIENUaGVuLFxuICBDRWxzZSxcbiAgUm91dGVUYWdzIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBSb3V0ZVByb3BOYW1lcyBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xuPiBpbXBsZW1lbnRzIE9uRGVzdHJveVxue1xuICBwcml2YXRlIHRlbXBsYXRlITogVGVtcGxhdGVSZWY8Q1RoZW4+O1xuICBwcml2YXRlIHZpZXdDb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBwcml2YXRlIHRhZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSb3V0ZVRhZ3NbXT4oW10pO1xuICBwcml2YXRlIHByb3BOYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Um91dGVQcm9wTmFtZXMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgZWxzZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8Q0Vsc2U+IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgZGlzcGxheSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnRhZ3MkLFxuICAgIHRoaXMucHJvcE5hbWUkLnBpcGUoXG4gICAgICBmaWx0ZXIoaXNUcnV0aHkpLFxuICAgICAgc3dpdGNoTWFwKChwcm9wTmFtZSkgPT4gdGhpcy5yb3V0ZUNvbmZpZ1NlcnZpY2UuZ2V0TGVhZkNvbmZpZzxzdHJpbmdbXT4ocHJvcE5hbWUsIFtdKSlcbiAgICApLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3RhZ3MsIHJvdXRlVmFsdWVzXSkgPT4gISF0YWdzLmZpbmQoKHRhZzogUm91dGVUYWdzKSA9PiByb3V0ZVZhbHVlcy5pbmNsdWRlcyh0YWcpKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlVmlldyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRpc3BsYXkkLCB0aGlzLmVsc2VUZW1wbGF0ZSRdKS5waXBlKFxuICAgIHRhcCgoKSA9PiB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKSksXG4gICAgdGFwKChbc2hvdywgZWxzZVRlbXBsYXRlXSkgPT5cbiAgICAgIHNob3dcbiAgICAgICAgPyB2b2lkIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSlcbiAgICAgICAgOiB2b2lkIChlbHNlVGVtcGxhdGUgJiYgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhlbHNlVGVtcGxhdGUpKVxuICAgIClcbiAgKTtcblxuICBzZXRUYWdzKHRhZ3M6IFJvdXRlVGFncyB8IFJvdXRlVGFnc1tdKSB7XG4gICAgY29uc3QgdGFnQXJyYXkgPSBBcnJheS5pc0FycmF5KHRhZ3MpID8gdGFncyA6IFt0YWdzXTtcbiAgICB0aGlzLnRhZ3MkLm5leHQodGFnQXJyYXkpO1xuICB9XG5cbiAgc2V0UHJvcE5hbWUocHJvcE5hbWU6IFJvdXRlUHJvcE5hbWVzKSB7XG4gICAgdGhpcy5wcm9wTmFtZSQubmV4dChwcm9wTmFtZSk7XG4gIH1cblxuICBzZXRFbHNlVGVtcGxhdGUoZWxzZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxDRWxzZT4pIHtcbiAgICB0aGlzLmVsc2VUZW1wbGF0ZSQubmV4dChlbHNlVGVtcGxhdGUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZUNvbmZpZ1NlcnZpY2U6IFJvdXRlQ29uZmlnU2VydmljZTxzdHJpbmcsIHN0cmluZz4pIHt9XG5cbiAgaW5pdCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8Q1RoZW4+LCB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHZpZXdDb250YWluZXI7XG4gICAgdGhpcy5jcmVhdGVWaWV3JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==