Skip to content

Commit 28326c5

Browse files
authored
fix(ui5-list): fire itemClick after the selection (#1618)
We used to fire the "itemClick" and "itemPress" before the selection finishes and if someone gets the "event.detail.item.selected" - it is will be the old one. Now, they are fired after the selection finishes and provide the correct "item" state, although it is not common to listen for "itemClick" in selection modes, but rather for "selectionChange". FIXES: #1615
1 parent ec5a9cf commit 28326c5

File tree

3 files changed

+47
-6
lines changed

3 files changed

+47
-6
lines changed

packages/main/src/List.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -564,9 +564,6 @@ class List extends UI5Element {
564564
onItemPress(event) {
565565
const pressedItem = event.detail.item;
566566

567-
this.fireEvent("itemPress", { item: pressedItem });
568-
this.fireEvent("itemClick", { item: pressedItem });
569-
570567
if (!this._selectionRequested && this.mode !== ListMode.Delete) {
571568
this._selectionRequested = true;
572569
this.onSelectionRequested({
@@ -579,6 +576,9 @@ class List extends UI5Element {
579576
});
580577
}
581578

579+
this.fireEvent("itemPress", { item: pressedItem });
580+
this.fireEvent("itemClick", { item: pressedItem });
581+
582582
this._selectionRequested = false;
583583
}
584584

packages/main/test/pages/List_test_page.html

+28-2
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,26 @@
2828
<input id="loadMoreResult" value="0"/>
2929
<br/>
3030
<ui5-list id="listEvents" mode="SingleSelectEnd">
31-
<ui5-li id="country1" >Argentina</ui5-li>
31+
<ui5-li id="country1">Argentina</ui5-li>
3232
<ui5-li id="country2" selected >Bulgaria</ui5-li>
33-
<ui5-li id="country3" >China</ui5-li>
33+
<ui5-li id="country3">China</ui5-li>
3434
<ui5-li id="country4" type="Inactive">Portugal</ui5-li>
3535
</ui5-list>
3636
<ui5-input id="itemPressResultField" placeholder="itemPress result"></ui5-input>
37+
<ui5-input id="itemPressSelectedResultField" placeholder="itemPress selected result"></ui5-input>
3738
<ui5-input id="selectionChangeResultField" placeholder="selectionChange result"></ui5-input>
3839
<ui5-input id="selectionChangeResultPreviousItemsParameter" placeholder="selectionChange previousSelection result"></ui5-input>
3940

41+
<ui5-list id="listEvents2" mode="MultiSelect">
42+
<ui5-li id="country11">Argentina</ui5-li>
43+
<ui5-li id="country22" selected >Bulgaria</ui5-li>
44+
<ui5-li id="country33">China</ui5-li>
45+
<ui5-li id="country44">Portugal</ui5-li>
46+
</ui5-list>
47+
<ui5-input id="itemPressResultField2" placeholder="itemPress result"></ui5-input>
48+
<ui5-input id="itemPressSelectedResultField2" placeholder="itemPress selected result"></ui5-input>
49+
<ui5-input id="selectionChangeResultField2" placeholder="selectionChange result"></ui5-input>
50+
4051
<ui5-list id="list1" header-text="API: GroupHeaderListItem">
4152
<ui5-li-groupheader>New Items</ui5-li-groupheader>
4253
<ui5-li image="./img/HT-1000.jpg" >Laptop HP</ui5-li>
@@ -126,7 +137,9 @@
126137

127138
var itemDeleteCounter = 0;
128139
var itemPressCounter = 0;
140+
var itemPressCounter2 = 0;
129141
var selectionChangeCounter = 0;
142+
var selectionChangeCounter2 = 0;
130143

131144
function deleteItemHandler(e) {
132145
document.querySelector("#lblResult").innerHTML = e.detail.item.innerHTML + ": " + ++itemDeleteCounter;
@@ -137,6 +150,7 @@
137150
listEvents.addEventListener("ui5-itemPress", function (event) {
138151
itemPressCounter += 1;
139152
itemPressResultField.value = itemPressCounter;
153+
itemPressSelectedResultField.value = event.detail.item.selected;
140154
});
141155

142156
listEvents.addEventListener("ui5-selectionChange", function (event) {
@@ -148,6 +162,18 @@
148162
selectionChangeResultPreviousItemsParameter.value = event.detail.previouslySelectedItems[0].id;
149163
})
150164

165+
listEvents2.addEventListener("ui5-itemPress", function (event) {
166+
itemPressCounter2 += 1;
167+
itemPressResultField2.value = itemPressCounter2;
168+
itemPressSelectedResultField2.value = event.detail.item.selected;
169+
});
170+
171+
listEvents2.addEventListener("ui5-selectionChange", function (event) {
172+
selectionChangeCounter2 += 1;
173+
selectionChangeResultField2.value = selectionChangeCounter2;
174+
});
175+
176+
151177
listMultiSel.addEventListener("ui5-selectionChange", function(event) {
152178
fieldMultiSelResult.value = event.detail.selectionComponentPressed;
153179
})

packages/main/test/specs/List.spec.js

+16-1
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,32 @@ describe("List Tests", () => {
1212
assert.ok(list, "List is rendered");
1313
});
1414

15-
it("itemPress and selectionChange events are fired", () => {
15+
it("itemPress and selectionChange events are fired in Single selection", () => {
1616
const itemPressResultField = $("#itemPressResultField");
17+
const itemPressSelectedResultField = $("#itemPressSelectedResultField");
1718
const selectionChangeResultField = $("#selectionChangeResultField");
1819
const firstItem = $("#listEvents #country1");
1920

2021
firstItem.click();
2122

2223
assert.strictEqual(itemPressResultField.getProperty("value"), "1", "itemPress event has been fired once");
24+
assert.strictEqual(itemPressSelectedResultField.getProperty("value"), "true", "itemPress detail 'item' has correct value.");
2325
assert.strictEqual(selectionChangeResultField.getProperty("value"), "1", "selectionChange event has been fired.");
2426
});
2527

28+
it("itemPress and selectionChange events are fired in Multi selection", () => {
29+
const itemPressResultField2 = $("#itemPressResultField2");
30+
const itemPressSelectedResultField2 = $("#itemPressSelectedResultField2");
31+
const selectionChangeResultField2 = $("#selectionChangeResultField2");
32+
const firstItem = $("#listEvents2 #country11");
33+
34+
firstItem.click();
35+
36+
assert.strictEqual(itemPressResultField2.getProperty("value"), "1", "itemPress event has been fired once");
37+
assert.strictEqual(itemPressSelectedResultField2.getProperty("value"), "true", "itemPress detail 'item' has correct value.");
38+
assert.strictEqual(selectionChangeResultField2.getProperty("value"), "1", "selectionChange event has been fired.");
39+
});
40+
2641
it("selectionChange events provides previousSelection item", () => {
2742
const selectionChangeResultPreviousItemsParameter = $("#selectionChangeResultPreviousItemsParameter");
2843
const firstItem = $("#listEvents #country1");

0 commit comments

Comments
 (0)