Hi,

PFA patch to fix the issue in boolean editor & also corrected feature test.
RM#2848

--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/feature_tests/view_data_dml_queries.py 
b/web/pgadmin/feature_tests/view_data_dml_queries.py
index 153d796..bb9d688 100644
--- a/web/pgadmin/feature_tests/view_data_dml_queries.py
+++ b/web/pgadmin/feature_tests/view_data_dml_queries.py
@@ -197,9 +197,6 @@ CREATE TABLE public.defaults
             if data[1] == 'true':
                 checkbox_el = cell_el.find_element_by_xpath(".//input")
                 checkbox_el.click()
-                
ActionChains(self.driver).move_to_element(checkbox_el).double_click(
-                    checkbox_el
-                ).perform()
 
     def _tables_node_expandable(self):
         self.page.toggle_open_tree_item(self.server['name'])
diff --git a/web/pgadmin/static/js/slickgrid/editors.js 
b/web/pgadmin/static/js/slickgrid/editors.js
index 80f7cce..9d5986f 100644
--- a/web/pgadmin/static/js/slickgrid/editors.js
+++ b/web/pgadmin/static/js/slickgrid/editors.js
@@ -545,7 +545,7 @@
    */
   function CheckboxEditor(args) {
     var $select, el;
-    var defaultValue;
+    var defaultValue, previousState;
     var scope = this;
 
     this.init = function () {
@@ -564,22 +564,31 @@
           checkbox_status = 1;
         }
         switch(checkbox_status) {
-          // unchecked, going indeterminate
+          // State 0 will come when we had indeterminate state
           case 0:
-            el.prop('indeterminate', true);
-            el.data('checked', 2); // determines next checkbox status
+            // We will check now
+            el.prop('checked', true);
+            el.data('checked', 1);
             break;
 
-          // indeterminate, going checked
+          // State 1 will come when we had checked state
           case 1:
-            el.prop('checked', true);
+            // We will uncheck now
+            el.prop('checked', false);
+            el.data('checked', 2);
+            break;
+
+          // State 2 will come when we had unchecked state
+          case 2:
+            // We will set to indeterminate state
+            el.prop('indeterminate', true);
             el.data('checked', 0);
             break;
 
-          // checked, going unchecked
+          // Default, Set to indeterminate state
           default:
-            el.prop('checked', false);
-            el.data('checked', 1);
+            el.prop('indeterminate', true);
+            el.data('checked', 0);
         }
       });
     };
@@ -594,18 +603,21 @@
 
     this.loadValue = function (item) {
       defaultValue = item[args.column.field];
+      previousState = 0;
       if (_.isNull(defaultValue)||_.isUndefined(defaultValue)) {
         $select.prop('indeterminate', true);
-        $select.data('checked', 2);
+        $select.data('checked', 0);
       }
       else {
         defaultValue = !!item[args.column.field];
         if (defaultValue) {
           $select.prop('checked', true);
-          $select.data('checked', 0);
+          $select.data('checked', 1);
+          previousState = 1;
         } else {
           $select.prop('checked', false);
-          $select.data('checked', 1);
+          $select.data('checked', 2);
+          previousState = 2;
         }
       }
     };
@@ -622,10 +634,8 @@
     };
 
     this.isValueChanged = function () {
-      // var select_value = this.serializeValue();
-      var select_value = $select.data('checked');
-      return (!(select_value === 2 && (defaultValue == null || defaultValue == 
undefined))) &&
-            (select_value !== defaultValue);
+      var currentState = $select.data('checked');
+      return currentState !== previousState;
     };
 
     this.validate = function () {

Reply via email to