]> source.dussan.org Git - vaadin-framework.git/commitdiff
Trigger repositioning after full refresh of current details. (#12312) (#12313)
authorAnna Koskinen <Ansku@users.noreply.github.com>
Thu, 20 May 2021 09:25:09 +0000 (12:25 +0300)
committerGitHub <noreply@github.com>
Thu, 20 May 2021 09:25:09 +0000 (12:25 +0300)
Fixes #12310

client/src/main/java/com/vaadin/client/connectors/grid/DetailsManagerConnector.java
uitest/src/main/java/com/vaadin/tests/components/grid/GridDetailsUpdateItems.java
uitest/src/test/java/com/vaadin/tests/components/grid/GridDetailsUpdateItemsTest.java

index 7e7389e65d0a96bb89a25bcd414d652e4869307e..5290effdfaca02807c8c26293887b55530211c81 100644 (file)
@@ -634,6 +634,12 @@ public class DetailsManagerConnector extends AbstractExtensionConnector {
 
         boolean newOrUpdatedDetails = refreshRange(availableAndVisible);
 
+        // the update may have affected details row contents and size,
+        // recalculation and triggering of any pending navigation
+        // confirmations etc. is needed
+        triggerDelayedRepositioning(availableAndVisible.getStart(),
+                availableAndVisible.length());
+
         markDetailsAddedOrUpdatedForDelayedAlertToGrid(newOrUpdatedDetails);
     }
 
index d84e0466a9a0fc441b1ccf14c6594021f41b93ec..4bdaf2553a62b3194798295d1973383aa8b0c31d 100644 (file)
@@ -48,7 +48,7 @@ public class GridDetailsUpdateItems extends AbstractTestUI {
         }
         mainLayout.addComponent(grid);
 
-        Button clickButton = new Button("Change items", event -> {
+        Button changeButton1 = new Button("Change with details", event -> {
             List<Collection<String>> itemsOverwrite = Arrays
                     .asList(secondCollection, fourthCollection);
             grid.setItems(itemsOverwrite);
@@ -56,7 +56,13 @@ public class GridDetailsUpdateItems extends AbstractTestUI {
                 grid.setDetailsVisible(tmp, true);
             }
         });
-        mainLayout.addComponent(clickButton);
+        mainLayout.addComponent(changeButton1);
+        Button changeButton2 = new Button("Change without details", event -> {
+            List<Collection<String>> itemsOverwrite = Arrays
+                    .asList(secondCollection, fourthCollection);
+            grid.setItems(itemsOverwrite);
+        });
+        mainLayout.addComponent(changeButton2);
 
         return mainLayout;
     }
index 22c7da0c02066b896b5276024488cff9c4f8a186..47cdc7ffff328e7ac8b90ecb404eac89036f3a80 100644 (file)
@@ -2,9 +2,11 @@ package com.vaadin.tests.components.grid;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.number.IsCloseTo.closeTo;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
 
 import org.junit.Test;
+import org.openqa.selenium.By;
 
 import com.vaadin.testbench.TestBenchElement;
 import com.vaadin.testbench.elements.ButtonElement;
@@ -18,7 +20,8 @@ public class GridDetailsUpdateItemsTest extends MultiBrowserTest {
     public void testDetailsUpdateWithItems() {
         openTestURL();
         GridElement grid = $(GridElement.class).first();
-        ButtonElement button = $(ButtonElement.class).first();
+        ButtonElement button = $(ButtonElement.class)
+                .caption("Change with details").first();
 
         String details0 = grid.getDetails(0).getText();
 
@@ -41,6 +44,28 @@ public class GridDetailsUpdateItemsTest extends MultiBrowserTest {
         assertDirectlyAbove(cell1_0, detailCell1);
     }
 
+    @Test
+    public void testRemovingDetailsWithItemUpdateRepositionsRowsCorrectly() {
+        openTestURL();
+        GridElement grid = $(GridElement.class).first();
+        ButtonElement button = $(ButtonElement.class)
+                .caption("Change without details").first();
+
+        assertFalse("Details not found when there should be some.",
+                grid.findElements(By.className("v-grid-spacer")).isEmpty());
+
+        // change the contents
+        button.click();
+
+        waitForElementNotPresent(By.className("v-grid-spacer"));
+
+        GridCellElement cell0_0 = grid.getCell(0, 0);
+        GridCellElement cell1_0 = grid.getCell(1, 0);
+
+        // ensure positioning is correct
+        assertDirectlyAbove(cell0_0, cell1_0);
+    }
+
     private void assertDirectlyAbove(TestBenchElement above,
             TestBenchElement below) {
         int aboveBottom = above.getLocation().getY()