Skip to content

Commit 1a3fa61

Browse files
authored
feat(ui5-li): highlight property added (#8421)
Fixes: #8317
1 parent 87a08eb commit 1a3fa61

File tree

8 files changed

+123
-0
lines changed

8 files changed

+123
-0
lines changed

packages/main/src/ListItem.hbs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
{{> selectionElement}}
3434
{{/if}}
3535

36+
{{#if _hasHighlightColor}}
37+
<div class="ui5-li-highlight"></div>
38+
{{/if}}
39+
3640
<div part="content" id="{{_id}}-content" class="ui5-li-content">
3741
{{> imageBegin}}
3842
{{> iconBegin}}

packages/main/src/ListItem.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import event from "@ui5/webcomponents-base/dist/decorators/event.js";
99
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
1010
import "@ui5/webcomponents-icons/dist/decline.js";
1111
import "@ui5/webcomponents-icons/dist/edit.js";
12+
import HighlightTypes from "./types/HighlightTypes.js";
1213
import ListItemType from "./types/ListItemType.js";
1314
import ListMode from "./types/ListMode.js";
1415
import ListItemBase from "./ListItemBase.js";
@@ -165,6 +166,16 @@ abstract class ListItem extends ListItemBase {
165166
@property()
166167
title!: string;
167168

169+
/**
170+
* Defines the highlight state of the list items.
171+
* Available options are: `"None"` (by default), `"Success"`, `"Warning"`, `"Information"` and `"Error"`.
172+
* @default "None"
173+
* @public
174+
* @since 1.24
175+
*/
176+
@property({ type: HighlightTypes, defaultValue: HighlightTypes.None })
177+
highlight!: `${HighlightTypes}`;
178+
168179
/**
169180
* Indicates if the list item is actionable, e.g has hover and pressed effects.
170181
* @private
@@ -491,6 +502,10 @@ abstract class ListItem extends ListItemBase {
491502
};
492503
}
493504

505+
get _hasHighlightColor() {
506+
return this.highlight !== HighlightTypes.None;
507+
}
508+
494509
get hasConfigurableMode() {
495510
return true;
496511
}

packages/main/src/themes/ListItem.css

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,3 +222,30 @@
222222
:host [ui5-checkbox].ui5-li-singlesel-radiobtn {
223223
margin-right: var(--_ui5_list_item_cb_margin_right);
224224
}
225+
226+
/* highlight */
227+
.ui5-li-highlight {
228+
position: absolute;
229+
width: 0.375rem;
230+
bottom: 0;
231+
left: 0;
232+
top: 0;
233+
border-inline-end: 0.0625rem solid var(--ui5-listitem-background-color);
234+
box-sizing: border-box;
235+
}
236+
237+
:host([highlight="Error"]) .ui5-li-highlight {
238+
background: var(--sapNegativeTextColor);
239+
}
240+
241+
:host([highlight="Warning"]) .ui5-li-highlight {
242+
background: var(--sapCriticalTextColor);
243+
}
244+
245+
:host([highlight="Success"]) .ui5-li-highlight {
246+
background: var(--sapPositiveTextColor);
247+
}
248+
249+
:host([highlight="Information"]) .ui5-li-highlight {
250+
background: var(--sapInformativeTextColor);
251+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Different types of HighlightTypes .
3+
*
4+
* @public
5+
*/
6+
enum HighlightTypes {
7+
/**
8+
* @public
9+
*/
10+
None = "None",
11+
12+
/**
13+
* @public
14+
*/
15+
Success = "Success",
16+
17+
/**
18+
* @public
19+
*/
20+
Warning = "Warning",
21+
22+
/**
23+
* @public
24+
*/
25+
Error = "Error",
26+
27+
/**
28+
* @public
29+
*/
30+
Information = "Information",
31+
}
32+
33+
export default HighlightTypes;

packages/main/test/pages/List.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,15 @@ <h3 id="infoLbl">Items 3/3</h3>
219219

220220
<br/><br/>
221221

222+
<ui5-list header-text="API: Highlight">
223+
<ui5-li highlight="Error" image="./img/HT-1000.jpg" >Laptop HP</ui5-li>
224+
<ui5-li highlight="Information" image="./img/HT-1010.jpg" >laptop Lenovo</ui5-li>
225+
<ui5-li highlight="Success" image="./img/HT-1022.jpg" >IPhone 3</ui5-li>
226+
<ui5-li highlight="Warning" image="./img/HT-2002.jpg" >DVD set</ui5-li>
227+
</ui5-list>
228+
229+
<br/><br/>
230+
222231
<ui5-list header-text="API: noDataText" separators="None" no-data-text="No Data Available"></ui5-list>
223232

224233
<ui5-list header-text="API: CustomListItem" mode="SingleSelectEnd">

packages/main/test/pages/List_test_page.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,13 @@ <h2 id="testHeader">Test aria</h2>
322322
</ui5-li-custom>
323323
</ui5-list>
324324

325+
<ui5-list id="highlight">
326+
<ui5-li highlight="Error" image="./img/HT-1000.jpg" >Laptop HP</ui5-li>
327+
<ui5-li highlight="Information" image="./img/HT-1010.jpg" >laptop Lenovo</ui5-li>
328+
<ui5-li highlight="Success" image="./img/HT-1022.jpg" >IPhone 3</ui5-li>
329+
<ui5-li highlight="Warning" image="./img/HT-2002.jpg" >DVD set</ui5-li>
330+
</ui5-list>
331+
325332
<input id="customListItemSelectResult" value="0"/>
326333

327334
<script>

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,21 @@ describe("List Tests", () => {
616616
assert.strictEqual(rootTooltip, innerTooltip, "Tooltip of root element and title of inner li element are equal after runtime change.");
617617
});
618618

619+
it("Tests the highlight property", async () => {
620+
const listItem = await browser.$("#highlight ui5-li:nth-child(1)");
621+
const initialValueState = "Error";
622+
let highlightValue = await listItem.getProperty("highlight");
623+
624+
assert.strictEqual(highlightValue, initialValueState, "Highlight property is correctly set to the list item.");
625+
626+
const newValueState = "Information";
627+
await listItem.setProperty("highlight", "Information");
628+
highlightValue = await listItem.getProperty("highlight");
629+
630+
assert.strictEqual(highlightValue, newValueState, "Highlight property is correctly changed.");
631+
632+
});
633+
619634
it("Tests the growingButtonText property", async () => {
620635
const list = await browser.$("#infiniteScrollEx2");
621636
const btnText = "Custom text"

packages/playground/_stories/main/List/List.stories.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,3 +221,16 @@ export const SeparationTypes: StoryFn = () =>
221221
<ui5-li icon="shipping-status">Pending</ui5-li>
222222
<ui5-li icon="shipping-status">Declined</ui5-li>
223223
</ui5-list>`;
224+
225+
export const HighlightTypes: StoryFn = () =>
226+
html` <ui5-list
227+
header-text="Highlight Types"
228+
separators="Inner"
229+
class="full-width"
230+
>
231+
<ui5-li highlight="None">None</ui5-li>
232+
<ui5-li highlight="Success">Success</ui5-li>
233+
<ui5-li highlight="Warning">Warning</ui5-li>
234+
<ui5-li highlight="Error">Error</ui5-li>
235+
<ui5-li highlight="Information">Information</ui5-li>
236+
</ui5-list>`;

0 commit comments

Comments
 (0)