mirror of https://github.com/rancher/ui.git
72 lines
1.6 KiB
JavaScript
72 lines
1.6 KiB
JavaScript
import Component from '@ember/component';
|
|
import { observer } from '@ember/object'
|
|
import layout from './template';
|
|
|
|
export default Component.extend({
|
|
layout,
|
|
|
|
title: null,
|
|
rules: null,
|
|
ruleArray: null,
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
this.initRuleArray();
|
|
},
|
|
|
|
actions: {
|
|
addRule(custom) {
|
|
const newRule = custom ? { custom: '' } : {
|
|
key: '',
|
|
operator: '=',
|
|
value: ''
|
|
};
|
|
|
|
this.get('ruleArray').pushObject(newRule);
|
|
},
|
|
|
|
removeRule(rule) {
|
|
this.get('ruleArray').removeObject(rule);
|
|
},
|
|
},
|
|
|
|
inputChanged: observer('ruleArray.@each.{key,value,operator,custom}', function() {
|
|
this.set('rules', this.get('ruleArray')
|
|
.filter((r) => this.isRuleValid(r))
|
|
.map((r) => this.convertRule(r)));
|
|
}),
|
|
|
|
initRuleArray() {
|
|
const rules = this.get('rules') || [];
|
|
const ruleArray = rules.map((rule) => ({ custom: rule, }));
|
|
|
|
this.set('ruleArray', ruleArray);
|
|
},
|
|
|
|
isRuleValid(rule) {
|
|
if (rule.operator === 'Exists' || rule.operator === 'DoesNotExist') {
|
|
return rule.key;
|
|
} else {
|
|
return rule.custom || (rule.value && rule.key && rule.operator);
|
|
}
|
|
},
|
|
|
|
convertRule(rule) {
|
|
if (rule.custom) {
|
|
return rule.custom;
|
|
}
|
|
switch (rule.operator) {
|
|
case 'Exists':
|
|
return rule.key;
|
|
case 'DoesNotExist':
|
|
return `!${ rule.key }`;
|
|
case 'In':
|
|
return `${ rule.key } in (${ rule.value })`;
|
|
case 'NotIn':
|
|
return `${ rule.key } notin (${ rule.value })`;
|
|
default:
|
|
return `${ rule.key } ${ rule.operator } ${ rule.value }`;
|
|
}
|
|
},
|
|
})
|