combogrid: add handling for historic set values currently not available

We can often run into situations where a value set in the past is not
valid anymore. An example could be a deleted network bridge, e.g., we
set the vNIC of a VM to 'vmbr1' but then we decide to obsolete that
and delete that one, one would now expect that the field gets marked
as invalid when editing the VM's vNIC, so add that behavior.

As sometimes this can be valid and wanted behavior (e.g., usb
passthrough, which is hot-pluggable), also add a switch do restore
the old behavior.

Note that the empty value is not handled by this change, we let the
existing "allowBlank" config switch handle that one.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2019-07-18 15:55:37 +02:00
parent f59a7b2350
commit 1ccb53ecdb

View File

@ -29,6 +29,7 @@ Ext.define('Proxmox.form.ComboGrid', {
config: {
skipEmptyText: false,
notFoundIsValid: false,
deleteEmpty: false,
},
@ -291,6 +292,43 @@ Ext.define('Proxmox.form.ComboGrid', {
return picker;
},
isValueInStore: function(value) {
var me = this;
var store = me.store;
var found = false;
if (!store) {
return found;
}
if (Ext.isArray(value)) {
Ext.Array.each(value, function(v) {
if (store.findRecord(me.valueField, v)) {
found = true;
return false; // break
}
});
} else {
found = !!store.findRecord(me.valueField, value);
}
return found;
},
validator: function (value) {
var me = this;
if (!value) {
return true; // handled later by allowEmpty in the getErrors call chain
}
if (!(me.notFoundIsValid || me.isValueInStore(value))) {
return gettext('Invalid Value');
}
return true;
},
initComponent: function() {
var me = this;
@ -364,16 +402,7 @@ Ext.define('Proxmox.form.ComboGrid', {
}
var found = false;
if (def) {
if (Ext.isArray(def)) {
Ext.Array.each(def, function(v) {
if (store.findRecord(me.valueField, v)) {
found = true;
return false; // break
}
});
} else {
found = store.findRecord(me.valueField, def);
}
found = me.isValueInStore(def);
}
if (!found) {
@ -383,6 +412,9 @@ Ext.define('Proxmox.form.ComboGrid', {
me.setValue(def, true);
} else {
me.setValue(def);
if (!me.notFoundIsValid) {
me.markInvalid(gettext('Invalid Value'));
}
}
}
}