62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
import Route from '@ember/routing/route';
|
|
import { config } from 'consul-ui/env';
|
|
|
|
import { routes } from 'consul-ui/router';
|
|
import flat from 'flat';
|
|
|
|
let initialize = function() {};
|
|
Route.reopen(
|
|
['modelFor', 'transitionTo', 'replaceWith', 'paramsFor'].reduce(function(prev, item) {
|
|
prev[item] = function(routeName, ...rest) {
|
|
const isNspaced = this.routeName.startsWith('nspace.');
|
|
if (routeName === 'nspace') {
|
|
if (isNspaced || this.routeName === 'nspace') {
|
|
return this._super(...arguments);
|
|
} else {
|
|
return {
|
|
nspace: '~',
|
|
};
|
|
}
|
|
}
|
|
if (isNspaced && routeName.startsWith('dc')) {
|
|
return this._super(...[`nspace.${routeName}`, ...rest]);
|
|
}
|
|
return this._super(...arguments);
|
|
};
|
|
return prev;
|
|
}, {})
|
|
);
|
|
if (config('CONSUL_NSPACES_ENABLED')) {
|
|
const dotRe = /\./g;
|
|
initialize = function(container) {
|
|
const all = Object.keys(flat(routes))
|
|
.filter(function(item) {
|
|
return item.startsWith('dc');
|
|
})
|
|
.map(function(item) {
|
|
return item.replace('._options.path', '').replace(dotRe, '/');
|
|
});
|
|
all.forEach(function(item) {
|
|
let route = container.resolveRegistration(`route:${item}`);
|
|
if (!route) {
|
|
item = `${item}/index`;
|
|
route = container.resolveRegistration(`route:${item}`);
|
|
}
|
|
route.reopen({
|
|
templateName: item
|
|
.replace('/root-create', '/create')
|
|
.replace('/create', '/edit')
|
|
.replace('/folder', '/index'),
|
|
});
|
|
container.register(`route:nspace/${item}`, route);
|
|
const controller = container.resolveRegistration(`controller:${item}`);
|
|
if (controller) {
|
|
container.register(`controller:nspace/${item}`, controller);
|
|
}
|
|
});
|
|
};
|
|
}
|
|
export default {
|
|
initialize,
|
|
};
|