]> git.proxmox.com Git - proxmox-widget-toolkit.git/blobdiff - src/form/ComboGrid.js
form: combo grid: fix selection after filtering
[proxmox-widget-toolkit.git] / src / form / ComboGrid.js
index 20c94556491a69d42b0f8656bcba10907d1d0b69..4cb79d0778cf8f0a8d761c2ee2a4c48e97c2dca4 100644 (file)
@@ -300,6 +300,7 @@ Ext.define('Proxmox.form.ComboGrid', {
        //
        // we save the minheight to reset it after the load
        picker.on('show', function() {
+           me.store.fireEvent('refresh');
            if (me.enableLoadMask) {
                me.savedMinHeight = picker.getMinHeight();
                picker.setMinHeight(100);
@@ -317,15 +318,14 @@ Ext.define('Proxmox.form.ComboGrid', {
     },
 
     clearLocalFilter: function() {
-        let me = this,
-            filter = me.queryFilter;
-
-        if (filter) {
-            me.queryFilter = null;
-            me.changingFilters = true;
-            me.store.removeFilter(filter, true);
-            me.changingFilters = false;
-        }
+        let me = this;
+
+       if (me.queryFilter) {
+           me.changingFilters = true; // FIXME: unused?
+           me.store.removeFilter(me.queryFilter, true);
+           me.queryFilter = null;
+           me.changingFilters = false;
+       }
     },
 
     isValueInStore: function(value) {
@@ -346,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;
@@ -425,14 +425,12 @@ Ext.define('Proxmox.form.ComboGrid', {
                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();
                    }
                }
@@ -447,15 +445,19 @@ 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 {