consul/ui-v2/app/components/consul-intention-permission.../index.js

86 lines
2.3 KiB
JavaScript

import Component from '@ember/component';
import { get, set, computed } from '@ember/object';
import { alias, equal, not } from '@ember/object/computed';
import { inject as service } from '@ember/service';
const name = 'intention-permission-http-header';
export default Component.extend({
tagName: '',
name: name,
schema: service('schema'),
change: service('change'),
repo: service(`repository/${name}`),
onsubmit: function() {},
onreset: function() {},
changeset: computed('item', function() {
return this.change.changesetFor(
name,
this.item ||
this.repo.create({
HeaderType: this.headerTypes.firstObject,
})
);
}),
headerTypes: alias(`schema.${name}.HeaderType.allowedValues`),
headerLabels: computed(function() {
return {
Exact: 'Exactly Matching',
Prefix: 'Prefixed by',
Suffix: 'Suffixed by',
Regex: 'Regular Expression',
Present: 'Is present',
};
}),
headerType: computed('changeset.HeaderType', 'headerTypes.firstObject', function() {
return this.changeset.HeaderType || this.headerTypes.firstObject;
}),
headerTypeEqualsPresent: equal('headerType', 'Present'),
shouldShowValueField: not('headerTypeEqualsPresent'),
actions: {
change: function(name, changeset, e) {
const value = typeof get(e, 'target.value') !== 'undefined' ? e.target.value : e;
switch (name) {
default:
changeset.set(name, value);
}
changeset.validate();
},
submit: function(changeset) {
this.headerTypes.forEach(prop => {
changeset.set(prop, undefined);
});
// Present is a boolean, whereas all other header types have a value
const value = changeset.HeaderType === 'Present' ? true : changeset.Value;
changeset.set(changeset.HeaderType, value);
// this will prevent the changeset from overwriting the
// computed properties on the ED object
delete changeset._changes.HeaderType;
delete changeset._changes.Value;
//
this.repo.persist(changeset);
this.onsubmit(changeset.data);
set(
this,
'item',
this.repo.create({
HeaderType: this.headerType,
})
);
},
reset: function(changeset, e) {
changeset.rollback();
},
},
});