]> source.dussan.org Git - vaadin-framework.git/commitdiff
Ensure #cell[N] always scrolls row N into view (#20423)
authorArtur Signell <artur@vaadin.com>
Tue, 25 Oct 2016 15:27:20 +0000 (18:27 +0300)
committerAleksi Hietanen <aleksi@vaadin.com>
Fri, 28 Oct 2016 06:39:22 +0000 (06:39 +0000)
Change-Id: I99347ee1d0f2f13fcb8e110d2e7192590e4f9456

client/src/main/java/com/vaadin/client/widgets/Escalator.java
uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/server/GridScrollTest.java

index 8dbbfc437d4cddeaedb2b24fe7203860c95409a2..9eaa7ddd3671adf43c356a865bb3316b1f671fae 100644 (file)
@@ -6682,15 +6682,19 @@ public class Escalator extends Widget
         } else if (type.equalsIgnoreCase("cell")) {
             // If wanted row is not visible, we need to scroll there.
             Range visibleRowRange = getVisibleRowRange();
-            if (indices.length > 0 && !visibleRowRange.contains(indices[0])) {
-                try {
-                    scrollToRow(indices[0], ScrollDestination.ANY, 0);
-                } catch (IllegalArgumentException e) {
-                    getLogger().log(Level.SEVERE, e.getMessage());
+            if (indices.length > 0) {
+                // Contains a row number, ensure it is available and visible
+                boolean rowInCache = visibleRowRange.contains(indices[0]);
+
+                // Scrolling might be a no-op if row is already in the viewport
+                scrollToRow(indices[0], ScrollDestination.ANY, 0);
+
+                if (!rowInCache) {
+                    // Row was not in cache, scrolling caused lazy loading and
+                    // the caller needs to wait and call this method again to be
+                    // able to get the requested element
+                    return null;
                 }
-                // Scrolling causes a lazy loading event. No element can
-                // currently be retrieved.
-                return null;
             }
             container = getBody();
         } else if (type.equalsIgnoreCase("footer")) {
@@ -6834,4 +6838,4 @@ public class Escalator extends Widget
     double getMinCellWidth(int colIndex) {
         return columnConfiguration.getMinCellWidth(colIndex);
     }
-}
\ No newline at end of file
+}
index fbd36f87f9ac2fad7bd2370c03e8dcdac726b388..815d6f72a65c243063b8630c63281940345cb258 100644 (file)
@@ -68,4 +68,10 @@ public class GridScrollTest extends GridBasicFeaturesTest {
                 active);
     }
 
+    @Test
+    public void scrollIntoViewThroughSubPart() {
+        openTestURL("theme=valo");
+        GridElement grid = $(GridElement.class).first();
+        assertEquals("(10, 0)", grid.getCell(10, 0).getText());
+    }
 }