UNPKG

@this-dot/route-config

Version:

A library containing directives and services for configuring components via Route's routeData property

64 lines 10.7 kB
import { Inject, Injectable, Optional } from '@angular/core'; import { ActivatedRoute, ActivationEnd, Router } from '@angular/router'; import { combineLatest } from 'rxjs'; import { filter, map, startWith, switchMap } from 'rxjs/operators'; import { ROUTE_DATA_DEFAULT_VALUE } from './route-data-default-value-token'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; const gatherRoutes = (activatedRoute) => { const routes = activatedRoute.pathFromRoot; let route = activatedRoute.firstChild; while (route) { routes.push(route); route = route.firstChild; } return routes; }; class RouteConfigService { get injectedDefaultValue() { return this._injectedDefaultValue || {}; } constructor(activatedRoute, router, _injectedDefaultValue) { this.activatedRoute = activatedRoute; this.router = router; this._injectedDefaultValue = _injectedDefaultValue; } /** * Returns an Observable which emits the route config set for the activated route. * * @example * export class AppComponent { * data$ = this.routeConfigService.getActivatedRouteConfig(); * dataWithDefaultValue$ = this.routeConfigService.getActivatedRouteConfig({ * routeTags: ['defaultTag'], * title: 'Default Title', * }); * } * * @param defaultValue - the default value that should be returned, it allows overriding the injected default values. * * @returns Observable<Partial<C>> */ getActivatedRouteConfig(defaultValue = {}) { return this.router.events.pipe(filter((event) => event instanceof ActivationEnd), map(() => this.activatedRoute), startWith(this.activatedRoute), map(gatherRoutes), switchMap((routes) => combineLatest(routes.map(({ data }) => data)).pipe(map((dataArr) => Object.assign({}, this.injectedDefaultValue, defaultValue, ...dataArr))))); } getLeafConfig(paramName, defaultValue) { return this.getActivatedRouteConfig(defaultValue ? { [paramName]: defaultValue, } : {}).pipe(map((data) => data[paramName] || defaultValue)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RouteConfigService, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: ROUTE_DATA_DEFAULT_VALUE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RouteConfigService }); } } export { RouteConfigService }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RouteConfigService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [ROUTE_DATA_DEFAULT_VALUE] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3JvdXRlLWNvbmZpZy9zcmMvbGliL3JvdXRlLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7O0FBaUI1RSxNQUFNLFlBQVksR0FBRyxDQUFDLGNBQThCLEVBQW9CLEVBQUU7SUFDeEUsTUFBTSxNQUFNLEdBQXFCLGNBQWMsQ0FBQyxZQUFZLENBQUM7SUFFN0QsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQztJQUN0QyxPQUFPLEtBQUssRUFBRTtRQUNaLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7S0FDMUI7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUNhLGtCQUFrQjtJQUk3QixJQUFZLG9CQUFvQjtRQUM5QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELFlBQ1UsY0FBOEIsRUFDOUIsTUFBYyxFQUdkLHFCQUF3RTtRQUp4RSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUdkLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBbUQ7SUFDL0UsQ0FBQztJQUVKOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILHVCQUF1QixDQUVyQixlQUEyQixFQUFFO1FBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM1QixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDakQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDOUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUNqQixTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNuQixhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoRCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUN6RixDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFlRCxhQUFhLENBQ1gsU0FBNEMsRUFDNUMsWUFBZ0I7UUFFaEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQ2pDLFlBQVk7WUFDVixDQUFDLENBQUU7Z0JBQ0MsQ0FBQyxTQUFTLENBQUMsRUFBRSxZQUFZO2FBQ2xCO1lBQ1gsQ0FBQyxDQUFDLEVBQUUsQ0FDUCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUE0QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDOzhHQXhFVSxrQkFBa0Isc0VBWW5CLHdCQUF3QjtrSEFadkIsa0JBQWtCOztTQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTs7MEJBWU4sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJPVVRFX0RBVEFfREVGQVVMVF9WQUxVRSB9IGZyb20gJy4vcm91dGUtZGF0YS1kZWZhdWx0LXZhbHVlLXRva2VuJztcblxuZXhwb3J0IHR5cGUgUm91dGVDb25maWdQYXJhbXM8Um91dGVUYWdzIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IHtcbiAgcm91dGVUYWdzOiBSb3V0ZVRhZ3MgfCBSb3V0ZVRhZ3NbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlQ29uZmlnUGFyYW1OYW1lcyA9IGtleW9mIFJvdXRlQ29uZmlnUGFyYW1zO1xuXG5leHBvcnQgdHlwZSBSb3V0ZURhdGE8XG4gIENvbmZpZ1BhcmFtc05hbWVzIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsXG4gIFJvdXRlVGFncyBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xuPiA9IHtcbiAgW2tleSBpbiBDb25maWdQYXJhbXNOYW1lc106IHVua25vd247XG59ICYgUm91dGVDb25maWdQYXJhbXM8Um91dGVUYWdzPjtcblxuZXhwb3J0IHR5cGUgUm91dGVEYXRhUGFyYW08Q29uZmlnUGFyYW1zTmFtZXMgZXh0ZW5kcyBzdHJpbmc+ID0ga2V5b2YgUm91dGVEYXRhPENvbmZpZ1BhcmFtc05hbWVzPjtcblxuY29uc3QgZ2F0aGVyUm91dGVzID0gKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IEFjdGl2YXRlZFJvdXRlW10gPT4ge1xuICBjb25zdCByb3V0ZXM6IEFjdGl2YXRlZFJvdXRlW10gPSBhY3RpdmF0ZWRSb3V0ZS5wYXRoRnJvbVJvb3Q7XG5cbiAgbGV0IHJvdXRlID0gYWN0aXZhdGVkUm91dGUuZmlyc3RDaGlsZDtcbiAgd2hpbGUgKHJvdXRlKSB7XG4gICAgcm91dGVzLnB1c2gocm91dGUpO1xuICAgIHJvdXRlID0gcm91dGUuZmlyc3RDaGlsZDtcbiAgfVxuXG4gIHJldHVybiByb3V0ZXM7XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUm91dGVDb25maWdTZXJ2aWNlPFxuICBSb3V0ZVRhZ3MgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIENvbmZpZ1BhcmFtc05hbWVzIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXJcbj4ge1xuICBwcml2YXRlIGdldCBpbmplY3RlZERlZmF1bHRWYWx1ZSgpOiBQYXJ0aWFsPFJvdXRlRGF0YTxDb25maWdQYXJhbXNOYW1lcywgUm91dGVUYWdzPj4ge1xuICAgIHJldHVybiB0aGlzLl9pbmplY3RlZERlZmF1bHRWYWx1ZSB8fCB7fTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFJPVVRFX0RBVEFfREVGQVVMVF9WQUxVRSlcbiAgICBwcml2YXRlIF9pbmplY3RlZERlZmF1bHRWYWx1ZT86IFBhcnRpYWw8Um91dGVEYXRhPENvbmZpZ1BhcmFtc05hbWVzLCBSb3V0ZVRhZ3M+PlxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB0aGUgcm91dGUgY29uZmlnIHNldCBmb3IgdGhlIGFjdGl2YXRlZCByb3V0ZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAqICAgZGF0YSQgPSB0aGlzLnJvdXRlQ29uZmlnU2VydmljZS5nZXRBY3RpdmF0ZWRSb3V0ZUNvbmZpZygpO1xuICAgKiAgIGRhdGFXaXRoRGVmYXVsdFZhbHVlJCA9IHRoaXMucm91dGVDb25maWdTZXJ2aWNlLmdldEFjdGl2YXRlZFJvdXRlQ29uZmlnKHtcbiAgICogICAgIHJvdXRlVGFnczogWydkZWZhdWx0VGFnJ10sXG4gICAqICAgICB0aXRsZTogJ0RlZmF1bHQgVGl0bGUnLFxuICAgKiAgIH0pO1xuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSB0aGUgZGVmYXVsdCB2YWx1ZSB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCwgaXQgYWxsb3dzIG92ZXJyaWRpbmcgdGhlIGluamVjdGVkIGRlZmF1bHQgdmFsdWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPFBhcnRpYWw8Qz4+XG4gICAqL1xuICBnZXRBY3RpdmF0ZWRSb3V0ZUNvbmZpZzxcbiAgICBDIGV4dGVuZHMgUm91dGVEYXRhPENvbmZpZ1BhcmFtc05hbWVzLCBSb3V0ZVRhZ3M+ID0gUm91dGVEYXRhPENvbmZpZ1BhcmFtc05hbWVzLCBSb3V0ZVRhZ3M+XG4gID4oZGVmYXVsdFZhbHVlOiBQYXJ0aWFsPEM+ID0ge30pOiBPYnNlcnZhYmxlPFBhcnRpYWw8Qz4+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIEFjdGl2YXRpb25FbmQpLFxuICAgICAgbWFwKCgpID0+IHRoaXMuYWN0aXZhdGVkUm91dGUpLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuYWN0aXZhdGVkUm91dGUpLFxuICAgICAgbWFwKGdhdGhlclJvdXRlcyksXG4gICAgICBzd2l0Y2hNYXAoKHJvdXRlcykgPT5cbiAgICAgICAgY29tYmluZUxhdGVzdChyb3V0ZXMubWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpLnBpcGUoXG4gICAgICAgICAgbWFwKChkYXRhQXJyKSA9PiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmluamVjdGVkRGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWUsIC4uLmRhdGFBcnIpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zdGhlIGFuIE9ic2VydmFibGUgd2l0aCBjdXJyZW50IHJvdXRlJ3MgcHJvcGVydHkgdmFsdWVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAqICAgdGFncyQgPSB0aGlzLnJvdXRlQ29uZmlnU2VydmljZS5nZXRMZWFmQ29uZmlnKCdyb3V0ZVRhZ3MnLCBbJ25vIHRhZ3MnXSk7XG4gICAqIH1cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtTmFtZSAtIHRoZSBwYXJhbWV0ZXIgbmFtZSBmcm9tIHRoZSByb3V0ZSBjb25maWcgdG8gYmUgcmV0dXJuZWRcbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIHRoZSBkZWZhdWx0IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLCBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnRcbiAgICovXG4gIGdldExlYWZDb25maWcocGFyYW1OYW1lOiAncm91dGVUYWdzJywgZGVmYXVsdFZhbHVlPzogUm91dGVUYWdzW10pOiBPYnNlcnZhYmxlPFJvdXRlVGFnc1tdPjtcbiAgZ2V0TGVhZkNvbmZpZzxUPihwYXJhbU5hbWU6IENvbmZpZ1BhcmFtc05hbWVzLCBkZWZhdWx0VmFsdWU/OiBUKTogT2JzZXJ2YWJsZTxUPjtcbiAgZ2V0TGVhZkNvbmZpZzxUID0gdW5rbm93bj4oXG4gICAgcGFyYW1OYW1lOiBSb3V0ZURhdGFQYXJhbTxDb25maWdQYXJhbXNOYW1lcz4sXG4gICAgZGVmYXVsdFZhbHVlPzogVFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmF0ZWRSb3V0ZUNvbmZpZyhcbiAgICAgIGRlZmF1bHRWYWx1ZVxuICAgICAgICA/ICh7XG4gICAgICAgICAgICBbcGFyYW1OYW1lXTogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICA6IHt9XG4gICAgKS5waXBlKG1hcCgoZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gZGF0YVtwYXJhbU5hbWVdIHx8IGRlZmF1bHRWYWx1ZSkpO1xuICB9XG59XG4iXX0=