]> git.proxmox.com Git - proxmox-widget-toolkit.git/blobdiff - src/form/ComboGrid.js
combo grid: load: rework auto-selection and validity logic
[proxmox-widget-toolkit.git] / src / form / ComboGrid.js
index e5a1920e392b3e2ac0088faa6fd2a20fcea11820..923a55a7ea9c4dd95a9d58f1022066c44dfff13d 100644 (file)
@@ -304,6 +304,11 @@ Ext.define('Proxmox.form.ComboGrid', {
                me.savedMinHeight = picker.getMinHeight();
                picker.setMinHeight(100);
            }
+           if (me.loadError) {
+               Proxmox.Utils.setErrorMask(picker, me.loadError);
+               delete me.loadError;
+               picker.updateLayout();
+           }
        });
 
         picker.getNavigationModel().navigateOnSpace = false;
@@ -341,14 +346,14 @@ Ext.define('Proxmox.form.ComboGrid', {
 
        if (Ext.isArray(value)) {
            Ext.Array.each(value, function(v) {
-               if (store.findRecord(me.valueField, v)) {
+               if (store.findRecord(me.valueField, v, 0, false, true, true)) {
                    found = true;
                    return false; // break
                }
                return true;
            });
        } else {
-           found = !!store.findRecord(me.valueField, value);
+           found = !!store.findRecord(me.valueField, value, 0, false, true, true);
        }
 
        return found;
@@ -415,17 +420,17 @@ Ext.define('Proxmox.form.ComboGrid', {
        me.mon(me.store, 'load', function(store, r, success, o) {
            if (success) {
                me.clearInvalid();
+               delete me.loadError;
 
                if (me.enableLoadMask) {
                    delete me.enableLoadMask;
 
-                   // if the picker exists,
-                   // we reset its minheight to the saved let/0
-                   // we have to update the layout, otherwise the height
-                   // gets not recalculated
+                   // if the picker exists, we reset its minHeight to the previous saved one or 0
                    if (me.picker) {
                        me.picker.setMinHeight(me.savedMinHeight || 0);
+                       Proxmox.Utils.setErrorMask(me.picker);
                        delete me.savedMinHeight;
+                       // we have to update the layout, otherwise the height gets not recalculated
                        me.picker.updateLayout();
                    }
                }
@@ -440,17 +445,27 @@ Ext.define('Proxmox.form.ComboGrid', {
                }
 
                if (!found) {
-                   let rec = me.store.first();
-                   if (me.autoSelect && rec && rec.data) {
-                       def = rec.data[me.valueField];
-                       me.setValue(def, true);
-                   } else if (!me.allowBlank && !(Ext.isArray(def) ? def.length : def)) {
-                       me.setValue(def);
-                       if (!me.notFoundIsValid && !me.isDisabled()) {
-                           me.markInvalid(me.blankText);
+                   if (!(Ext.isArray(def) ? def.length : def)) {
+                       let rec = me.store.first();
+                       if (me.autoSelect && rec && rec.data) {
+                           def = rec.data[me.valueField];
+                           me.setValue(def, true);
+                       } else if (!me.allowBlank) {
+                           me.setValue(def);
+                           if (!me.isDisabled()) {
+                               me.markInvalid(me.blankText);
+                           }
                        }
+                   } else if (!me.notFoundIsValid && !me.isDisabled()) {
+                       me.markInvalid(gettext('Invalid Value'));
                    }
                }
+           } else {
+               let msg = Proxmox.Utils.getResponseErrorMessage(o.getError());
+               if (me.picker) {
+                   Proxmox.Utils.setErrorMask(me.picker, msg);
+               }
+               me.loadError = msg;
            }
        });
     },