86 lines
2.3 KiB
JavaScript
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();
|
|
},
|
|
},
|
|
});
|