Browse Source

Update client side selection state when changing selection model (#20370)

Change-Id: I7fe8c160405a69140cac511c744d89a62c401cca
tags/7.7.4
Artur Signell 7 years ago
parent
commit
04650c5654

+ 4
- 0
server/src/main/java/com/vaadin/ui/Grid.java View File

@@ -5595,6 +5595,10 @@ public class Grid extends AbstractFocusable implements SelectionNotifier,
if (!SharedUtil.equals(oldSelection, newSelection)) {
fireSelectionEvent(oldSelection, newSelection);
}

// selection is included in the row data, so the client needs to be
// updated
datasourceExtension.refreshCache();
}
}


+ 40
- 0
uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/server/GridSelectionTest.java View File

@@ -426,4 +426,44 @@ public class GridSelectionTest extends GridBasicFeaturesTest {
private GridRowElement getRow(int i) {
return getGridElement().getRow(i);
}

@Test
public void changeSelectionModelSingleToNone() throws Exception {
openTestURL();

setSelectionModelSingle();
getGridElement().getCell(0, 0).click();
assertTrue("row should become selected", getRow(0).isSelected());
setSelectionModelNone();
assertFalse("row should become deselected", getRow(0).isSelected());
setSelectionModelSingle();
assertFalse("row should still be deselected", getRow(0).isSelected());
getGridElement().getCell(0, 0).click();
assertTrue("row should become selected", getRow(0).isSelected());
}

@Test
public void changeSelectionModelMultiToNone() throws Exception {
openTestURL();

setSelectionModelMulti();
getGridElement().getCell(0, 0).click();
getGridElement().getCell(1, 0).click();
getGridElement().getCell(2, 0).click();
assertTrue("row should become selected", getRow(0).isSelected());
assertTrue("row should become selected", getRow(1).isSelected());
assertTrue("row should become selected", getRow(2).isSelected());

setSelectionModelNone();
assertFalse("row should become deselected", getRow(0).isSelected());
assertFalse("row should become deselected", getRow(1).isSelected());
assertFalse("row should become deselected", getRow(2).isSelected());
setSelectionModelMulti();
assertFalse("row should still be deselected", getRow(0).isSelected());
assertFalse("row should still be deselected", getRow(1).isSelected());
assertFalse("row should still be deselected", getRow(2).isSelected());

getGridElement().getCell(0, 0).click();
assertTrue("row should become selected", getRow(0).isSelected());
}
}

Loading…
Cancel
Save