diff --git a/ui/app/components/navigate-input.js b/ui/app/components/navigate-input.js index 9a45016bf97a..b32ad6b4c2ef 100644 --- a/ui/app/components/navigate-input.js +++ b/ui/app/components/navigate-input.js @@ -61,7 +61,7 @@ export default Component.extend(FocusOnInsertMixin, { return `cert/${key}`; }, onEnter: function(val) { - let { filter, baseKey, mode } = this; + let { baseKey, mode } = this; let extraParams = this.get('extraNavParams'); if (mode.startsWith('secrets') && (!val || val === baseKey)) { return; diff --git a/ui/app/services/router.js b/ui/app/services/router.js index 9f31237d2449..745c2bfb8757 100644 --- a/ui/app/services/router.js +++ b/ui/app/services/router.js @@ -1,6 +1,43 @@ import Service from '@ember/service'; import { inject as service } from '@ember/service'; import { alias } from '@ember/object/computed'; +export function extractRouteArgs(args) { + args = args.slice(); + let possibleQueryParams = args[args.length - 1]; + + let queryParams; + if (possibleQueryParams && possibleQueryParams.hasOwnProperty('queryParams')) { + queryParams = args.pop().queryParams; + } else { + queryParams = {}; + } + + let routeName = args.shift(); + + return { routeName, models: args, queryParams }; +} +//https://github.com/emberjs/ember.js/blob/abf753a3d494830dc9e95b1337b3654b671b11be/packages/ember-routing/lib/utils.js#L210 +export function shallowEqual(a, b) { + let k; + let aCount = 0; + let bCount = 0; + for (k in a) { + if (a.hasOwnProperty(k)) { + if (a[k] !== b[k]) { + return false; + } + aCount++; + } + } + + for (k in b) { + if (b.hasOwnProperty(k)) { + bCount++; + } + } + + return aCount === bCount; +} export default Service.extend({ routing: service('-routing'), @@ -20,4 +57,24 @@ export default Service.extend({ currentURL: alias('router.currentURL'), currentRouteName: alias('router.currentRouteName'), rootURL: alias('router.rootURL'), + location: alias('router.location'), + + //adapted from: + // https://github.com/emberjs/ember.js/blob/abf753a3d494830dc9e95b1337b3654b671b11be/packages/ember-routing/lib/services/router.js#L220 + isActive(...args) { + let { routeName, models, queryParams } = extractRouteArgs(args); + let routerMicrolib = this.router._routerMicrolib; + + if (!routerMicrolib.isActiveIntent(routeName, models, null)) { + return false; + } + let hasQueryParams = Object.keys(queryParams).length > 0; + + if (hasQueryParams) { + this.router._prepareQueryParams(routeName, models, queryParams, true /* fromRouterService */); + return shallowEqual(queryParams, routerMicrolib.state.queryParams); + } + + return true; + }, });