From 7b147c7b643bb9b9399312c2a84195022c171d4c Mon Sep 17 00:00:00 2001 From: John Cowen Date: Mon, 19 Oct 2020 17:30:30 +0100 Subject: [PATCH] ui: Prefer using a base route class instead of reopening routes (#8965) * Delete old controller lifecycle things we con't use anymore * Move route url decoding to our custom route class instead of reopening --- .../app/initializers/controller-lifecycle.js | 23 ------------ .../initializers/route-urldecode-params.js | 32 ---------------- ui-v2/app/routing/route.js | 37 +++++++++++++++++-- 3 files changed, 33 insertions(+), 59 deletions(-) delete mode 100644 ui-v2/app/initializers/controller-lifecycle.js delete mode 100644 ui-v2/app/initializers/route-urldecode-params.js diff --git a/ui-v2/app/initializers/controller-lifecycle.js b/ui-v2/app/initializers/controller-lifecycle.js deleted file mode 100644 index bdfee585b..000000000 --- a/ui-v2/app/initializers/controller-lifecycle.js +++ /dev/null @@ -1,23 +0,0 @@ -import Route from '@ember/routing/route'; -/** - * This initializer is very similar to: - * https://github.com/kellyselden/ember-controller-lifecycle - * - * Why is this included here: - * 1. Make sure lifecycle functions are functions, not just truthy. - * 2. Right now we don't want a setup function (at least until we are definitely decided that we want one) - * This is possibly a very personal opinion so it makes sense to just include this file here. - */ -Route.reopen({ - resetController(controller, exiting, transition) { - this._super(...arguments); - if (typeof controller.reset === 'function') { - controller.reset(exiting); - } - }, -}); -export function initialize() {} - -export default { - initialize, -}; diff --git a/ui-v2/app/initializers/route-urldecode-params.js b/ui-v2/app/initializers/route-urldecode-params.js deleted file mode 100644 index 65c580a2b..000000000 --- a/ui-v2/app/initializers/route-urldecode-params.js +++ /dev/null @@ -1,32 +0,0 @@ -import Route from '@ember/routing/route'; -import { routes } from 'consul-ui/router'; -import wildcard from 'consul-ui/utils/routing/wildcard'; -const isWildcard = wildcard(routes); -/** - * This initializer adds urldecoding to the `params` passed into - * ember `model` hooks, plus of course anywhere else where `paramsFor` - * is used. This means the entire ember app is now changed so that all - * paramsFor calls returns urldecoded params instead of raw ones - */ -Route.reopen({ - paramsFor: function() { - const params = this._super(...arguments); - if (isWildcard(this.routeName)) { - return Object.keys(params).reduce(function(prev, item) { - if (typeof params[item] !== 'undefined') { - prev[item] = decodeURIComponent(params[item]); - } else { - prev[item] = params[item]; - } - return prev; - }, {}); - } else { - return params; - } - }, -}); -export function initialize() {} - -export default { - initialize, -}; diff --git a/ui-v2/app/routing/route.js b/ui-v2/app/routing/route.js index f6c3d730c..c9d06b279 100644 --- a/ui-v2/app/routing/route.js +++ b/ui-v2/app/routing/route.js @@ -1,15 +1,44 @@ import Route from '@ember/routing/route'; import { setProperties } from '@ember/object'; -/** - * Set the routeName for the controller so that it is - * available in the template for the route/controller - */ +// paramsFor +import { routes } from 'consul-ui/router'; +import wildcard from 'consul-ui/utils/routing/wildcard'; +const isWildcard = wildcard(routes); + export default class BaseRoute extends Route { + /** + * Set the routeName for the controller so that it is available in the template + * for the route/controller.. This is mainly used to give a route name to the + * Outlet component + */ setupController(controller, model) { setProperties(controller, { routeName: this.routeName, }); super.setupController(...arguments); } + /** + * Adds urldecoding to any wildcard route `params` passed into ember `model` + * hooks, plus of course anywhere else where `paramsFor` is used. This means + * the entire ember app is now changed so that all paramsFor calls returns + * urldecoded params instead of raw ones. + * For example we use this largely for URLs for the KV store: + * /kv/*key > /ui/kv/%25-kv-name/%25-here > key = '%-kv-name/%-here' + */ + paramsFor(name) { + const params = super.paramsFor(...arguments); + if (isWildcard(this.routeName)) { + return Object.keys(params).reduce(function(prev, item) { + if (typeof params[item] !== 'undefined') { + prev[item] = decodeURIComponent(params[item]); + } else { + prev[item] = params[item]; + } + return prev; + }, {}); + } else { + return params; + } + } }