68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
|
import Ember from 'ember';
|
||
|
import KVObject from 'vault/lib/kv-object';
|
||
|
|
||
|
const { assert, Component, computed, guidFor } = Ember;
|
||
|
|
||
|
export default Component.extend({
|
||
|
'data-test-component': 'kv-object-editor',
|
||
|
classNames: ['field', 'form-section'],
|
||
|
// public API
|
||
|
// Ember Object to mutate
|
||
|
value: null,
|
||
|
label: null,
|
||
|
helpText: null,
|
||
|
// onChange will be called with the changed Value
|
||
|
onChange() {},
|
||
|
|
||
|
init() {
|
||
|
this._super(...arguments);
|
||
|
const data = KVObject.create({ content: [] }).fromJSON(this.get('value'));
|
||
|
this.set('kvData', data);
|
||
|
this.addRow();
|
||
|
},
|
||
|
|
||
|
kvData: null,
|
||
|
|
||
|
kvDataAsJSON: computed('kvData', 'kvData.[]', function() {
|
||
|
return this.get('kvData').toJSON();
|
||
|
}),
|
||
|
|
||
|
kvDataIsAdvanced: computed('kvData', 'kvData.[]', function() {
|
||
|
return this.get('kvData').isAdvanced();
|
||
|
}),
|
||
|
|
||
|
kvHasDuplicateKeys: computed('kvData', 'kvData.@each.name', function() {
|
||
|
let data = this.get('kvData');
|
||
|
return data.uniqBy('name').length !== data.get('length');
|
||
|
}),
|
||
|
|
||
|
addRow() {
|
||
|
let data = this.get('kvData');
|
||
|
let newObj = { name: '', value: '' };
|
||
|
if (!Ember.isNone(data.findBy('name', ''))) {
|
||
|
return;
|
||
|
}
|
||
|
guidFor(newObj);
|
||
|
data.addObject(newObj);
|
||
|
},
|
||
|
actions: {
|
||
|
addRow() {
|
||
|
this.addRow();
|
||
|
},
|
||
|
|
||
|
updateRow() {
|
||
|
let data = this.get('kvData');
|
||
|
this.get('onChange')(data.toJSON());
|
||
|
},
|
||
|
|
||
|
deleteRow(object, index) {
|
||
|
let data = this.get('kvData');
|
||
|
let oldObj = data.objectAt(index);
|
||
|
|
||
|
assert('object guids match', guidFor(oldObj) === guidFor(object));
|
||
|
data.removeAt(index);
|
||
|
this.get('onChange')(data.toJSON());
|
||
|
},
|
||
|
},
|
||
|
});
|