ngx-named-routes
Version:
Add named routes to your angular 7 projects
135 lines (130 loc) • 4.49 kB
JavaScript
import { Injectable, defineInjectable, inject } from '@angular/core';
import { Router } from '@angular/router';
import { cloneDeep } from 'lodash';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class NgxNamedRoutesService {
/**
* @param {?} __router
*/
constructor(__router) {
this.__router = __router;
this.counter = 0;
this.__named_routes = {};
}
/**
* @param {?=} child_route
* @return {?}
*/
loadRoutes(child_route) {
this.counter++;
/** @type {?} */
let routes = [];
routes = child_route ? child_route.routes : cloneDeep(this.__router.config);
for (let route of routes) {
/** @type {?} */
let backslash_required;
if (child_route && ['', '/'].indexOf(child_route.parent_path) === -1) {
backslash_required = child_route.parent_path[0] === '/' ? '' : '/';
route.path = backslash_required + child_route.parent_path + (route.path !== '' ? '/' + route.path : '');
}
else {
backslash_required = route.path[0] === '/' && route.path !== '' ? '' : '/';
route.path = backslash_required + route.path;
}
if (route.name && !this.__named_routes[route.name]) {
this.__named_routes[route.name] = Object.assign({}, route);
}
if (route.children) {
this.loadRoutes({ routes: route.children, parent_path: route.path });
}
if (route._loadedConfig) {
this.loadRoutes({ routes: route._loadedConfig.routes, parent_path: route.path });
}
}
return this.__named_routes;
}
/**
* @param {?} name
* @param {?=} param_values
* @return {?}
*/
getRoute(name, param_values) {
// TODO: si no existe el nombre, llamar nuevamente a loadRoutes, porque el módulo puede haber sido cargado perezosamente
// need preloading strategy PreloadAllModules
/** @type {?} */
let raw_route;
if (!this.__named_routes[name]) {
this.loadRoutes();
if (!this.__named_routes[name]) {
throw new Error(`La ruta ${name} no existe o el módulo que la define aún no ha sido cargado.`);
}
raw_route = this.__named_routes[name].path;
if (raw_route) {
return this.fillRouteParams(raw_route, param_values);
}
}
else {
raw_route = this.__named_routes[name].path;
return this.fillRouteParams(raw_route, param_values);
}
}
/**
* @return {?}
*/
getNamedRoutes() {
if (Object.keys(this.__named_routes).length === 0) {
this.loadRoutes();
}
return this.__named_routes;
}
/**
* @param {?} name
* @return {?}
*/
getNamedRoute(name) {
if (Object.keys(this.__named_routes).length === 0) {
this.loadRoutes();
}
return this.__named_routes[name];
}
/**
* @private
* @param {?} raw_route
* @param {?=} param_values
* @return {?}
*/
fillRouteParams(raw_route, param_values) {
if (!param_values || param_values === {}) {
return raw_route;
}
/** @type {?} */
let route = raw_route;
for (let param_key in param_values) {
route = route.replace(':' + param_key, param_values[param_key]);
}
return route;
}
}
NgxNamedRoutesService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
NgxNamedRoutesService.ctorParameters = () => [
{ type: Router }
];
/** @nocollapse */ NgxNamedRoutesService.ngInjectableDef = defineInjectable({ factory: function NgxNamedRoutesService_Factory() { return new NgxNamedRoutesService(inject(Router)); }, token: NgxNamedRoutesService, providedIn: "root" });
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { NgxNamedRoutesService };
//# sourceMappingURL=ngx-named-routes.js.map