import Helper from '@ember/component/helper'; import { inject as service } from '@ember/service'; import { hrefTo } from 'consul-ui/helpers/href-to'; const getRouteParams = function(route, params = {}) { return route.paramNames.map(function(item) { if (typeof params[item] !== 'undefined') { return params[item]; } return route.params[item]; }); }; export default Helper.extend({ router: service('router'), compute([params], hash) { let current = this.router.currentRoute; let parent; let atts = getRouteParams(current, params); // walk up the entire route/s replacing any instances // of the specified params with the values specified while ((parent = current.parent)) { atts = atts.concat(getRouteParams(parent, params)); current = parent; } let route = this.router.currentRouteName; // TODO: this is specific to consul/nspaces // 'ideally' we could try and do this elsewhere // not super important though. // This will turn an URL that has no nspace (/ui/dc-1/nodes) into one // that does have a namespace (/ui/~nspace/dc-1/nodes) if you href-mut with // a nspace parameter if (typeof params.nspace !== 'undefined' && route.startsWith('dc.')) { route = `nspace.${route}`; atts.push(params.nspace); } // return hrefTo(this, this.router, [route, ...atts.reverse()], hash); }, });