Skip to content

Commit f0fc8f2

Browse files
authored
feat(ui5-list): selectionChange event provides previousSelection items (#418)
BREAKING CHANGE: the "selectionChange" event param "items" is renamed to "selectedItems".
1 parent b3e3b3f commit f0fc8f2

File tree

7 files changed

+37
-10
lines changed

7 files changed

+37
-10
lines changed

lib/documentation/templates/api-events-section.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ module.exports = {
2323
2424
{{#each this.parameters}}
2525
<tr class="api-table-event-param" >
26-
<div class="cell api-table-param-name api-table-content-cell api-table-content-cell-bold">{{this.name}}</div>
27-
<div class="cell api-table-event-param-cell api-table-content-cell api-table-content-cell-description"><strong class="bold" >type:</strong> {{this.type}} </br> <strong class="api-table-event-description bold">description:</strong> {{{this.description}}}</div>
26+
<div class="api-table-content-event-params-wrapper">
27+
<div class="cell api-table-param-name api-table-content-cell api-table-content-cell-bold">{{this.name}}</div>
28+
<div class="cell api-table-event-param-cell api-table-content-cell api-table-content-cell-description"><strong class="bold" >type:</strong> {{this.type}} </br> <strong class="api-table-event-description bold">description:</strong> {{{this.description}}}</div>
29+
</div>
2830
</tr>
2931
{{/each}}
3032
{{/each}}

packages/main/src/List.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,14 @@ const metadata = {
171171
* in <code>SingleSelect</code> and <code>MultiSelect</code> modes.
172172
*
173173
* @event
174-
* @param {Array} items an array of the selected items.
174+
* @param {Array} selectedItems an array of the selected items.
175+
* @param {Array} previouslySelectedItems an array of the previously selected items.
175176
* @public
176177
*/
177178
selectionChange: {
178179
detail: {
179-
items: { type: Array },
180+
selectedItems: { type: Array },
181+
previouslySelectedItems: { type: Array },
180182
},
181183
},
182184
},
@@ -284,6 +286,7 @@ class List extends UI5Element {
284286
* ITEM SELECTION BASED ON THE CURRENT MODE
285287
*/
286288
onSelectionRequested(event) {
289+
const previouslySelectedItems = this.getSelectedItems();
287290
let selectionChange = false;
288291
this._selectionRequested = true;
289292

@@ -292,7 +295,7 @@ class List extends UI5Element {
292295
}
293296

294297
if (selectionChange) {
295-
this.fireEvent("selectionChange", { items: this.getSelectedItems() });
298+
this.fireEvent("selectionChange", { selectedItems: this.getSelectedItems(), previouslySelectedItems });
296299
}
297300
}
298301

packages/main/test/playground/css/api.css

+6
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,12 @@ pre.prettyprint>xmp {
263263
padding: 1rem 0.8rem 1rem 1rem;
264264
}
265265

266+
.api-table-content-event-params-wrapper {
267+
width: 100%;
268+
display: flex;
269+
align-items: flex-start;
270+
}
271+
266272
.cell.api-table-content-cell.api-table-content-cell-description {
267273
font-size: 14px;
268274
flex: 1 50%;

packages/main/test/sap/ui/webcomponents/main/pages/List.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ <h3 id="infoLbl">Items 3/3</h3>
223223
resetBtn.addEventListener("ui5-press", resetList);
224224

225225
singleSelectList.addEventListener("ui5-selectionChange", function (event) {
226-
var selectedItems = event.detail.items;
226+
var selectedItems = event.detail.selectedItems;
227227

228228
alert("Selection changed: " + selectedItems.map(item => item.id).join("/"));
229229
});
@@ -234,7 +234,7 @@ <h3 id="infoLbl">Items 3/3</h3>
234234
});
235235

236236
singleSelectEndList.addEventListener("ui5-selectionChange", function (event) {
237-
var selectedItems = event.detail.items;
237+
var selectedItems = event.detail.selectedItems;
238238
lblSelectionChange.innerHTML = "|Event] selectionChange :: " + selectedItems.map(item => item.id).join("/");
239239
});
240240

@@ -244,7 +244,7 @@ <h3 id="infoLbl">Items 3/3</h3>
244244
});
245245

246246
multiSelectList.addEventListener("ui5-selectionChange", function (event) {
247-
var selectedItems = event.detail.items;
247+
var selectedItems = event.detail.selectedItems;
248248
lblSelectionChange2.innerHTML = "Event] selectionChange :: " + selectedItems.map(item => item.id).join("/");
249249
});
250250
</script>

packages/main/test/sap/ui/webcomponents/main/pages/List_test_page.html

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
</ui5-list>
2121
<ui5-input id="itemPressResultField" placeholder="itemPress result"></ui5-input>
2222
<ui5-input id="selectionChangeResultField" placeholder="selectionChange result"></ui5-input>
23+
<ui5-input id="selectionChangeResultPreviousItemsParameter" placeholder="selectionChange previousSelection result"></ui5-input>
2324

2425
<ui5-list id="list1" header-text="API: GroupHeaderListItem">
2526
<ui5-li-groupheader>New Items</ui5-li-groupheader>
@@ -63,6 +64,10 @@
6364
selectionChangeCounter += 1;
6465
selectionChangeResultField.value = selectionChangeCounter;
6566
});
67+
68+
listEvents.addEventListener("ui5-selectionChange", function(event) {
69+
selectionChangeResultPreviousItemsParameter.value = event.detail.previouslySelectedItems[0].id;
70+
})
6671
</script>
6772
</body>
6873
</html>

packages/main/test/sap/ui/webcomponents/main/samples/List.sample.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ <h3>List in Single-selection Mode</h3>
6969

7070
<script>
7171
document.getElementById('country-selector').addEventListener("selectionChange", function (event) {
72-
var selectedItems = event.detail.items;
72+
var selectedItems = event.detail.selectedItems;
7373

7474
alert("The selected item: " + selectedItems[0].textContent);
7575
});
@@ -85,7 +85,7 @@ <h3>List in Single-selection Mode</h3>
8585

8686
<script>
8787
document.getElementById('country-selector').addEventListener("selectionChange", function (event) {
88-
var selectedItems = event.detail.items;
88+
var selectedItems = event.detail.selectedItems;
8989

9090
alert("The selected item: " + selectedItems[0].textContent);
9191
});

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

+11
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,17 @@ describe("Date Picker Tests", () => {
1717
assert.strictEqual(selectionChangeResultField.getProperty("value"), "1", "selectionChange event has been fired.");
1818
});
1919

20+
it("selectionChange events provides previousSelection item", () => {
21+
const list = $("#listEvents");
22+
const selectionChangeResultPreviousItemsParameter = $("#selectionChangeResultPreviousItemsParameter");
23+
const firstItem = $("#listEvents #country1");
24+
const secondItem = $("#listEvents #country2");
25+
26+
firstItem.click();
27+
28+
assert.strictEqual(secondItem.getProperty("id"), selectionChangeResultPreviousItemsParameter.getProperty("value"));
29+
});
30+
2031
it("header text", () => {
2132
list.id = "#list1";
2233

0 commit comments

Comments
 (0)