ui/lib/pipeline/addon/components/pipeline-selector/component.js

81 lines
1.7 KiB
JavaScript

import Component from '@ember/component';
import { observer, get, set } from '@ember/object'
import layout from './template';
function populateRule(out, type, field, value) {
if ( out[type] && out[type][field] ) {
if ( out[type][field].indexOf(value) === -1 ) {
out[type][field].push(value);
}
} else {
if ( !out[type] ) {
out[type] = {};
}
out[type][field] = [value];
}
}
export default Component.extend({
layout,
type: null,
config: null,
isInclude: null,
ruleArray: null,
init() {
this._super(...arguments);
this.initRuleArray();
},
actions: {
addRule() {
const newRule = {
key: 'branch',
value: ''
};
get(this, 'ruleArray').pushObject(newRule);
},
removeRule(rule) {
get(this, 'ruleArray').removeObject(rule);
},
},
inputChanged: observer('ruleArray.@each.{key,value}', function() {
const ruleArray = get(this, 'ruleArray').filter((r) => r.value && r.key) || [];
const out = {};
ruleArray.forEach((rule) => {
if ( get(this, 'isInclude') ) {
populateRule(out, rule.key, 'include', rule.value)
} else {
populateRule(out, rule.key, 'exclude', rule.value)
}
});
set(this, 'config', out);
}),
initRuleArray() {
const ruleArray = [];
const key = get(this, 'isInclude') ? 'include' : 'exclude';
(get(this, `config.branch.${ key }`) || []).forEach((v) => {
ruleArray.push({
key: 'branch',
value: v,
});
});
(get(this, `config.event.${ key }`) || []).forEach((v) => {
ruleArray.push({
key: 'event',
value: v,
});
});
set(this, 'ruleArray', ruleArray);
},
})