mirror of https://github.com/rancher/ui.git
103 lines
2.4 KiB
JavaScript
103 lines
2.4 KiB
JavaScript
import { on } from '@ember/object/evented';
|
|
import { next, debounce } from '@ember/runloop';
|
|
import Component from '@ember/component';
|
|
import { get, set, observer } from '@ember/object'
|
|
import layout from './template';
|
|
import C from 'shared/utils/constants';
|
|
import $ from 'jquery';
|
|
|
|
const EXISTS = 'Exists'
|
|
const DOES_NOT_EXISTS = 'DoesNotExist';
|
|
|
|
export default Component.extend({
|
|
layout,
|
|
// Inputs
|
|
initialArray: null,
|
|
editing: true,
|
|
addActionLabel: 'formMatchExpressions.addAction',
|
|
keyLabel: 'formMatchExpressions.key.label',
|
|
valueLabel: 'formMatchExpressions.value.label',
|
|
keyPlaceholder: 'formMatchExpressions.key.placeholder',
|
|
valuePlaceholder: 'formMatchExpressions.value.placeholder',
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
const ary = [];
|
|
|
|
if ( get(this, 'initialArray') ) {
|
|
get(this, 'initialArray').forEach((line) => {
|
|
ary.push({
|
|
key: get(line, 'key'),
|
|
operator: get(line, 'operator'),
|
|
values: (get(line, 'values') || []).join(',')
|
|
});
|
|
});
|
|
}
|
|
|
|
set(this, 'ary', ary);
|
|
},
|
|
|
|
actions: {
|
|
add() {
|
|
let ary = get(this, 'ary');
|
|
|
|
ary.pushObject({
|
|
key: '',
|
|
operator: EXISTS,
|
|
});
|
|
|
|
next(() => {
|
|
if ( this.isDestroyed || this.isDestroying ) {
|
|
return;
|
|
}
|
|
|
|
let elem = $('INPUT.key').last()[0];
|
|
|
|
if ( elem ) {
|
|
elem.focus();
|
|
}
|
|
});
|
|
},
|
|
|
|
remove(obj) {
|
|
get(this, 'ary').removeObject(obj);
|
|
},
|
|
},
|
|
|
|
aryObserver: on('init', observer('ary.@each.{key,operator,values}', function() {
|
|
debounce(this, 'fireChanged', 100);
|
|
})),
|
|
|
|
operatorChoices: C.VOLUME_NODE_SELECTOR_OPERATOR,
|
|
|
|
fireChanged() {
|
|
if ( this.isDestroyed || this.isDestroying ) {
|
|
return;
|
|
}
|
|
|
|
let arr = [];
|
|
|
|
get(this, 'ary').forEach((row) => {
|
|
if ( [EXISTS, DOES_NOT_EXISTS].indexOf(get(row, 'operator')) > -1 ) {
|
|
arr.pushObject({
|
|
key: get(row, 'key'),
|
|
operator: get(row, 'operator'),
|
|
})
|
|
} else {
|
|
if ( get(row, 'values') ) {
|
|
arr.pushObject({
|
|
key: get(row, 'key'),
|
|
operator: get(row, 'operator'),
|
|
values: get(row, 'values').split(',') || []
|
|
})
|
|
}
|
|
}
|
|
});
|
|
|
|
next(() => {
|
|
this.sendAction('changed', arr);
|
|
});
|
|
},
|
|
});
|