]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix Grid details on sort to display them on correct rows (#18224)
authorTeemu Suo-Anttila <teemusa@vaadin.com>
Wed, 1 Jul 2015 11:27:30 +0000 (14:27 +0300)
committerVaadin Code Review <review@vaadin.com>
Thu, 2 Jul 2015 12:19:42 +0000 (12:19 +0000)
Due to the nature of Container this is only achieved by removing any
existing details and reopening those after the sort is done.

Change-Id: Ic42186ed85981d5dad4ff0948aa22f7a0404480d

client/src/com/vaadin/client/widgets/Grid.java
server/src/com/vaadin/data/RpcDataProviderExtension.java
uitest/src/com/vaadin/tests/components/grid/GridDetailsWidthTest.java

index fef6a01640e34dc3ad493a58bcc29474e2367184..56b081f6b386c3572bd10fbb0e40f7ba2d842d19 100644 (file)
@@ -5972,6 +5972,12 @@ public class Grid<T> extends ResizeComposite implements
                 RowContainer body = escalator.getBody();
                 int oldSize = body.getRowCount();
 
+                // Hide all details.
+                Set<Integer> oldDetails = new HashSet<Integer>(visibleDetails);
+                for (int i : oldDetails) {
+                    setDetailsVisible(i, false);
+                }
+
                 if (newSize > oldSize) {
                     body.insertRows(oldSize, newSize - oldSize);
                     cellFocusHandler.rowsAddedToBody(Range.withLength(oldSize,
index 9d18736ba8a1d0d1f4ff8b749cb01a5fbb5f75ab..d291d509b2621cc4d7f3e45b100d7de8a93baaee 100644 (file)
@@ -927,6 +927,14 @@ public class RpcDataProviderExtension extends AbstractExtension {
                     listener.removeListener();
                 }
 
+                // Wipe clean all details.
+                HashSet<Object> detailItemIds = new HashSet<Object>(
+                        detailComponentManager.visibleDetailsComponents
+                                .keySet());
+                for (Object itemId : detailItemIds) {
+                    detailComponentManager.destroyDetails(itemId);
+                }
+
                 listeners.clear();
                 activeRowHandler.activeRange = Range.withLength(0, 0);
 
index 0a6f53820efcef08ab5b1a867adef47b68b46abd..2def2d02793b94295f12945c421cb1c44410b194 100644 (file)
@@ -23,8 +23,11 @@ import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.testbench.elements.GridElement.GridCellElement;
+import com.vaadin.testbench.parallel.TestCategory;
 import com.vaadin.tests.tb3.SingleBrowserTest;
 
+@TestCategory("grid")
 public class GridDetailsWidthTest extends SingleBrowserTest {
 
     @Test
@@ -64,4 +67,26 @@ public class GridDetailsWidthTest extends SingleBrowserTest {
         }
     }
 
+    @Test
+    public void testDetailsOnSort() {
+        openTestURL();
+        GridElement grid = $(GridElement.class).first();
+
+        // Open a details rows
+        grid.getCell(0, 0).click();
+
+        GridCellElement cell = grid.getHeaderCell(0, 0);
+        cell.click();
+        cell.click();
+
+        cell = grid.getCell(2, 0);
+        WebElement spacer = findElement(By.className("v-grid-spacer"));
+        Assert.assertEquals("Grid was not sorted correctly", "Hello 0",
+                cell.getText());
+        Assert.assertEquals("Details row was not in correct location", cell
+                .getLocation().getY() + cell.getSize().getHeight(), spacer
+                .getLocation().getY());
+
+    }
+
 }