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
This commit is contained in:
John Cowen 2020-10-19 17:30:30 +01:00 committed by GitHub
parent 0d23c9f8cc
commit 7b147c7b64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 59 deletions

View File

@ -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,
};

View File

@ -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,
};

View File

@ -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;
}
}
}