Skip to content

Commit ac8f8ce

Browse files
authoredMar 20, 2020
feat(ListItemType): add Detail type (#1323)
1 parent 6202ee9 commit ac8f8ce

File tree

6 files changed

+59
-5
lines changed

6 files changed

+59
-5
lines changed
 

‎packages/main/src/ListItem.hbs

+9
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@
2323
</div>
2424

2525
{{> iconEnd}}
26+
{{#if typeDetail}}
27+
<div class="ui5-li-detailbtn">
28+
<ui5-button
29+
design="Transparent"
30+
icon="edit"
31+
@click="{{onDetailClick}}"
32+
></ui5-button>
33+
</div>
34+
{{/if}}
2635

2736
{{#if placeSelectionElementAfter}}
2837
{{> selectionElement}}

‎packages/main/src/ListItem.js

+19-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { isSpace, isEnter } from "@ui5/webcomponents-base/dist/Keys.js";
22
import "@ui5/webcomponents-icons/dist/icons/decline.js";
3+
import "@ui5/webcomponents-icons/dist/icons/edit.js";
34
import ListItemType from "./types/ListItemType.js";
45
import ListMode from "./types/ListMode.js";
56
import ListItemBase from "./ListItemBase.js";
@@ -28,10 +29,10 @@ const metadata = {
2829

2930
/**
3031
* Defines the visual indication and behavior of the list items.
31-
* Available options are <code>Active</code> (by default) and <code>Inactive</code>.
32+
* Available options are <code>Active</code> (by default), <code>Inactive</code> and <code>Detail</code>.
3233
* <br><br>
3334
* <b>Note:</b> When set to <code>Active</code>, the item will provide visual response upon press and hover,
34-
* while with type <code>Inactive</code> - will not.
35+
* while with type <code>Inactive</code> and <code>Detail</code> - will not.
3536
*
3637
* @type {string}
3738
* @defaultvalue "Active"
@@ -69,8 +70,14 @@ const metadata = {
6970
},
7071
},
7172
events: {
73+
/**
74+
* Fired when the user clicks on the detail button when type is <code>Detail</code>.
75+
*
76+
* @event
77+
* @public
78+
*/
79+
detailClick: {},
7280
_press: {},
73-
_detailPress: {},
7481
_focused: {},
7582
_focusForward: {},
7683
},
@@ -220,6 +227,10 @@ class ListItem extends ListItemBase {
220227
this.fireEvent("_selectionRequested", { item: this, selectionComponentPressed: false });
221228
}
222229

230+
onDetailClick(event) {
231+
this.fireEvent("detailClick", { item: this, selected: this.selected });
232+
}
233+
223234
fireItemPress(event) {
224235
if (this.isInactive) {
225236
return;
@@ -229,7 +240,7 @@ class ListItem extends ListItemBase {
229240
}
230241

231242
get isInactive() {
232-
return this.type === ListItemType.Inactive;
243+
return this.type === ListItemType.Inactive || this.type === ListItemType.Detail;
233244
}
234245

235246
get placeSelectionElementBefore() {
@@ -257,6 +268,10 @@ class ListItem extends ListItemBase {
257268
get modeDelete() {
258269
return this._mode === ListMode.Delete;
259270
}
271+
272+
get typeDetail() {
273+
return this.type === ListItemType.Detail;
274+
}
260275
}
261276

262277
export default ListItem;

‎packages/main/src/types/ListItemType.js

+7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ const ListItemTypes = {
1818
* @type {Active}
1919
*/
2020
Active: "Active",
21+
22+
/**
23+
* Enables detail button of the list item that fires detailClick event.
24+
* @public
25+
* @type {Detail}
26+
*/
27+
Detail: "Detail",
2128
};
2229

2330
/**

‎packages/main/test/pages/List.html

+3-1
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,12 @@ <h2>ui5-list</h2>
7474

7575
<br/><br/>
7676

77-
<ui5-list header-text="API: ListItem type='Active/Inactive'" mode="SingleSelect">
77+
<ui5-list header-text="API: ListItem type='Active/Inactive/Detail'" mode="SingleSelect">
7878
<ui5-li >Active item - press</ui5-li>
7979
<ui5-li >Active item - press</ui5-li>
8080
<ui5-li selected type="Inactive">Inactive item</ui5-li>
8181
<ui5-li type="Inactive">Inactive item</ui5-li>
82+
<ui5-li type="Detail">Detail item</ui5-li>
8283
</ui5-list>
8384

8485
<br/><br/>
@@ -147,6 +148,7 @@ <h3 id="infoLbl">Items 3/3</h3>
147148
<ui5-li id="arg">Argentina</ui5-li>
148149
<ui5-li id="bg">Bulgaria</ui5-li>
149150
<ui5-li id="ch">China</ui5-li>
151+
<ui5-li type="Detail">Detail item</ui5-li>
150152
</ui5-list>
151153

152154
<br/><br/>

‎packages/main/test/pages/List_test_page.html

+11
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@
113113
<ui5-li type="Inactive">Inactive item</ui5-li>
114114
</ui5-list>
115115

116+
<br/><br/>
117+
<span id="detailPressCounter">0</span>
118+
<ui5-list header-text="API: ListItem type='Detail'">
119+
<ui5-li id="detailListItem" type="Detail">Detail item</ui5-li>
120+
<ui5-li >Normal item</ui5-li>
121+
</ui5-list>
122+
116123
<script>
117124
'use strict';
118125

@@ -158,6 +165,10 @@
158165
}
159166
loadMoreResult.value= ++loadMoreCounter;
160167
});
168+
169+
detailListItem.addEventListener("ui5-detailClick", (e) => {
170+
detailPressCounter.innerHTML = parseInt(detailPressCounter.innerHTML) + 1;
171+
});
161172
</script>
162173
</body>
163174
</html>

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

+10
Original file line numberDiff line numberDiff line change
@@ -215,4 +215,14 @@ describe("List Tests", () => {
215215

216216
assert.strictEqual(loadMoreResult.getAttribute("value"), "1", "The event loadMore is fired.");
217217
});
218+
219+
it("detailPress event is fired", () => {
220+
const detailCounterResult = $("#detailPressCounter");
221+
const firstItem = $("#detailListItem");
222+
const detailButton = firstItem.shadow$(".ui5-li-detailbtn")
223+
224+
detailButton.click();
225+
226+
assert.strictEqual(detailCounterResult.getProperty("innerHTML"), "1", "detailClick event has been fired once");
227+
});
218228
});

0 commit comments

Comments
 (0)
Please sign in to comment.