69 lines
1.9 KiB
JavaScript
69 lines
1.9 KiB
JavaScript
import Route from 'consul-ui/routing/route';
|
|
import { inject as service } from '@ember/service';
|
|
import { get, action } from '@ember/object';
|
|
|
|
export default class SettingsRoute extends Route {
|
|
@service('client/http') client;
|
|
|
|
@service('settings') repo;
|
|
@service('repository/dc') dcRepo;
|
|
@service('repository/permission') permissionsRepo;
|
|
@service('repository/nspace/disabled') nspacesRepo;
|
|
|
|
async model(params) {
|
|
// reach up and grab things from the application route/controller
|
|
const app = this.controllerFor('application');
|
|
|
|
// figure out if we have anything missing for menus etc and get them if
|
|
// so, otherwise just use what they already are
|
|
const [item, dc] = await Promise.all([
|
|
this.repo.findAll(),
|
|
typeof app.dc === 'undefined' ? this.dcRepo.getActive() : app.dc,
|
|
]);
|
|
const nspace =
|
|
typeof app.nspace === 'undefined'
|
|
? await this.nspacesRepo.getActive(item.nspace)
|
|
: app.nspace;
|
|
const permissions =
|
|
typeof app.permissions === 'undefined'
|
|
? await this.permissionsRepo.findAll({
|
|
dc: dc.Name,
|
|
ns: nspace.Name,
|
|
})
|
|
: app.permissions;
|
|
|
|
// reset the things higher up in the application if they were already set
|
|
// this won't do anything
|
|
this.controllerFor('application').setProperties({
|
|
dc: dc,
|
|
nspace: nspace,
|
|
token: item.token,
|
|
permissions: permissions,
|
|
});
|
|
|
|
if (typeof get(item, 'client.blocking') === 'undefined') {
|
|
item.client = { blocking: true };
|
|
}
|
|
return { item };
|
|
}
|
|
|
|
setupController(controller, model) {
|
|
super.setupController(...arguments);
|
|
controller.setProperties(model);
|
|
}
|
|
|
|
@action
|
|
update(slug, item) {
|
|
switch (slug) {
|
|
case 'client':
|
|
if (!get(item, 'client.blocking')) {
|
|
this.client.abort();
|
|
}
|
|
break;
|
|
}
|
|
this.repo.persist({
|
|
[slug]: item,
|
|
});
|
|
}
|
|
}
|