Hi Dave,

PFA updated patch.


On Wed, Nov 22, 2017 at 10:26 PM, Dave Page <dp...@pgadmin.org> wrote:

> Hi
>
> On Wed, Nov 22, 2017 at 3:18 PM, Murtuza Zabuawala <murtuza.zabuawala@
> enterprisedb.com> wrote:
>
>> Hi,
>>
>> PFA patch to fix the issue where while switching the tabs in query tool
>> resets the position of the table viewport to the first row.
>> RM#2875
>>
>> *Steps:*
>> 1) Open query tool
>> 2) Execute:
>> select * from generate_series(1, 1000) as "column-1";
>> 3) Scroll till the End OR till ~250 row
>> 4) Click on 'Explain' Tab
>> 5) Go back to 'Data output' Tab
>>
>
> Hmm, minor issue; each time I return the to data tab, the data moves up
> two rows! It's almost like it's calculating the viewport taking into
> account the row header (e.g. row 250 is visible immediate below the
> header), but then re-positioning without taking it into account (e.g. row
> 250 is aligned with the top of the row header, thus making row 252 the
> first visible one).
>
​Fixed.​


>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js 
b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
index ba0ce67..f3d4267 100644
--- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
+++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
@@ -917,7 +917,8 @@ define('tools.querytool', [
           // fetch asynchronous
           setTimeout(self.fetch_next.bind(self));
         }
-      })
+      });
+
       // Resize SlickGrid when window resize
       $(window).resize(function () {
         // Resize grid only when 'Data Output' panel is visible.
@@ -1025,9 +1026,36 @@ define('tools.querytool', [
 
     /* This function is responsible to render output grid */
     grid_resize: function (grid) {
-      var h = $($('#editor-panel').find('.wcFrame')[1]).height() - 35;
-      $('#datagrid').css({'height': h + 'px'});
+      var prev_height = $('#datagrid').height(),
+        h = $($('#editor-panel').find('.wcFrame')[1]).height() - 35,
+        prev_viewport = grid.getViewport(),
+        prev_viewport_rows = grid.getRenderedRange(),
+        prev_cell = grid.getActiveCell();
+
+      // Apply css only if necessary, To avoid DOM operation
+      if (prev_height != h) {
+        $('#datagrid').css({'height': h + 'px'});
+      }
+
       grid.resizeCanvas();
+
+      /*
+       * If there is an active cell from user then we have to go to that cell
+       */
+      if(prev_cell) {
+        grid.scrollCellIntoView(prev_cell.row, prev_cell.cell);
+      }
+
+      // If already displaying from first row
+      if (prev_viewport.top == prev_viewport_rows.top) {
+        return
+      }
+      // if user has scroll to the end/last row
+      else if (prev_viewport.bottom - 2 == prev_viewport_rows.bottom) {
+        grid.scrollRowIntoView(prev_viewport.bottom);
+      } else {
+        grid.scrollRowIntoView(prev_viewport.bottom - 2);
+      }
     },
 
     /* This function is responsible to create and render the

Reply via email to