Prechádzať zdrojové kódy

HUE-3154 [metastore] Select all checkbox is reversed

Johan Ahlen 9 rokov pred
rodič
commit
65b0780

+ 23 - 24
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -2950,49 +2950,48 @@
 
   ko.bindingHandlers.hueChecked = {
     after: ['value', 'attr'],
-    init: function (element, valueAccessor, allBindings) {
-      element.type = 'checkbox';
-      element.checked = false;
+    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
+      var selectedValues = valueAccessor();
+
+      var updateCheckedState = function () {
+        ko.utils.toggleDomNodeCssClass(element, 'fa-check', selectedValues.indexOf(viewModel) > -1);
+      };
+
       ko.utils.registerEventHandler(element, 'click', function () {
-        element.checked = ! element.checked;
-        ko.utils.toggleDomNodeCssClass(element, 'fa-check', element.checked);
+        var currentIndex = selectedValues.indexOf(viewModel);
+        if (currentIndex === -1) {
+          selectedValues.push(viewModel);
+        } else if (currentIndex > -1) {
+          selectedValues.splice(currentIndex, 1);
+        }
       });
-      ko.bindingHandlers.checked.init(element, valueAccessor, allBindings);
 
-      ko.utils.toggleDomNodeCssClass(element, 'fa-check', element.checked);
-
-      valueAccessor().subscribe(function () {
-        ko.utils.toggleDomNodeCssClass(element, 'fa-check', element.checked);
-      })
+      selectedValues.subscribe(updateCheckedState);
+      updateCheckedState();
     }
   };
 
   ko.bindingHandlers.hueCheckAll = {
     init: function (element, valueAccessor, allBindings) {
-      var allSelected = ko.observable(false);
       var allValues = ko.utils.unwrapObservable(valueAccessor()).allValues;
       var selectedValues = ko.utils.unwrapObservable(valueAccessor()).selectedValues;
 
-      ko.bindingHandlers.hueChecked.init(element, function () {
-        return allSelected;
-      }, allBindings);
-
-      self.allTablesSelected = ko.observable(false);
-      self.selectedTables = ko.observableArray();
+      var updateCheckedState = function () {
+        ko.utils.toggleDomNodeCssClass(element, 'fa-check', selectedValues().length === allValues().length);
+        ko.utils.toggleDomNodeCssClass(element, 'fa-minus hue-uncheck', selectedValues().length > 0 && selectedValues().length !== allValues().length);
+      };
 
       ko.utils.registerEventHandler(element, 'click', function () {
-        if (allSelected() && selectedValues().length == 0) {
+        if (selectedValues().length == 0) {
           selectedValues(allValues().slice(0));
         } else {
           selectedValues([]);
         }
       });
 
-      selectedValues.subscribe(function (newValue) {
-        allSelected(newValue.length === allValues().length);
-        ko.utils.toggleDomNodeCssClass(element, 'fa-minus hue-uncheck', newValue.length > 0 && newValue.length !== allValues().length);
-      })
-      ko.utils.toggleDomNodeCssClass(element, 'fa-minus hue-uncheck', selectedValues().length > 0 && selectedValues().length !== allValues().length);
+      selectedValues.subscribe(updateCheckedState);
+      allValues.subscribe(updateCheckedState);
+      updateCheckedState();
     }
   };