mirror of https://github.com/rancher/ui.git
77 lines
1.7 KiB
JavaScript
77 lines
1.7 KiB
JavaScript
import { get, set, observer } from '@ember/object'
|
|
import Component from '@ember/component';
|
|
import layout from './template';
|
|
import C from 'shared/utils/constants';
|
|
|
|
export default Component.extend({
|
|
layout,
|
|
|
|
term: null,
|
|
|
|
initialRules: null,
|
|
ruleArray: null,
|
|
editing: true,
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
this.initRuleArray();
|
|
},
|
|
|
|
didInsertElement() {
|
|
if (get(this, 'ruleArray.length') === 0 && get(this, 'initialRules') !== false) {
|
|
this.send('addRule');
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
addRule() {
|
|
get(this, 'ruleArray').pushObject({ operator: 'In' });
|
|
},
|
|
|
|
removeRule(rule) {
|
|
get(this, 'ruleArray').removeObject(rule);
|
|
}
|
|
},
|
|
|
|
ruleChanged: observer('ruleArray.@each.{key,operator,values}', function() {
|
|
set(this, 'term.matchExpressions',
|
|
(get(this, 'ruleArray') || [])
|
|
.filter((rule) => {
|
|
if (rule.operator === 'In' || rule.operator === 'NotIn' ) {
|
|
return rule.values;
|
|
}
|
|
|
|
return rule.key;
|
|
})
|
|
.map((rule) => {
|
|
const out = {
|
|
key: rule.key,
|
|
operator: rule.operator,
|
|
};
|
|
|
|
if (rule.operator === 'In' || rule.operator === 'NotIn' ) {
|
|
out.values = rule.values.split(',');
|
|
}
|
|
|
|
return out;
|
|
}));
|
|
}),
|
|
|
|
operatorChoices: C.VOLUME_NODE_SELECTOR_OPERATOR,
|
|
|
|
initRuleArray() {
|
|
const ruleArray = [];
|
|
|
|
(get(this, 'term.matchExpressions') || []).forEach((requirement) => {
|
|
ruleArray.push({
|
|
key: requirement.key,
|
|
operator: requirement.operator,
|
|
values: (requirement.values || []).join(',')
|
|
});
|
|
});
|
|
|
|
set(this, 'ruleArray', ruleArray);
|
|
},
|
|
|
|
});
|