summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2016-10-25 18:27:20 +0300
committerAleksi Hietanen <aleksi@vaadin.com>2016-10-28 06:39:22 +0000
commite22ca2af047391e62195d2d3f07217ead8d88dd6 (patch)
tree2421ab68c3c03db1b0c74fca744944d4aeeea862 /client
parentafd35d9534f3baa8cafcfb35f3bd70dbbb2e59b2 (diff)
downloadvaadin-framework-e22ca2af047391e62195d2d3f07217ead8d88dd6.tar.gz
vaadin-framework-e22ca2af047391e62195d2d3f07217ead8d88dd6.zip
Ensure #cell[N] always scrolls row N into view (#20423)
Change-Id: I99347ee1d0f2f13fcb8e110d2e7192590e4f9456
Diffstat (limited to 'client')
-rw-r--r--client/src/main/java/com/vaadin/client/widgets/Escalator.java22
1 files changed, 13 insertions, 9 deletions
diff --git a/client/src/main/java/com/vaadin/client/widgets/Escalator.java b/client/src/main/java/com/vaadin/client/widgets/Escalator.java
index 8dbbfc437d..9eaa7ddd36 100644
--- a/client/src/main/java/com/vaadin/client/widgets/Escalator.java
+++ b/client/src/main/java/com/vaadin/client/widgets/Escalator.java
@@ -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
+}