@sapudex/web-components 2.22.0 → 2.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cypress/specs/CountrySelector.cy.tsx +158 -144
- package/cypress/specs/EventRibbon.cy.tsx +3 -1
- package/cypress/specs/SelectBox.cy.tsx +173 -206
- package/cypress/specs/Tag.cy.tsx +1 -1
- package/cypress/specs/TextField.cy.tsx +15 -0
- package/cypress/specs/Textarea.cy.tsx +15 -33
- package/dist/CountrySelector.d.ts +25 -142
- package/dist/CountrySelector.js +91 -268
- package/dist/CountrySelector.js.map +1 -1
- package/dist/FilterMenu.d.ts +14 -2
- package/dist/FilterMenu.js +11 -1
- package/dist/FilterMenu.js.map +1 -1
- package/dist/List.js +2 -3
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeaderBase.d.ts +1 -0
- package/dist/ListGroupHeaderBase.js +3 -0
- package/dist/ListGroupHeaderBase.js.map +1 -1
- package/dist/ListItemBase.d.ts +12 -0
- package/dist/ListItemBase.js +17 -2
- package/dist/ListItemBase.js.map +1 -1
- package/dist/MediaPlayer.js +2 -0
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/MediaPlayerTemplate.js +4 -4
- package/dist/MediaPlayerTemplate.js.map +1 -1
- package/dist/SearchableListBase.d.ts +23 -16
- package/dist/SearchableListBase.js +48 -72
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SelectBase.d.ts +193 -0
- package/dist/SelectBase.js +428 -0
- package/dist/SelectBase.js.map +1 -0
- package/dist/SelectBox.d.ts +30 -152
- package/dist/SelectBox.js +139 -348
- package/dist/SelectBox.js.map +1 -1
- package/dist/TagGroup.d.ts +23 -5
- package/dist/TagGroup.js +37 -16
- package/dist/TagGroup.js.map +1 -1
- package/dist/TagTemplate.js +4 -2
- package/dist/TagTemplate.js.map +1 -1
- package/dist/TextArea.d.ts +1 -1
- package/dist/TextArea.js +5 -5
- package/dist/TextArea.js.map +1 -1
- package/dist/TextAreaTemplate.d.ts +2 -0
- package/dist/TextAreaTemplate.js +13 -0
- package/dist/TextAreaTemplate.js.map +1 -0
- package/dist/TextField.d.ts +29 -4
- package/dist/TextField.js +32 -16
- package/dist/TextField.js.map +1 -1
- package/dist/TextFieldTemplate.d.ts +2 -0
- package/dist/TextFieldTemplate.js +14 -0
- package/dist/TextFieldTemplate.js.map +1 -0
- package/dist/assets/{InputSuggestions-By00xQan.js → InputSuggestions-C8m6N2-d.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-BGtoxRbA.js → ListItemStandardExpandableTextTemplate-BwD5bYhw.js} +1 -1
- package/dist/assets/{bundle.esm-9yDdQqR5.js → bundle.esm-hGsUwmUy.js} +218 -217
- package/dist/css/themes/CountrySelector.css +1 -1
- package/dist/css/themes/EventRibbon.css +1 -1
- package/dist/css/themes/ListItem.css +1 -1
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/MastheadMobileMenu.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/SelectBase.css +1 -0
- package/dist/css/themes/SelectBox.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/TagGroup.css +1 -1
- package/dist/css/themes/TextField.css +1 -1
- package/dist/custom-elements-internal.json +1088 -1284
- package/dist/custom-elements.json +284 -934
- package/dist/generated/templates/CountrySelectorTemplate.lit.js +3 -3
- package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SelectBoxTemplate.lit.js +10 -9
- package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
- package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
- package/dist/generated/themes/CountrySelector.css.js +1 -1
- package/dist/generated/themes/CountrySelector.css.js.map +1 -1
- package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
- package/dist/generated/themes/EventRibbon.css.js +1 -1
- package/dist/generated/themes/EventRibbon.css.js.map +1 -1
- package/dist/generated/themes/ListItem.css.d.ts +1 -1
- package/dist/generated/themes/ListItem.css.js +1 -1
- package/dist/generated/themes/ListItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
- package/dist/generated/themes/MastheadItem.css.js +1 -1
- package/dist/generated/themes/MastheadItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadMobileMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadMobileMenu.css.js +1 -1
- package/dist/generated/themes/MastheadMobileMenu.css.js.map +1 -1
- package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
- package/dist/generated/themes/RatingIndicator.css.js +1 -1
- package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
- package/dist/generated/themes/Search.css.d.ts +1 -1
- package/dist/generated/themes/Search.css.js +1 -1
- package/dist/generated/themes/Search.css.js.map +1 -1
- package/dist/generated/themes/SelectBase.css.d.ts +2 -0
- package/dist/generated/themes/SelectBase.css.js +8 -0
- package/dist/generated/themes/SelectBase.css.js.map +1 -0
- package/dist/generated/themes/SelectBox.css.d.ts +1 -1
- package/dist/generated/themes/SelectBox.css.js +1 -1
- package/dist/generated/themes/SelectBox.css.js.map +1 -1
- package/dist/generated/themes/Slider.css.d.ts +1 -1
- package/dist/generated/themes/Slider.css.js +1 -1
- package/dist/generated/themes/Slider.css.js.map +1 -1
- package/dist/generated/themes/TagGroup.css.d.ts +1 -1
- package/dist/generated/themes/TagGroup.css.js +1 -1
- package/dist/generated/themes/TagGroup.css.js.map +1 -1
- package/dist/generated/themes/TextField.css.d.ts +1 -1
- package/dist/generated/themes/TextField.css.js +1 -1
- package/dist/generated/themes/TextField.css.js.map +1 -1
- package/dist/types/common.d.ts +1 -1
- package/dist/types/common.js +1 -1
- package/dist/types/common.js.map +1 -1
- package/dist/vscode.html-custom-data.json +23 -234
- package/dist/web-types.json +256 -811
- package/package.json +1 -1
- package/src/CountrySelector.hbs +6 -61
- package/src/CountrySelector.ts +93 -375
- package/src/FilterMenu.ts +13 -3
- package/src/List.ts +2 -3
- package/src/ListGroupHeaderBase.ts +4 -0
- package/src/ListItem.hbs +0 -1
- package/src/ListItemBase.ts +17 -3
- package/src/MediaPlayer.ts +2 -0
- package/src/MediaPlayerTemplate.tsx +0 -1
- package/src/SearchableListBase.ts +68 -83
- package/src/SelectBase.ts +580 -0
- package/src/SelectBox.hbs +118 -107
- package/src/SelectBox.ts +155 -445
- package/src/TagGroup.ts +53 -19
- package/src/TagTemplate.tsx +4 -2
- package/src/TextArea.ts +5 -5
- package/src/TextAreaTemplate.tsx +67 -0
- package/src/TextField.ts +57 -24
- package/src/TextFieldTemplate.tsx +90 -0
- package/src/generated/templates/CountrySelectorTemplate.lit.ts +2 -2
- package/src/generated/templates/ListItemTemplate.lit.ts +1 -1
- package/src/generated/templates/SelectBoxTemplate.lit.ts +10 -9
- package/src/generated/themes/CountrySelector.css.ts +1 -1
- package/src/generated/themes/EventRibbon.css.ts +1 -1
- package/src/generated/themes/ListItem.css.ts +1 -1
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/MastheadMobileMenu.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/SelectBase.css.ts +9 -0
- package/src/generated/themes/SelectBox.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/TagGroup.css.ts +1 -1
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/themes/CountrySelector.css +42 -115
- package/src/themes/EventRibbon.css +21 -13
- package/src/themes/ListItem.css +6 -0
- package/src/themes/MastheadItem.css +0 -2
- package/src/themes/MastheadMobileMenu.css +2 -0
- package/src/themes/Search.css +0 -1
- package/src/themes/SelectBase.css +239 -0
- package/src/themes/SelectBox.css +13 -195
- package/src/themes/TagGroup.css +0 -1
- package/src/themes/TextField.css +7 -7
- package/src/types/common.ts +1 -1
- package/dist/generated/templates/TextAreaTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TextAreaTemplate.lit.js +0 -13
- package/dist/generated/templates/TextAreaTemplate.lit.js.map +0 -1
- package/dist/generated/templates/TextFieldTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TextFieldTemplate.lit.js +0 -14
- package/dist/generated/templates/TextFieldTemplate.lit.js.map +0 -1
- package/src/TextArea.hbs +0 -54
- package/src/TextField.hbs +0 -78
- package/src/generated/templates/TextAreaTemplate.lit.ts +0 -17
- package/src/generated/templates/TextFieldTemplate.lit.ts +0 -18
package/src/List.ts
CHANGED
|
@@ -235,7 +235,7 @@ class UDExList extends UI5Element {
|
|
|
235
235
|
|
|
236
236
|
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
237
237
|
this.setTabIndexByIndex(items, previousSelectIndex);
|
|
238
|
-
items[previousSelectIndex].focus();
|
|
238
|
+
setTimeout(() => { items[previousSelectIndex].focus(); }, 0);
|
|
239
239
|
}
|
|
240
240
|
|
|
241
241
|
handleDownArrow(e: KeyboardEvent): void {
|
|
@@ -267,7 +267,7 @@ class UDExList extends UI5Element {
|
|
|
267
267
|
|
|
268
268
|
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
269
269
|
this.setTabIndexByIndex(items, nextSelectIndex);
|
|
270
|
-
items[nextSelectIndex].focus();
|
|
270
|
+
setTimeout(() => { items[nextSelectIndex].focus(); }, 0);
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
handleHomeKey(e: KeyboardEvent): void {
|
|
@@ -319,7 +319,6 @@ class UDExList extends UI5Element {
|
|
|
319
319
|
|
|
320
320
|
handleLetterKey(e: KeyboardEvent): void {
|
|
321
321
|
const letterKey = e.key;
|
|
322
|
-
e.stopPropagation();
|
|
323
322
|
e.preventDefault();
|
|
324
323
|
this._focusHandler.focusMatchingListItem(letterKey);
|
|
325
324
|
}
|
|
@@ -189,6 +189,10 @@ class UDExListGroupHeaderBase extends UDExListItemBase {
|
|
|
189
189
|
const controlledClassName = this.controlled ? `${listGroupHeaderClass}_controlled` : "";
|
|
190
190
|
return `${listGroupHeaderClass} ${this._additionalClassName} ${controlledClassName}`;
|
|
191
191
|
}
|
|
192
|
+
|
|
193
|
+
get listItem(): UDExListItemBase {
|
|
194
|
+
return this.shadowRoot!.querySelector<UDExListItemBase>("[udex-list-item]")!;
|
|
195
|
+
}
|
|
192
196
|
}
|
|
193
197
|
|
|
194
198
|
export default UDExListGroupHeaderBase;
|
package/src/ListItem.hbs
CHANGED
package/src/ListItemBase.ts
CHANGED
|
@@ -32,7 +32,8 @@ type UDExListItemBaseEventDetail = {
|
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* Fired event when the user click on a first icon.
|
|
35
|
-
*
|
|
35
|
+
* @param { PointerEvent } originalEvent The original event object
|
|
36
|
+
* @param { HTMLElement } item The list item
|
|
36
37
|
* @public
|
|
37
38
|
* @param { PointerEvent } originalEvent The original event object
|
|
38
39
|
* @param { HTMLElement } item The list item
|
|
@@ -40,7 +41,8 @@ type UDExListItemBaseEventDetail = {
|
|
|
40
41
|
@event("first-icon-click", { bubbles: true })
|
|
41
42
|
/**
|
|
42
43
|
* Fired event when the user click on a second icon.
|
|
43
|
-
*
|
|
44
|
+
* @param { PointerEvent } originalEvent The original event object
|
|
45
|
+
* @param { HTMLElement } item The list item
|
|
44
46
|
* @public
|
|
45
47
|
* @param { PointerEvent } originalEvent The original event object
|
|
46
48
|
* @param { HTMLElement } item The list item
|
|
@@ -137,11 +139,23 @@ class UDExListItemBase extends UI5Element {
|
|
|
137
139
|
@property()
|
|
138
140
|
type: `${UDExListStyleType}` = UDExListStyleType.None;
|
|
139
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Defines the icon of the component.
|
|
144
|
+
*
|
|
145
|
+
* @default ""
|
|
146
|
+
* @private
|
|
147
|
+
*/
|
|
140
148
|
@property({ type: String })
|
|
141
149
|
_icon: string = "";
|
|
142
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Defines the tab index of the component.
|
|
153
|
+
*
|
|
154
|
+
* @default ""
|
|
155
|
+
* @private
|
|
156
|
+
*/
|
|
143
157
|
@property({ type: String })
|
|
144
|
-
_tabIndex
|
|
158
|
+
_tabIndex: string = "";
|
|
145
159
|
|
|
146
160
|
_fireIconClickEvent(e: PointerEvent): void {
|
|
147
161
|
const target = e.target as HTMLElement;
|
package/src/MediaPlayer.ts
CHANGED
|
@@ -334,6 +334,7 @@ class UDExMediaPlayer extends UI5Element {
|
|
|
334
334
|
player.on("ready", () => {
|
|
335
335
|
this.checkCaptionsAvailability(player);
|
|
336
336
|
this.applyScrollIntoTheView();
|
|
337
|
+
this.player.src(this.source);
|
|
337
338
|
this.fireDecoratorEvent("videoReady");
|
|
338
339
|
});
|
|
339
340
|
|
|
@@ -458,6 +459,7 @@ class UDExMediaPlayer extends UI5Element {
|
|
|
458
459
|
|
|
459
460
|
getOptionsValue() {
|
|
460
461
|
const baseOptions = {
|
|
462
|
+
type: this.type,
|
|
461
463
|
playbackRates: [1, 1.5, 2],
|
|
462
464
|
controls: true,
|
|
463
465
|
poster: this.poster,
|
|
@@ -35,7 +35,6 @@ function renderStandardTemplate(this: UDExMediaPlayer, rootClass: string) {
|
|
|
35
35
|
<video-js
|
|
36
36
|
id={this.playerElementId}
|
|
37
37
|
class={`${rootClass} ${this.aspectRatioClass}`}>
|
|
38
|
-
<source src={this.source} type={this.type} />
|
|
39
38
|
{this._tracks.map((element: HTMLTrackElement, index: number) => {
|
|
40
39
|
const {
|
|
41
40
|
"default": isDefault, kind, src, srclang, label
|
|
@@ -3,16 +3,17 @@ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
|
3
3
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
4
|
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
5
5
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
6
|
+
import { cleanLabel } from "./utils/listItemLabelUtils.js";
|
|
7
|
+
import { UDExListMode } from "./types/List.js";
|
|
6
8
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
7
9
|
import type Popover from "@ui5/webcomponents/dist/Popover.js";
|
|
8
|
-
import {
|
|
9
|
-
import { cleanLabel } from "./utils/listItemLabelUtils.js";
|
|
10
|
+
import type { UDExProcessedItem } from "./types/SearchableListBase.js";
|
|
10
11
|
import type UDExSearch from "./Search.js";
|
|
11
12
|
import type UDExListItemBase from "./ListItemBase.js";
|
|
12
13
|
import type UDExListGroupHeaderBase from "./ListGroupHeaderBase.js";
|
|
13
|
-
import
|
|
14
|
+
import type UDExList from "./List.js";
|
|
15
|
+
import type UDExListItem from "./ListItem.js";
|
|
14
16
|
import type UDExFilterMenuItem from "./FilterMenuItem.js";
|
|
15
|
-
import type { UDExProcessedItem } from "./types/SearchableListBase.js";
|
|
16
17
|
import { SHOW_SEARCH_AFTER_COUNT, UDExPopoverPart } from "./types/SearchableListBase.js";
|
|
17
18
|
import { NO_MATCHES_FOUND, RESULT_RETURNED } from "./generated/i18n/i18n-defaults.js";
|
|
18
19
|
|
|
@@ -49,7 +50,7 @@ export type UDExSearchableListBaseEvents = {
|
|
|
49
50
|
* @class
|
|
50
51
|
*
|
|
51
52
|
* A class to serve as a foundation
|
|
52
|
-
* for the <code>UDExFilterMenu</code>
|
|
53
|
+
* for the <code>UDExFilterMenu</code> and <code>UDExSelectBox</code> classes.
|
|
53
54
|
*
|
|
54
55
|
* @constructor
|
|
55
56
|
* @author SAP SE
|
|
@@ -59,7 +60,8 @@ export type UDExSearchableListBaseEvents = {
|
|
|
59
60
|
|
|
60
61
|
/**
|
|
61
62
|
* Fired event when the user click on an item on the list.
|
|
62
|
-
*
|
|
63
|
+
* @param {Array<UDExListItemBase>} selectedItems The selected items.
|
|
64
|
+
* @param {UDExListItemBase | UDExListGroupHeaderBase | null | undefined} item The clicked item.
|
|
63
65
|
* @public
|
|
64
66
|
* @param {Array<UDExListItemBase>} selectedItems The selected items.
|
|
65
67
|
* @param {UDExListItemBase | UDExListGroupHeaderBase | null | undefined} item The clicked item.
|
|
@@ -76,7 +78,7 @@ export type UDExSearchableListBaseEvents = {
|
|
|
76
78
|
|
|
77
79
|
/**
|
|
78
80
|
* Fired event when the user clicks on the submitted icon in the search.
|
|
79
|
-
*
|
|
81
|
+
* @param {Array<UDExListItemBase>} selectedItems The selected items.
|
|
80
82
|
* @public
|
|
81
83
|
* @param {Array<UDExListItemBase>} selectedItems The selected items.
|
|
82
84
|
*
|
|
@@ -92,7 +94,7 @@ export type UDExSearchableListBaseEvents = {
|
|
|
92
94
|
|
|
93
95
|
/**
|
|
94
96
|
* Fired event when the user submitted the value in the search.
|
|
95
|
-
*
|
|
97
|
+
* @param {string} value The search value.
|
|
96
98
|
* @public
|
|
97
99
|
* @param {string} value The search value.
|
|
98
100
|
*/
|
|
@@ -100,7 +102,8 @@ export type UDExSearchableListBaseEvents = {
|
|
|
100
102
|
|
|
101
103
|
/**
|
|
102
104
|
* Fired event when the user clicks on the first icon.
|
|
103
|
-
*
|
|
105
|
+
* @param { PointerEvent } originalEvent The original event object
|
|
106
|
+
* @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
|
|
104
107
|
* @public
|
|
105
108
|
* @param { PointerEvent } originalEvent The original event object
|
|
106
109
|
* @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
|
|
@@ -109,7 +112,8 @@ export type UDExSearchableListBaseEvents = {
|
|
|
109
112
|
|
|
110
113
|
/**
|
|
111
114
|
* Fired event when the user clicks on the second icon.
|
|
112
|
-
*
|
|
115
|
+
* @param { PointerEvent } originalEvent The original event object
|
|
116
|
+
* @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
|
|
113
117
|
* @public
|
|
114
118
|
* @param { PointerEvent } originalEvent The original event object
|
|
115
119
|
* @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
|
|
@@ -225,7 +229,7 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
225
229
|
items!: Array<UDExListItemBase | UDExListGroupHeaderBase>;
|
|
226
230
|
|
|
227
231
|
/**
|
|
228
|
-
* Defines the default accessible role for the list
|
|
232
|
+
* Defines the default accessible role for the list component.
|
|
229
233
|
*
|
|
230
234
|
* @default "list"
|
|
231
235
|
* @public
|
|
@@ -233,6 +237,12 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
233
237
|
@property({ type: String })
|
|
234
238
|
defaultAccessibleRole: string = "list";
|
|
235
239
|
|
|
240
|
+
/**
|
|
241
|
+
* Defines the filtered items for the component.
|
|
242
|
+
*
|
|
243
|
+
* @default []
|
|
244
|
+
* @private
|
|
245
|
+
*/
|
|
236
246
|
@property({ type: Object })
|
|
237
247
|
_filteredItems!: Array<UDExProcessedItem>;
|
|
238
248
|
|
|
@@ -255,16 +265,11 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
255
265
|
}
|
|
256
266
|
|
|
257
267
|
onItemPress(e:CustomEvent) {
|
|
258
|
-
const dropdownItemId: string = this.getDataTokenId(e);
|
|
268
|
+
const dropdownItemId: string = this.getDataTokenId(e.detail.item as UDExListItemBase);
|
|
259
269
|
this.handleDropdownItemPress(dropdownItemId);
|
|
260
270
|
this.fireSelectionChange(dropdownItemId);
|
|
261
271
|
}
|
|
262
272
|
|
|
263
|
-
activateHeaderAndSetAllItems(item: UDExListGroupHeaderBase) {
|
|
264
|
-
item.activateHeader();
|
|
265
|
-
item.setAllItems(false);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
273
|
handleDropdownItemPress(dropdownItemId: string) {
|
|
269
274
|
this.getProcessedItems().forEach(({ item, groupItems, isGroup }) => {
|
|
270
275
|
if (isGroup) {
|
|
@@ -301,28 +306,31 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
301
306
|
}
|
|
302
307
|
|
|
303
308
|
onHeaderPress(e:CustomEvent) {
|
|
304
|
-
|
|
309
|
+
const item = e.detail.item as UDExListItemBase;
|
|
310
|
+
const id = this.getDataTokenId(item);
|
|
311
|
+
this.handleGroupHeaderSelection(id);
|
|
305
312
|
this.syncFilteredItems();
|
|
306
|
-
this.fireSelectionChange(
|
|
313
|
+
this.fireSelectionChange(id);
|
|
307
314
|
}
|
|
308
315
|
|
|
309
316
|
onSelectAllHeaderPress(e:CustomEvent) {
|
|
310
|
-
|
|
317
|
+
const item = e.detail.item as UDExListItemBase;
|
|
318
|
+
const id = this.getDataTokenId(item);
|
|
319
|
+
this.handleGroupHeaderSelection(id);
|
|
311
320
|
this.syncFilteredItems();
|
|
312
321
|
this.fireDecoratorEvent("select-all");
|
|
313
322
|
}
|
|
314
323
|
|
|
315
|
-
handleGroupHeaderSelection(
|
|
316
|
-
const headerItemId = this.getDataTokenId(e);
|
|
324
|
+
handleGroupHeaderSelection(id: string): void {
|
|
317
325
|
this.getProcessedItems().forEach(({ item }) => {
|
|
318
|
-
if (item._id ===
|
|
326
|
+
if (item._id === id) {
|
|
319
327
|
(item as UDExListGroupHeaderBase).handleSelectionGroupState();
|
|
320
328
|
}
|
|
321
329
|
});
|
|
322
330
|
}
|
|
323
331
|
|
|
324
|
-
onSearch(
|
|
325
|
-
const searchValue: string =
|
|
332
|
+
onSearch(value: string) {
|
|
333
|
+
const searchValue: string = value;
|
|
326
334
|
this._shouldFilterItems = true;
|
|
327
335
|
this._filteredItems = this.filterItems(this.getProcessedItems(), searchValue);
|
|
328
336
|
const items = this.getFlattenItemsArray(this._filteredItems);
|
|
@@ -413,15 +421,6 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
413
421
|
}
|
|
414
422
|
}
|
|
415
423
|
|
|
416
|
-
handleKeyDown(e: KeyboardEvent) {
|
|
417
|
-
if (isUp(e)) {
|
|
418
|
-
this.handlePreviousItemFocus(e);
|
|
419
|
-
}
|
|
420
|
-
if (isDown(e)) {
|
|
421
|
-
this.handleNextListItemFocus(e);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
|
|
425
424
|
getSlottedItems(items: Array<UDExListItemBase | UDExListGroupHeaderBase>): Array<UDExListItemBase | UDExListGroupHeaderBase> {
|
|
426
425
|
const arr: Array<UDExListItemBase | UDExListGroupHeaderBase> = [];
|
|
427
426
|
items.forEach(item => {
|
|
@@ -462,31 +461,6 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
462
461
|
});
|
|
463
462
|
}
|
|
464
463
|
|
|
465
|
-
// moves focus to next list item
|
|
466
|
-
handlePreviousItemFocus(e: KeyboardEvent) {
|
|
467
|
-
const item = e.target as HTMLElement;
|
|
468
|
-
const listItems = this.getDomListItems();
|
|
469
|
-
const currentSelectIndex = this.getCurrentIndex(item);
|
|
470
|
-
const previousSelectIndex = currentSelectIndex - 1;
|
|
471
|
-
if (currentSelectIndex > 0) {
|
|
472
|
-
e.preventDefault();
|
|
473
|
-
(listItems[previousSelectIndex] as HTMLElement).focus();
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
// moves focus to previous list item
|
|
478
|
-
handleNextListItemFocus(e: KeyboardEvent) {
|
|
479
|
-
const item = e.target as HTMLElement;
|
|
480
|
-
const listItems = this.getDomListItems();
|
|
481
|
-
const lastItemIndex = listItems.length - 1;
|
|
482
|
-
const currentSelectIndex = this.getCurrentIndex(item);
|
|
483
|
-
const nextSelectIndex = currentSelectIndex + 1;
|
|
484
|
-
if (nextSelectIndex <= lastItemIndex) {
|
|
485
|
-
e.preventDefault();
|
|
486
|
-
(listItems[nextSelectIndex] as HTMLElement).focus();
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
|
|
490
464
|
fireFirstIconClickEvent(e: CustomEvent): void {
|
|
491
465
|
this._fireIconClickEvent("first-icon-click", e);
|
|
492
466
|
}
|
|
@@ -496,7 +470,8 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
496
470
|
}
|
|
497
471
|
|
|
498
472
|
private _fireIconClickEvent(eventName: "first-icon-click" | "second-icon-click", e: CustomEvent): void {
|
|
499
|
-
const
|
|
473
|
+
const item = e.detail.item as UDExListItemBase;
|
|
474
|
+
const id = this.getDataTokenId(item);
|
|
500
475
|
this.fireDecoratorEvent(eventName, {
|
|
501
476
|
originalEvent: e.detail.originalEvent,
|
|
502
477
|
item: this.getItemFromList(id),
|
|
@@ -515,47 +490,44 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
515
490
|
});
|
|
516
491
|
}
|
|
517
492
|
|
|
518
|
-
getCurrentIndex(item:
|
|
493
|
+
getCurrentIndex(item: UDExListItem): number {
|
|
519
494
|
return this.getDomListItems().indexOf(item);
|
|
520
495
|
}
|
|
521
496
|
|
|
522
|
-
|
|
523
|
-
return this.shadowRoot!.querySelector<
|
|
497
|
+
getList(): UDExList {
|
|
498
|
+
return this.shadowRoot!.querySelector<UDExList>("[udex-list]")!;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
getSearch(): UDExSearch | HTMLInputElement {
|
|
502
|
+
return this.shadowRoot!.querySelector<UDExSearch>("[udex-search]")! || this.shadowRoot!.querySelector<HTMLInputElement>(".udex-text-field__search")!;
|
|
524
503
|
}
|
|
525
504
|
|
|
526
505
|
getPopover(): Popover {
|
|
527
506
|
return this.shadowRoot!.querySelector<Popover>("[ui5-popover]")!;
|
|
528
507
|
}
|
|
529
508
|
|
|
530
|
-
getDomListItems():
|
|
509
|
+
getDomListItems(): UDExListItem[] {
|
|
531
510
|
const elementList = this.shadowRoot!.querySelector("[udex-list]") as HTMLElement;
|
|
532
511
|
return elementList ? Array.from(elementList.querySelectorAll("[udex-list-item]")) : [];
|
|
533
512
|
}
|
|
534
513
|
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
item.mode = this.mode;
|
|
538
|
-
item.controlled = this.isControlled;
|
|
539
|
-
});
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
getDataTokenId(e:CustomEvent): string {
|
|
543
|
-
return e.detail.item.getAttribute("data-token-id") as string;
|
|
514
|
+
getDataTokenId(item: UDExListItemBase): string {
|
|
515
|
+
return item.getAttribute("data-token-id") as string;
|
|
544
516
|
}
|
|
545
517
|
|
|
546
518
|
getProcessedItems(): Array<UDExProcessedItem> {
|
|
547
519
|
return this.items.map(item => {
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
520
|
+
const isGroup = item.isGroup;
|
|
521
|
+
const groupItems = isGroup ? (item as UDExListGroupHeaderBase).getItems() : [];
|
|
522
|
+
|
|
523
|
+
if (isGroup) {
|
|
524
|
+
this._setItemsModeAndControl(groupItems);
|
|
551
525
|
}
|
|
526
|
+
|
|
552
527
|
item.mode = this.mode;
|
|
553
528
|
item.controlled = this.isControlled;
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
groupItems: item.isGroup ? (item as UDExListGroupHeaderBase).getItems() : [],
|
|
557
|
-
isGroup: item.isGroup,
|
|
558
|
-
};
|
|
529
|
+
|
|
530
|
+
return { item, groupItems, isGroup };
|
|
559
531
|
});
|
|
560
532
|
}
|
|
561
533
|
|
|
@@ -573,6 +545,13 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
573
545
|
content.style.maxHeight = this.height || "";
|
|
574
546
|
}
|
|
575
547
|
|
|
548
|
+
_setItemsModeAndControl(items: Array<UDExFilterMenuItem>) {
|
|
549
|
+
items.forEach(item => {
|
|
550
|
+
item.mode = this.mode;
|
|
551
|
+
item.controlled = this.isControlled;
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
|
|
576
555
|
get getNoResultText(): string {
|
|
577
556
|
const hasTextProperty = this.noResultText !== undefined && this.noResultText.length > 0;
|
|
578
557
|
return hasTextProperty ? this.noResultText : this.noMatchesFoundText;
|
|
@@ -591,7 +570,8 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
591
570
|
}
|
|
592
571
|
|
|
593
572
|
get selectedItems(): Array<UDExListItemBase> {
|
|
594
|
-
|
|
573
|
+
const selectedItems: Array<UDExListItemBase> = this.getSlottedItems(this.items).filter(({ selected }) => selected);
|
|
574
|
+
return selectedItems;
|
|
595
575
|
}
|
|
596
576
|
|
|
597
577
|
get modeMultiSelect(): boolean {
|
|
@@ -621,7 +601,8 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
621
601
|
}
|
|
622
602
|
|
|
623
603
|
get showSearch(): boolean {
|
|
624
|
-
|
|
604
|
+
const isSearchVisible = this.showSearchInput || (this.isSearchActive && !this.modeRadioGroup);
|
|
605
|
+
return !this.hideDropdownSearch && isSearchVisible;
|
|
625
606
|
}
|
|
626
607
|
|
|
627
608
|
get isSearchActive(): boolean {
|
|
@@ -651,6 +632,10 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
651
632
|
|
|
652
633
|
return "none";
|
|
653
634
|
}
|
|
635
|
+
|
|
636
|
+
get hideDropdownSearch(): boolean {
|
|
637
|
+
return false;
|
|
638
|
+
}
|
|
654
639
|
}
|
|
655
640
|
|
|
656
641
|
export default UDExSearchableListBase;
|