aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/main/java/com/vaadin
diff options
context:
space:
mode:
authorAnna Koskinen <Ansku@users.noreply.github.com>2021-03-08 13:18:11 +0200
committerGitHub <noreply@github.com>2021-03-08 13:18:11 +0200
commit7eb9588359c28ed484bcaeb729fc54675601671a (patch)
treec8aeb6d5f6b323ad277fe2266e6e574461a23d1a /server/src/main/java/com/vaadin
parentff41bba3d7d0d8c02570b8dfccb413295e091708 (diff)
downloadvaadin-framework-7eb9588359c28ed484bcaeb729fc54675601671a.tar.gz
vaadin-framework-7eb9588359c28ed484bcaeb729fc54675601671a.zip
Fix updating Grid's item set when details rows are open. (#12231)
- Old details should close. - New details should open. - If some row has details in both old and new item set, the details row contents should get updated. - Updating details row contents should not break the positioning of the rows and details below. Fixes #12211
Diffstat (limited to 'server/src/main/java/com/vaadin')
-rw-r--r--server/src/main/java/com/vaadin/ui/Grid.java10
1 files changed, 10 insertions, 0 deletions
diff --git a/server/src/main/java/com/vaadin/ui/Grid.java b/server/src/main/java/com/vaadin/ui/Grid.java
index ec891396e9..f84dbd40cb 100644
--- a/server/src/main/java/com/vaadin/ui/Grid.java
+++ b/server/src/main/java/com/vaadin/ui/Grid.java
@@ -4997,7 +4997,17 @@ public class Grid<T> extends AbstractListing<T> implements HasComponents,
@Override
protected void internalSetDataProvider(DataProvider<T, ?> dataProvider) {
+ boolean newProvider = getDataProvider() != dataProvider;
super.internalSetDataProvider(dataProvider);
+ if (newProvider) {
+ Set<T> oldVisibleDetails = new HashSet<>(
+ detailsManager.visibleDetails);
+ oldVisibleDetails.forEach(item -> {
+ // close all old details even if the same item exists in the new
+ // provider
+ detailsManager.setDetailsVisible(item, false);
+ });
+ }
for (Column<T, ?> column : getColumns()) {
column.updateSortable();
}