]> git.proxmox.com Git - proxmox-widget-toolkit.git/blob - form/KVComboBox.js
use eslint and execute as check target
[proxmox-widget-toolkit.git] / form / KVComboBox.js
1 /* Key-Value ComboBox
2 *
3 * config properties:
4 * comboItems: an array of Key - Value pairs
5 * deleteEmpty: if set to true (default), an empty value received from the
6 * comboBox will reset the property to its default value
7 */
8 Ext.define('Proxmox.form.KVComboBox', {
9 extend: 'Ext.form.field.ComboBox',
10 alias: 'widget.proxmoxKVComboBox',
11
12 config: {
13 deleteEmpty: true,
14 },
15
16 comboItems: undefined,
17 displayField: 'value',
18 valueField: 'key',
19 queryMode: 'local',
20
21 // overide framework function to implement deleteEmpty behaviour
22 getSubmitData: function() {
23 let me = this,
24 data = null,
25 val;
26 if (!me.disabled && me.submitValue) {
27 val = me.getSubmitValue();
28 if (val !== null && val !== '' && val !== '__default__') {
29 data = {};
30 data[me.getName()] = val;
31 } else if (me.getDeleteEmpty()) {
32 data = {};
33 data.delete = me.getName();
34 }
35 }
36 return data;
37 },
38
39 validator: function(val) {
40 let me = this;
41
42 if (me.editable || val === null || val === '') {
43 return true;
44 }
45
46 if (me.store.getCount() > 0) {
47 let values = me.multiSelect ? val.split(me.delimiter) : [val];
48 let items = me.store.getData().collect('value', 'data');
49 if (Ext.Array.every(values, function(value) {
50 return Ext.Array.contains(items, value);
51 })) {
52 return true;
53 }
54 }
55
56 // returns a boolean or string
57 return "value '" + val + "' not allowed!";
58 },
59
60 initComponent: function() {
61 let me = this;
62
63 me.store = Ext.create('Ext.data.ArrayStore', {
64 model: 'KeyValue',
65 data: me.comboItems,
66 });
67
68 if (me.initialConfig.editable === undefined) {
69 me.editable = false;
70 }
71
72 me.callParent();
73 },
74
75 setComboItems: function(items) {
76 let me = this;
77
78 me.getStore().setData(items);
79 },
80
81 });