@this-dot/route-config
Version:
A library containing directives and services for configuring components via Route's routeData property
64 lines • 10.7 kB
JavaScript
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=