Эх сурвалжийг харах

HUE-4572 [core] Fix HueDataTable with multiple instances on the same page

Enrico Berti 9 жил өмнө
parent
commit
34d9893

+ 12 - 6
desktop/core/src/desktop/static/desktop/js/jquery.huedatatable.js

@@ -41,8 +41,8 @@
 
     self.fnToggleAllCols = function (visible) {
       var aoColumns = self.$table.data('aoColumns');
-      aoColumns.forEach(function(col, idx){
-        if (idx > 0){
+      aoColumns.forEach(function (col, idx) {
+        if (idx > 0) {
           col.bVisible = visible;
         }
       });
@@ -233,20 +233,26 @@
         var invisibleOffset = $t.data('oInit')['forceInvisible'] ? $t.data('oInit')['forceInvisible'] : (aoColumns.length < 100 ? 10 : 1);
         var scrollable = $t.parents($t.data('oInit')['scrollable']);
         var visibleRows = Math.ceil((scrollable.height() - Math.max($t.offset().top, 0)) / rowHeight);
-
+        if ($t.data('oInit')['contained']) {
+          visibleRows = Math.ceil(scrollable.height() / rowHeight);
+        }
         visibleRows += invisibleOffset;
+        visibleRows = Math.max(visibleRows, 11);
 
         var startRow = $t.offset().top - 73 < 0 ? Math.max(Math.floor(Math.abs($t.offset().top - 73) / rowHeight) - invisibleOffset, 0) : 0;
+        if ($t.data('oInit')['contained']) {
+          startRow = Math.max(0, (Math.floor(Math.abs($t.position().top) / rowHeight)) - invisibleOffset);
+        }
         var endRow = startRow + visibleRows + invisibleOffset;
 
         if (endRow != $t.data('endRow') || (endRow == $t.data('endRow') && endCol > $t.data('endCol')) || force) {
           $t.data('endCol', endCol);
           $t.data('endRow', endRow);
 
-          if ($t.data('fnDraws') == 0) {
+          if ($t.data('fnDraws') === 0) {
             var html = '';
             for (var i = 0; i < data.length; i++) {
-              html += '<tr class="ht-visible-row ht-visible-row-' + i + '"><td>' + data[i][0] + '</td><td colspan="' + (aoColumns.length - 1) + '" class="stripe"></td></tr>';
+              html += '<tr class="ht-visible-row ht-visible-row-' + i + '" style="height: 29px"><td>' + data[i][0] + '</td><td colspan="' + (aoColumns.length - 1) + '" class="stripe"></td></tr>';
             }
             appendable.html(html);
             if ($t.data('plugin_jHueTableExtender')) {
@@ -408,7 +414,7 @@
         var drawTimeout = -1;
         if (self.$table.data('oInit')['scrollable'] && !self.$table.data('isScrollAttached')) {
           self.$table.data('isScrollAttached', true);
-          var scrollFn = function(){
+          var scrollFn = function () {
             window.clearTimeout(drawTimeout);
             drawTimeout = window.setTimeout(self.fnDraw, Math.max(100, Math.min(self.$table.data('aoColumns').length, 500)));
           }

+ 18 - 11
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -1720,20 +1720,22 @@
           document: self.uuid(),
           coordinator: self.coordinatorUuid()
         }, function (data) {
-          $("#schedulerEditor").html(data.layout);
-          self.schedulerViewModel = new vm.CoordinatorEditorViewModel(data.coordinator, data.credentials, data.workflows, data.can_edit);
+          if ($("#schedulerEditor").length > 0) {
+            $("#schedulerEditor").html(data.layout);
+            self.schedulerViewModel = new vm.CoordinatorEditorViewModel(data.coordinator, data.credentials, data.workflows, data.can_edit);
 
-          ko.cleanNode($("#schedulerEditor")[0]);
-          ko.applyBindings(self.schedulerViewModel, $("#schedulerEditor")[0]);
+            ko.cleanNode($("#schedulerEditor")[0]);
+            ko.applyBindings(self.schedulerViewModel, $("#schedulerEditor")[0]);
 
-          huePubSub.publish('render.jqcron');
+            huePubSub.publish('render.jqcron');
 
-          self.schedulerViewModel.coordinator.properties.cron_advanced.valueHasMutated(); // Update jsCron enabled status
-          self.schedulerViewModel.coordinator.tracker().markCurrentStateAsClean();
-          self.schedulerViewModel.isEditing(true);
+            self.schedulerViewModel.coordinator.properties.cron_advanced.valueHasMutated(); // Update jsCron enabled status
+            self.schedulerViewModel.coordinator.tracker().markCurrentStateAsClean();
+            self.schedulerViewModel.isEditing(true);
 
-          if (_action == 'new') {
-            self.saveScheduler();
+            if (_action == 'new') {
+              self.saveScheduler();
+            }
           }
         }).fail(function (xhr) {
           $(document).trigger("error", xhr.responseText);
@@ -2087,7 +2089,12 @@
           var notebook = data.data;
           self.loadNotebook(notebook, queryTab);
           if (typeof skipUrlChange === 'undefined'){
-            hueUtils.changeURL('/notebook/editor?editor=' + data.document.id);
+            if (self.editorMode()) {
+              hueUtils.changeURL('/notebook/editor?editor=' + data.document.id);
+            }
+            else {
+              hueUtils.changeURL('/notebook/notebook?notebook=' + data.document.id);
+            }
           }
           if (typeof callback !== 'undefined'){
             callback();

+ 16 - 18
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -2269,22 +2269,16 @@ ${ hueIcons.symbols() }
           $(el).jHueHorizontalScrollbar();
         }
         else {
-          $(el).parents(".dataTables_wrapper").jHueTableScroller({
-            maxHeight: DATATABLES_MAX_HEIGHT,
-            heightAfterCorrection: 0
-          });
-          $(el).jHueTableExtender({
-            fixedHeader: true,
-            fixedFirstColumn: true,
-            lockSelectedRow: true,
-            includeNavigator: false,
-            mainScrollable: '.right-panel',
-            parentId: 'snippet_' + snippet.id(),
-            clonedContainerPosition: "absolute"
-          });
+          if ($(el).data('fnDraws') === 1) {
+            $(el).parents(".dataTables_wrapper").jHueTableScroller({
+              maxHeight: DATATABLES_MAX_HEIGHT,
+              heightAfterCorrection: 0
+            });
+          }
         }
       },
-      scrollable: '.right-panel'
+      scrollable: vm.editorMode() ? '.right-panel' : '.dataTables_wrapper',
+      contained: !vm.editorMode()
     });
 
     if (vm.editorMode()) {
@@ -2302,10 +2296,14 @@ ${ hueIcons.symbols() }
       $(el).jHueHorizontalScrollbar();
     }
     else {
-      $(el).parents(".dataTables_wrapper").jHueTableScroller({
-        maxHeight: DATATABLES_MAX_HEIGHT,
-        heightAfterCorrection: 0,
-        enableNiceScroll: true
+      $(el).jHueTableExtender({
+        fixedHeader: true,
+        fixedFirstColumn: true,
+        lockSelectedRow: true,
+        includeNavigator: false,
+        mainScrollable: '.right-panel',
+        parentId: 'snippet_' + snippet.id(),
+        clonedContainerPosition: "absolute"
       });
     }