mirror of https://github.com/hashicorp/consul
80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
|
import Controller from '@ember/controller';
|
||
|
import { inject as service } from '@ember/service';
|
||
|
import { get, set } from '@ember/object';
|
||
|
export default Controller.extend({
|
||
|
dom: service('dom'),
|
||
|
builder: service('form'),
|
||
|
isScoped: false,
|
||
|
init: function() {
|
||
|
this._super(...arguments);
|
||
|
this.form = get(this, 'builder').form('token');
|
||
|
},
|
||
|
setProperties: function(model) {
|
||
|
// essentially this replaces the data with changesets
|
||
|
this._super(
|
||
|
Object.keys(model).reduce((prev, key, i) => {
|
||
|
switch (key) {
|
||
|
case 'item':
|
||
|
prev[key] = this.form.setData(prev[key]).getData();
|
||
|
break;
|
||
|
case 'policy':
|
||
|
prev[key] = this.form
|
||
|
.form(key)
|
||
|
.setData(prev[key])
|
||
|
.getData();
|
||
|
break;
|
||
|
}
|
||
|
return prev;
|
||
|
}, model)
|
||
|
);
|
||
|
},
|
||
|
actions: {
|
||
|
sendClearPolicy: function(item) {
|
||
|
set(this, 'isScoped', false);
|
||
|
this.send('clearPolicy');
|
||
|
},
|
||
|
sendCreatePolicy: function(item, policies, success) {
|
||
|
this.send('createPolicy', item, policies, success);
|
||
|
},
|
||
|
refreshCodeEditor: function(selector, parent) {
|
||
|
if (parent.target) {
|
||
|
parent = undefined;
|
||
|
}
|
||
|
get(this, 'dom')
|
||
|
.component(selector, parent)
|
||
|
.didAppear();
|
||
|
},
|
||
|
change: function(e, value, item) {
|
||
|
const form = get(this, 'form');
|
||
|
const event = get(this, 'dom').normalizeEvent(e, value);
|
||
|
try {
|
||
|
form.handleEvent(event);
|
||
|
} catch (err) {
|
||
|
const target = event.target;
|
||
|
switch (target.name) {
|
||
|
case 'policy[isScoped]':
|
||
|
set(this, 'isScoped', !get(this, 'isScoped'));
|
||
|
set(this.policy, 'Datacenters', null);
|
||
|
break;
|
||
|
case 'Policy':
|
||
|
set(value, 'CreateTime', new Date().getTime());
|
||
|
get(this, 'item.Policies').pushObject(value);
|
||
|
break;
|
||
|
case 'Details':
|
||
|
// the Details expander toggle
|
||
|
// only load on opening
|
||
|
if (target.checked) {
|
||
|
this.send('refreshCodeEditor', '.code-editor', target.parentNode);
|
||
|
if (!get(value, 'Rules')) {
|
||
|
this.send('loadPolicy', value, get(this, 'item.Policies'));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
throw err;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
});
|