From: Jarno Rantala Date: Tue, 14 Jan 2014 08:02:34 +0000 (+0200) Subject: Remove unselected rows from selection on client side (#13008) X-Git-Tag: 7.1.11~17 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f93c870fe9d7c6cd01892c97d5a9c799e079fa4e;p=vaadin-framework.git Remove unselected rows from selection on client side (#13008) When server communicates the selected rows to the client side, client side datastructure of selected row keys is updated such that also the keys that has been unselected on server side are removed. This makes the test MultiSelectWithRemovedRow to pass. Change-Id: I7b6123436171972ecf345b07ddfb6d9965ca4f0c --- diff --git a/client/src/com/vaadin/client/ui/VScrollTable.java b/client/src/com/vaadin/client/ui/VScrollTable.java index bb431bf132..3c574f8f92 100644 --- a/client/src/com/vaadin/client/ui/VScrollTable.java +++ b/client/src/com/vaadin/client/ui/VScrollTable.java @@ -1060,6 +1060,8 @@ public class VScrollTable extends FlowPanel implements HasWidgets, if (uidl.hasVariable("selected")) { final Set selectedKeys = uidl .getStringArrayVariableAsSet("selected"); + removeUnselectedRowKeys(selectedKeys); + if (scrollBody != null) { Iterator iterator = scrollBody.iterator(); while (iterator.hasNext()) { @@ -1102,6 +1104,16 @@ public class VScrollTable extends FlowPanel implements HasWidgets, return keyboardSelectionOverRowFetchInProgress; } + private void removeUnselectedRowKeys(final Set selectedKeys) { + List unselectedKeys = new ArrayList(0); + for (String key : selectedRowKeys) { + if (!selectedKeys.contains(key)) { + unselectedKeys.add(key); + } + } + selectedRowKeys.removeAll(unselectedKeys); + } + /** For internal use only. May be removed or replaced in the future. */ public void updateSortingProperties(UIDL uidl) { oldSortColumn = sortColumn;