open-consul/ui/packages/consul-ui/app/utils/routing/transitionable.js
John Cowen 7083c39b96
ui: Support Route optional parameters/segments (#10212)
Moves our URLs with 'optional namespace segment' into a separately abstracted 'optional URL segment' feature
2021-05-26 17:43:46 +01:00

32 lines
983 B
JavaScript

const filter = function(routeName, atts, params) {
return [routeName, ...atts];
};
const replaceRouteParams = function(route, params = {}) {
return (route.paramNames || [])
.map(function(item) {
if (typeof params[item] !== 'undefined') {
return params[item];
}
return route.params[item];
})
.reverse();
};
export default function(route, params = {}, container) {
if (route === null) {
route = container.lookup('route:application');
}
let atts = replaceRouteParams(route, params);
// walk up the entire route/s replacing any instances
// of the specified params with the values specified
let current = route;
let parent;
while ((parent = current.parent)) {
atts = atts.concat(replaceRouteParams(parent, params));
current = parent;
}
// Reverse atts here so it doesn't get confusing whilst debugging
// (.reverse is destructive)
atts.reverse();
return filter(route.name || 'application', atts, params);
}