summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/src/main/java/com/vaadin/client/widgets/Escalator.java48
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/MoveGridAndAddRow.java45
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/MoveGridAndAddRowTest.java21
3 files changed, 80 insertions, 34 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 d0de3957d9..416e8fde1c 100644
--- a/client/src/main/java/com/vaadin/client/widgets/Escalator.java
+++ b/client/src/main/java/com/vaadin/client/widgets/Escalator.java
@@ -5738,40 +5738,6 @@ public class Escalator extends Widget
header.paintInsertRows(0, header.getRowCount());
footer.paintInsertRows(0, footer.getRowCount());
- // recalculateElementSizes();
-
- Scheduler.get().scheduleDeferred(new Command() {
- @Override
- public void execute() {
- /*
- * Not a faintest idea why we have to defer this call, but
- * unless it is deferred, the size of the escalator will be 0x0
- * after it is first detached and then reattached to the DOM.
- * This only applies to a bare Escalator; inside a Grid
- * everything works fine either way.
- *
- * The three autodetectRowHeightLater calls above seem obvious
- * suspects at first. However, they don't seem to have anything
- * to do with the issue, as they are no-ops in the
- * detach-reattach case.
- */
- recalculateElementSizes();
- }
- });
-
- /*
- * Note: There's no need to explicitly insert rows into the body.
- *
- * recalculateElementSizes will recalculate the height of the body. This
- * has the side-effect that as the body's size grows bigger (i.e. from 0
- * to its actual height), more escalator rows are populated. Those
- * escalator rows are then immediately rendered. This, in effect, is the
- * same thing as inserting those rows.
- *
- * In fact, having an extra paintInsertRows here would lead to duplicate
- * rows.
- */
-
boolean columnsChanged = false;
for (ColumnConfigurationImpl.Column column : columnConfiguration.columns) {
boolean columnChanged = column.measureAndSetWidthIfNeeded();
@@ -5798,6 +5764,20 @@ public class Escalator extends Widget
} else {
scroller.attachTouchListeners(getElement());
}
+
+ /*
+ * Note: There's no need to explicitly insert rows into the body.
+ *
+ * recalculateElementSizes will recalculate the height of the body. This
+ * has the side-effect that as the body's size grows bigger (i.e. from 0
+ * to its actual height), more escalator rows are populated. Those
+ * escalator rows are then immediately rendered. This, in effect, is the
+ * same thing as inserting those rows.
+ *
+ * In fact, having an extra paintInsertRows here would lead to duplicate
+ * rows.
+ */
+ recalculateElementSizes();
}
@Override
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/MoveGridAndAddRow.java b/uitest/src/main/java/com/vaadin/tests/components/grid/MoveGridAndAddRow.java
new file mode 100644
index 0000000000..e27c3b5279
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/MoveGridAndAddRow.java
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.grid;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.ValueProvider;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class MoveGridAndAddRow extends AbstractTestUIWithLog {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ final VerticalLayout layout = new VerticalLayout();
+
+ final VerticalLayout anotherLayout = new VerticalLayout();
+ anotherLayout.addComponent(new Label("This is another layout"));
+ final Grid<String> grid = new Grid<>();
+ grid.addColumn(ValueProvider.identity()).setCaption("A");
+ List<String> items = new ArrayList<>();
+ items.add("1");
+ grid.setItems(items);
+
+ final Button button = new Button("Add row and remove this button");
+ button.setId("add");
+ button.addClickListener(event -> {
+ items.add("2");
+ grid.setItems(items);
+ button.setVisible(false);
+ });
+
+ Button move = new Button("Move grid to other layout");
+ move.setId("move");
+ move.addClickListener(event -> anotherLayout.addComponent(grid));
+
+ layout.addComponents(button, move, grid);
+ addComponent(new HorizontalLayout(layout, anotherLayout));
+
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/MoveGridAndAddRowTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/MoveGridAndAddRowTest.java
new file mode 100644
index 0000000000..c6d9aa394a
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/MoveGridAndAddRowTest.java
@@ -0,0 +1,21 @@
+package com.vaadin.tests.components.grid;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class MoveGridAndAddRowTest extends SingleBrowserTest {
+
+ @Test
+ public void addRowAndChangeLayout() {
+ openTestURL();
+ $(ButtonElement.class).id("add").click();
+
+ GridElement grid = $(GridElement.class).first();
+ Assert.assertEquals("1", grid.getCell(0, 0).getText());
+ Assert.assertEquals("2", grid.getCell(1, 0).getText());
+ }
+}