@sapudex/web-components 2.21.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/bundle.esm.js +2 -0
- package/cypress/specs/CountrySelector.cy.tsx +158 -144
- package/cypress/specs/EventRibbon.cy.tsx +3 -1
- package/cypress/specs/ImageGridCloud.cy.tsx +78 -0
- package/cypress/specs/ImageGridCloudItem.cy.tsx +29 -0
- 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/cypress/support/component-imports.instrumented.ts +4 -0
- package/cypress/support/component-imports.src.ts +4 -0
- package/dist/Accordion.js +1 -0
- package/dist/Accordion.js.map +1 -1
- package/dist/AccordionItem.js +2 -0
- package/dist/AccordionItem.js.map +1 -1
- package/dist/AssetsVariables.js +2 -1
- package/dist/AssetsVariables.js.map +1 -1
- package/dist/Breadcrumbs.js +5 -0
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/ContactItem.js +2 -0
- package/dist/ContactItem.js.map +1 -1
- package/dist/CountrySelector.d.ts +25 -142
- package/dist/CountrySelector.js +91 -267
- package/dist/CountrySelector.js.map +1 -1
- package/dist/DatePicker.js +2 -1
- package/dist/DatePicker.js.map +1 -1
- package/dist/FilterMenu.d.ts +14 -2
- package/dist/FilterMenu.js +13 -1
- package/dist/FilterMenu.js.map +1 -1
- package/dist/Footer.js +27 -0
- package/dist/Footer.js.map +1 -1
- package/dist/ImageGridCloud.d.ts +76 -0
- package/dist/ImageGridCloud.js +153 -0
- package/dist/ImageGridCloud.js.map +1 -0
- package/dist/ImageGridCloudItem.d.ts +35 -0
- package/dist/ImageGridCloudItem.js +49 -0
- package/dist/ImageGridCloudItem.js.map +1 -0
- package/dist/ImageGridCloudItemTemplate.d.ts +2 -0
- package/dist/ImageGridCloudItemTemplate.js +5 -0
- package/dist/ImageGridCloudItemTemplate.js.map +1 -0
- package/dist/ImageGridCloudTemplate.d.ts +2 -0
- package/dist/ImageGridCloudTemplate.js +6 -0
- package/dist/ImageGridCloudTemplate.js.map +1 -0
- package/dist/ImageGridTicker.d.ts +2 -2
- package/dist/ImageGridTicker.js +1 -8
- package/dist/ImageGridTicker.js.map +1 -1
- package/dist/LinkListItem.js +1 -0
- package/dist/LinkListItem.js.map +1 -1
- package/dist/List.js +5 -3
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeader.js +1 -0
- package/dist/ListGroupHeader.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/ListItem.js +2 -0
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +12 -0
- package/dist/ListItemBase.js +21 -2
- package/dist/ListItemBase.js.map +1 -1
- package/dist/ListSelectAll.js +1 -0
- package/dist/ListSelectAll.js.map +1 -1
- package/dist/MastheadCountrySelector.js +15 -0
- package/dist/MastheadCountrySelector.js.map +1 -1
- package/dist/MastheadItem.js +10 -0
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadMenu.js +6 -0
- package/dist/MastheadMenu.js.map +1 -1
- package/dist/MastheadMobileMenu.js +11 -0
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/MastheadProfileMenu.js +11 -0
- package/dist/MastheadProfileMenu.js.map +1 -1
- package/dist/MastheadShell.js +41 -0
- package/dist/MastheadShell.js.map +1 -1
- package/dist/MediaPlayer.js +3 -0
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/MediaPlayerTemplate.js +4 -4
- package/dist/MediaPlayerTemplate.js.map +1 -1
- package/dist/MediaPlayerVimeo.d.ts +3 -3
- package/dist/MediaPlayerVimeo.js +1 -0
- package/dist/MediaPlayerVimeo.js.map +1 -1
- package/dist/MediaPlayerYoutube.js +3 -0
- package/dist/MediaPlayerYoutube.js.map +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/Pagination.js.map +1 -1
- package/dist/Search.d.ts +2 -1
- package/dist/Search.js +18 -3
- package/dist/Search.js.map +1 -1
- package/dist/SearchTemplate.d.ts +2 -0
- package/dist/SearchTemplate.js +48 -0
- package/dist/SearchTemplate.js.map +1 -0
- package/dist/SearchableListBase.d.ts +26 -16
- package/dist/SearchableListBase.js +58 -72
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SecondaryNavigation.js +19 -0
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/SecondaryNavigationItem.js +6 -0
- package/dist/SecondaryNavigationItem.js.map +1 -1
- package/dist/SecondaryNavigationSubItem.js +3 -0
- package/dist/SecondaryNavigationSubItem.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 +140 -348
- package/dist/SelectBox.js.map +1 -1
- package/dist/SocialMediaButton.js +2 -0
- package/dist/SocialMediaButton.js.map +1 -1
- package/dist/StepInput.js +2 -0
- package/dist/StepInput.js.map +1 -1
- package/dist/TabNavigation.js +3 -0
- package/dist/TabNavigation.js.map +1 -1
- package/dist/Tag.js +1 -0
- package/dist/Tag.js.map +1 -1
- package/dist/TagGroup.d.ts +23 -5
- package/dist/TagGroup.js +40 -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 +33 -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/Tile.js +1 -0
- package/dist/Tile.js.map +1 -1
- package/dist/Upload.js +5 -0
- package/dist/Upload.js.map +1 -1
- package/dist/assets/{InputSuggestions-B0P5JAFd.js → InputSuggestions-C8m6N2-d.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-CFj3_UAT.js → ListItemStandardExpandableTextTemplate-BwD5bYhw.js} +1 -1
- package/dist/assets/{bundle.esm-BaPBMfCT.js → bundle.esm-hGsUwmUy.js} +222 -218
- package/dist/css/themes/CountrySelector.css +1 -1
- package/dist/css/themes/EventRibbon.css +1 -1
- package/dist/css/themes/ImageGridCloud.css +1 -0
- package/dist/css/themes/ImageGridCloudItem.css +1 -0
- 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/Pagination.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 +4627 -1311
- package/dist/custom-elements.json +1260 -1249
- 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/ImageGridCloud.css.d.ts +2 -0
- package/dist/generated/themes/ImageGridCloud.css.js +8 -0
- package/dist/generated/themes/ImageGridCloud.css.js.map +1 -0
- package/dist/generated/themes/ImageGridCloudItem.css.d.ts +2 -0
- package/dist/generated/themes/ImageGridCloudItem.css.js +8 -0
- package/dist/generated/themes/ImageGridCloudItem.css.js.map +1 -0
- 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/Pagination.css.d.ts +1 -1
- package/dist/generated/themes/Pagination.css.js +1 -1
- package/dist/generated/themes/Pagination.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 +49 -235
- package/dist/web-types.json +347 -832
- package/package.json +1 -1
- package/src/Accordion.ts +1 -0
- package/src/AccordionItem.ts +2 -0
- package/src/AssetsVariables.ts +2 -1
- package/src/Breadcrumbs.ts +5 -0
- package/src/ContactItem.ts +2 -0
- package/src/CountrySelector.hbs +6 -61
- package/src/CountrySelector.ts +93 -374
- package/src/DatePicker.ts +2 -1
- package/src/FilterMenu.ts +15 -3
- package/src/Footer.ts +27 -0
- package/src/ImageGridCloud.ts +188 -0
- package/src/ImageGridCloudItem.ts +57 -0
- package/src/ImageGridCloudItemTemplate.tsx +11 -0
- package/src/ImageGridCloudTemplate.tsx +16 -0
- package/src/ImageGridTicker.ts +3 -3
- package/src/LinkListItem.ts +1 -0
- package/src/List.ts +5 -3
- package/src/ListGroupHeader.ts +1 -0
- package/src/ListGroupHeaderBase.ts +4 -0
- package/src/ListItem.hbs +0 -1
- package/src/ListItem.ts +2 -0
- package/src/ListItemBase.ts +21 -3
- package/src/ListSelectAll.ts +1 -0
- package/src/MastheadCountrySelector.ts +15 -0
- package/src/MastheadItem.ts +10 -0
- package/src/MastheadMenu.ts +6 -0
- package/src/MastheadMobileMenu.ts +11 -0
- package/src/MastheadProfileMenu.ts +11 -0
- package/src/MastheadShell.ts +41 -0
- package/src/MediaPlayer.ts +3 -0
- package/src/MediaPlayerTemplate.tsx +0 -1
- package/src/MediaPlayerVimeo.ts +4 -3
- package/src/MediaPlayerYoutube.ts +3 -0
- package/src/Pagination.ts +1 -1
- package/src/Search.ts +20 -4
- package/src/SearchTemplate.tsx +353 -0
- package/src/SearchableListBase.ts +78 -83
- package/src/SecondaryNavigation.ts +19 -0
- package/src/SecondaryNavigationItem.ts +6 -0
- package/src/SecondaryNavigationSubItem.ts +3 -0
- package/src/SelectBase.ts +580 -0
- package/src/SelectBox.hbs +118 -107
- package/src/SelectBox.ts +156 -445
- package/src/SocialMediaButton.ts +2 -0
- package/src/StepInput.ts +2 -0
- package/src/TabNavigation.ts +3 -0
- package/src/Tag.ts +1 -0
- package/src/TagGroup.ts +56 -19
- package/src/TagTemplate.tsx +4 -2
- package/src/TextArea.ts +5 -5
- package/src/TextAreaTemplate.tsx +67 -0
- package/src/TextField.ts +58 -24
- package/src/TextFieldTemplate.tsx +90 -0
- package/src/Tile.ts +1 -0
- package/src/Upload.ts +5 -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/ImageGridCloud.css.ts +9 -0
- package/src/generated/themes/ImageGridCloudItem.css.ts +9 -0
- 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/Pagination.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/ImageGridCloud.css +55 -0
- package/src/themes/ImageGridCloudItem.css +10 -0
- package/src/themes/ListItem.css +6 -0
- package/src/themes/MastheadItem.css +0 -2
- package/src/themes/MastheadMobileMenu.css +2 -0
- package/src/themes/Pagination.css +1 -1
- 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/SearchSuggestionsTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +0 -17
- package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +0 -1
- package/dist/generated/templates/SearchTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/SearchTemplate.lit.js +0 -28
- package/dist/generated/templates/SearchTemplate.lit.js.map +0 -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/Search.hbs +0 -155
- package/src/SearchSuggestions.hbs +0 -91
- package/src/TextArea.hbs +0 -54
- package/src/TextField.hbs +0 -78
- package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +0 -21
- package/src/generated/templates/SearchTemplate.lit.ts +0 -32
- package/src/generated/templates/TextAreaTemplate.lit.ts +0 -17
- package/src/generated/templates/TextFieldTemplate.lit.ts +0 -18
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import type UDExSearch from "./Search.js";
|
|
2
|
+
import type { SuggestionList } from "./Search.js";
|
|
3
|
+
import slimArrowDown from "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
|
|
4
|
+
import search from "@ui5/webcomponents-icons/dist/search.js";
|
|
5
|
+
import decline from "@ui5/webcomponents-icons/dist/decline.js";
|
|
6
|
+
import microphone from "@ui5/webcomponents-icons/dist/microphone.js";
|
|
7
|
+
import UDExButton from "./Button.js";
|
|
8
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
9
|
+
import UDExButtonSize from "./types/ButtonSize.js";
|
|
10
|
+
import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
11
|
+
import UI5IconMode from "@ui5/webcomponents/dist/types/IconMode.js";
|
|
12
|
+
import UI5Popover from "@ui5/webcomponents/dist/Popover.js";
|
|
13
|
+
import UI5PopoverPlacement from "@ui5/webcomponents/dist/types/PopoverPlacement.js";
|
|
14
|
+
import UI5PopoverHAlign from "@ui5/webcomponents/dist/types/PopoverHorizontalAlign.js";
|
|
15
|
+
import UDExControlButton from "./ControlButton.js";
|
|
16
|
+
import UDExControlButtonDesign from "./types/ControlButtonDesign.js";
|
|
17
|
+
import UI5Button from "@ui5/webcomponents/dist/Button.js";
|
|
18
|
+
import UI5ButtonDesign from "@ui5/webcomponents/dist/types/ButtonDesign.js";
|
|
19
|
+
|
|
20
|
+
export default function SearchTemplate(this: UDExSearch) {
|
|
21
|
+
return (
|
|
22
|
+
<>
|
|
23
|
+
<div class={`udex-search__root ${this.searchClasses}`}>
|
|
24
|
+
{ this.isShowSearchHomePrefix ? renderSearchHomePrefix.call(this) : "" }
|
|
25
|
+
|
|
26
|
+
<form role="search" class={`udex-search__container ${this.focusClasses} ${this.isNotEmptyClass}`}>
|
|
27
|
+
{ this.labelAnimationDisabled ? renderInputWithStaticLabel.call(this) : renderInputWithAnimatedLabel.call(this) }
|
|
28
|
+
|
|
29
|
+
{
|
|
30
|
+
this.open ? (
|
|
31
|
+
<span
|
|
32
|
+
aria-live="polite"
|
|
33
|
+
aria-atomic="true"
|
|
34
|
+
id="search-description"
|
|
35
|
+
class="hidden"
|
|
36
|
+
aria-hidden="true"
|
|
37
|
+
>
|
|
38
|
+
{this.suggestionsDescription}
|
|
39
|
+
</span>
|
|
40
|
+
) : ""
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
<div class="udex-search__icons">
|
|
44
|
+
{
|
|
45
|
+
this.isShowHomeResetButton ? (
|
|
46
|
+
<UDExButton
|
|
47
|
+
id="reset-button"
|
|
48
|
+
class="udex-search__button udex-search__reset-button"
|
|
49
|
+
size={UDExButtonSize.Small}
|
|
50
|
+
design={UDExButtonDesign.Default}
|
|
51
|
+
tooltip={this.tooltipInfo.tooltipResetButton}
|
|
52
|
+
onClick={this.onReset as any}
|
|
53
|
+
onKeyDown={this.handleKeyDownReset}
|
|
54
|
+
>
|
|
55
|
+
<UI5Icon
|
|
56
|
+
class="udex-search__button-icon"
|
|
57
|
+
accessible-name={this.accInfo.accessibleNameResetIcon}
|
|
58
|
+
accessible-role="presentation"
|
|
59
|
+
name={decline}
|
|
60
|
+
></UI5Icon>
|
|
61
|
+
</UDExButton>
|
|
62
|
+
) : ""
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
{
|
|
66
|
+
this.isShowResetButton ? (
|
|
67
|
+
<UDExControlButton
|
|
68
|
+
id="reset-button"
|
|
69
|
+
class="udex-search__reset-button"
|
|
70
|
+
design={UDExControlButtonDesign.Default}
|
|
71
|
+
tooltip={this.tooltipInfo.tooltipResetButton}
|
|
72
|
+
icon={decline}
|
|
73
|
+
size={UDExButtonSize.Large}
|
|
74
|
+
accessible-name={this.accInfo.accessibleNameResetIcon}
|
|
75
|
+
onClick={this.onReset as any}
|
|
76
|
+
onKeyDown={this.handleKeyDownReset}
|
|
77
|
+
></UDExControlButton>
|
|
78
|
+
) : ""
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
{
|
|
82
|
+
this.isVoiceButton ? (
|
|
83
|
+
<UDExButton
|
|
84
|
+
id="voice-button"
|
|
85
|
+
class={`udex-search__button udex-search__voice-button ${this.voiceActiveClass}`}
|
|
86
|
+
design={UDExButtonDesign.Default}
|
|
87
|
+
size={UDExButtonSize.Small}
|
|
88
|
+
icon={microphone}
|
|
89
|
+
tooltip={this.tooltipInfo.tooltipVoiceButton}
|
|
90
|
+
onClick={this.onVoice as any}
|
|
91
|
+
></UDExButton>
|
|
92
|
+
) : ""
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
{
|
|
96
|
+
this.showNonInteractiveButton ? (
|
|
97
|
+
<UI5Icon
|
|
98
|
+
class="udex-search__icon"
|
|
99
|
+
aria-hidden="true"
|
|
100
|
+
accessible-name={this.accInfo.accessibleNameSearchIcon}
|
|
101
|
+
name={search}
|
|
102
|
+
></UI5Icon>
|
|
103
|
+
) : ""
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
{
|
|
107
|
+
this.showSubmitHomeButton ? (
|
|
108
|
+
<UDExButton
|
|
109
|
+
id="submit-button"
|
|
110
|
+
class={`udex-search__button udex-search__submit-button ${this.searchButtonActiveClass}`}
|
|
111
|
+
design={UDExButtonDesign.Default}
|
|
112
|
+
icon={search}
|
|
113
|
+
size={UDExButtonSize.Small}
|
|
114
|
+
tooltip={this.tooltipInfo.tooltipSubmitButton}
|
|
115
|
+
onClick={this.onSubmit as any}
|
|
116
|
+
></UDExButton>
|
|
117
|
+
) : ""
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
{
|
|
121
|
+
this.showSubmitStandardButton ? (
|
|
122
|
+
<UDExControlButton
|
|
123
|
+
id="submit-button"
|
|
124
|
+
class="udex-search__submit-button"
|
|
125
|
+
size={UDExButtonSize.Large}
|
|
126
|
+
design={UDExControlButtonDesign.Default}
|
|
127
|
+
icon={search}
|
|
128
|
+
tooltip={this.tooltipInfo.tooltipSubmitButton}
|
|
129
|
+
onClick={this.onSubmit as any}
|
|
130
|
+
></UDExControlButton>
|
|
131
|
+
) : ""
|
|
132
|
+
}
|
|
133
|
+
</div>
|
|
134
|
+
</form>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
{ renderSearchSuggestionPopover.call(this) }
|
|
138
|
+
</>
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function renderSearchHomePrefix(this: UDExSearch) {
|
|
143
|
+
return (
|
|
144
|
+
<div class={`udex-search__prefix ${this.prefixWrapperClasses}`}>
|
|
145
|
+
<button
|
|
146
|
+
type="button"
|
|
147
|
+
role="combobox"
|
|
148
|
+
aria-expanded={this._prefixDropdownExpanded}
|
|
149
|
+
aria-label={this.labelPrefix}
|
|
150
|
+
aria-haspopup="true"
|
|
151
|
+
aria-controls="udex-search-prefix"
|
|
152
|
+
class="udex-search__prefix-button"
|
|
153
|
+
onClick={this.handleDropdownClick}
|
|
154
|
+
>
|
|
155
|
+
<span class="udex-search__prefix-label">{this.labelPrefix}</span>
|
|
156
|
+
<UI5Icon
|
|
157
|
+
class="udex-search__prefix-icon"
|
|
158
|
+
name={slimArrowDown}
|
|
159
|
+
mode={UI5IconMode.Decorative}
|
|
160
|
+
></UI5Icon>
|
|
161
|
+
</button>
|
|
162
|
+
|
|
163
|
+
<UI5Popover
|
|
164
|
+
id="udex-search-prefix"
|
|
165
|
+
class={this.prefixPopoverClasses}
|
|
166
|
+
hide-arrow
|
|
167
|
+
placement={UI5PopoverPlacement.Bottom}
|
|
168
|
+
horizontal-align={UI5PopoverHAlign.Start}
|
|
169
|
+
style={this.prefixPopoverStyles}
|
|
170
|
+
onClose={this.handleAfterClosePrefixPopover}
|
|
171
|
+
>
|
|
172
|
+
<slot></slot>
|
|
173
|
+
</UI5Popover>
|
|
174
|
+
</div>
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function renderSearchInput(this: UDExSearch, placeholder: boolean = false) {
|
|
179
|
+
return (
|
|
180
|
+
<input
|
|
181
|
+
role="searchbox"
|
|
182
|
+
id="search-input"
|
|
183
|
+
type="search"
|
|
184
|
+
name="search"
|
|
185
|
+
class="udex-search__field"
|
|
186
|
+
autocomplete="off"
|
|
187
|
+
aria-autocomplete="list"
|
|
188
|
+
aria-haspopup={this.getAriaHasPopup}
|
|
189
|
+
aria-label={this.accInfo.ariaLabel}
|
|
190
|
+
aria-describedby="search-description"
|
|
191
|
+
{...(placeholder ? { placeholder: this.effectivePlaceholder } : {})}
|
|
192
|
+
value={this.value}
|
|
193
|
+
onInput={this.handleSearchChange}
|
|
194
|
+
onKeyDown={this.handleKeyDown}
|
|
195
|
+
onFocus={this.handleFocus}
|
|
196
|
+
onFocusOut={this.handleFocusout}
|
|
197
|
+
onBlur={this.handleBlur}
|
|
198
|
+
onClick={this.handleInputClick}
|
|
199
|
+
/>
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function renderInputWithStaticLabel(this: UDExSearch) {
|
|
204
|
+
return renderSearchInput.call(this, true);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function renderInputWithAnimatedLabel(this: UDExSearch) {
|
|
208
|
+
return (
|
|
209
|
+
<>
|
|
210
|
+
{
|
|
211
|
+
this.label ? (
|
|
212
|
+
<label for="search-input" class={this.labelClasses}>
|
|
213
|
+
{this.label}
|
|
214
|
+
</label>
|
|
215
|
+
) : ""
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
{ renderSearchInput.call(this, false) }
|
|
219
|
+
</>
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function renderSearchSuggestionPopover(this: UDExSearch) {
|
|
224
|
+
return (
|
|
225
|
+
<UI5Popover
|
|
226
|
+
class={`udex-search-suggestions__root ${this.homeSearchPopoverClass}`}
|
|
227
|
+
hide-arrow
|
|
228
|
+
prevent-initial-focus
|
|
229
|
+
placement={UI5PopoverPlacement.Bottom}
|
|
230
|
+
horizontal-align={UI5PopoverHAlign.End}
|
|
231
|
+
style={this.popoverStyles}
|
|
232
|
+
id={this.getSuggestionsPopoverId}
|
|
233
|
+
aria-orientation="vertical"
|
|
234
|
+
accessible-role="Dialog"
|
|
235
|
+
onKeyDown={this.handleKeyPressSuggestionList}
|
|
236
|
+
accessible-name={this.suggestionsAccessibleName}
|
|
237
|
+
>
|
|
238
|
+
{
|
|
239
|
+
this.showNoResultMessage ? (
|
|
240
|
+
<span class="udex-search-suggestions__message">{this.noResultMessage}</span>
|
|
241
|
+
) : renderSearchSuggestionPopoverResults.call(this)
|
|
242
|
+
}
|
|
243
|
+
</UI5Popover>
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function renderSearchSuggestionPopoverResults(this: UDExSearch) {
|
|
248
|
+
return (
|
|
249
|
+
<div role="tree">
|
|
250
|
+
{
|
|
251
|
+
this.isShowSuggestedList ? (
|
|
252
|
+
renderSearchSuggestionPopoverResultsSuggestedList.call(this)
|
|
253
|
+
) : ""
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
{
|
|
257
|
+
this.isShowRecommendedList ? (
|
|
258
|
+
renderSearchSuggestionPopoverResultsRecommendedList.call(this)
|
|
259
|
+
) : ""
|
|
260
|
+
}
|
|
261
|
+
</div>
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
function renderSearchSuggestionPopoverResultsSuggestedList(this: UDExSearch) {
|
|
266
|
+
return (
|
|
267
|
+
<div class="udex-search-suggestions__block" role="treeitem">
|
|
268
|
+
{
|
|
269
|
+
this.suggestedHeading ? (
|
|
270
|
+
<span class="udex-search-suggestions__heading" id="suggested-heading">
|
|
271
|
+
{this.suggestedHeading}
|
|
272
|
+
</span>
|
|
273
|
+
) : ""
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
<div class="udex-search-suggestions__list"
|
|
277
|
+
role="listbox"
|
|
278
|
+
aria-labelledby="suggested-heading"
|
|
279
|
+
tabindex={0}
|
|
280
|
+
onKeyDown={this.handleKeyDownPopover}
|
|
281
|
+
>
|
|
282
|
+
{
|
|
283
|
+
this.suggestedList.map((item, i) => (
|
|
284
|
+
<UI5Button
|
|
285
|
+
key={i}
|
|
286
|
+
id={item.id}
|
|
287
|
+
icon={item.icon}
|
|
288
|
+
type="Button"
|
|
289
|
+
design={UI5ButtonDesign.Default}
|
|
290
|
+
accessible-name={item.suggestionDescription}
|
|
291
|
+
class="udex-search-suggestions__item-button"
|
|
292
|
+
title={item.title}
|
|
293
|
+
tabindex={-1}
|
|
294
|
+
role="option"
|
|
295
|
+
onClick={item.handleSelectItem}
|
|
296
|
+
dangerouslySetInnerHTML={{ __html: item.text }}
|
|
297
|
+
></UI5Button>
|
|
298
|
+
))
|
|
299
|
+
}
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
function renderSearchSuggestionPopoverResultsRecommendedList(this: UDExSearch) {
|
|
306
|
+
return (
|
|
307
|
+
<div class="udex-search-suggestions__block" role="treeitem">
|
|
308
|
+
{
|
|
309
|
+
this.recommendedHeading ? (
|
|
310
|
+
<span class="udex-search-suggestions__heading" id="recommended-heading">
|
|
311
|
+
{this.recommendedHeading}
|
|
312
|
+
</span>
|
|
313
|
+
) : ""
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
<div class="udex-search-suggestions__list"
|
|
317
|
+
role="listbox"
|
|
318
|
+
aria-labelledby="recommended-heading"
|
|
319
|
+
tabindex={0}
|
|
320
|
+
onKeyDown={this.handleKeyDownPopover}
|
|
321
|
+
>
|
|
322
|
+
{
|
|
323
|
+
this.recommendedList.map((item, i) => (
|
|
324
|
+
item.hasCustomIcon ? (
|
|
325
|
+
renderSearchSuggestionPopoverResultsRecommendedListButton(item, i, item.icon)
|
|
326
|
+
) : (
|
|
327
|
+
renderSearchSuggestionPopoverResultsRecommendedListButton(item, i)
|
|
328
|
+
)
|
|
329
|
+
))
|
|
330
|
+
}
|
|
331
|
+
</div>
|
|
332
|
+
</div>
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function renderSearchSuggestionPopoverResultsRecommendedListButton(button: SuggestionList, key: number, icon: string | undefined = undefined) {
|
|
337
|
+
return (
|
|
338
|
+
<UI5Button
|
|
339
|
+
key={key}
|
|
340
|
+
id={button.id}
|
|
341
|
+
{...(icon ? { "icon": icon } : {})}
|
|
342
|
+
type="Button"
|
|
343
|
+
design={UI5ButtonDesign.Default}
|
|
344
|
+
class="udex-search-suggestions__item-button"
|
|
345
|
+
accessible-name={button.suggestionDescription}
|
|
346
|
+
title={button.title}
|
|
347
|
+
tabindex={-1}
|
|
348
|
+
role="option"
|
|
349
|
+
onClick={button.handleSelectItem}
|
|
350
|
+
dangerouslySetInnerHTML={{ __html: button.text }}
|
|
351
|
+
></UI5Button>
|
|
352
|
+
);
|
|
353
|
+
}
|
|
@@ -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,8 +60,12 @@ 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
|
|
66
|
+
* @param {Array<UDExListItemBase>} selectedItems The selected items.
|
|
67
|
+
* @param {UDExListItemBase | UDExListGroupHeaderBase | null | undefined} item The clicked item.
|
|
68
|
+
*
|
|
64
69
|
*/
|
|
65
70
|
@event("selection-change", { bubbles: true })
|
|
66
71
|
|
|
@@ -73,8 +78,10 @@ export type UDExSearchableListBaseEvents = {
|
|
|
73
78
|
|
|
74
79
|
/**
|
|
75
80
|
* Fired event when the user clicks on the submitted icon in the search.
|
|
76
|
-
*
|
|
81
|
+
* @param {Array<UDExListItemBase>} selectedItems The selected items.
|
|
77
82
|
* @public
|
|
83
|
+
* @param {Array<UDExListItemBase>} selectedItems The selected items.
|
|
84
|
+
*
|
|
78
85
|
*/
|
|
79
86
|
@event("submit-search", { bubbles: true })
|
|
80
87
|
|
|
@@ -87,22 +94,29 @@ export type UDExSearchableListBaseEvents = {
|
|
|
87
94
|
|
|
88
95
|
/**
|
|
89
96
|
* Fired event when the user submitted the value in the search.
|
|
90
|
-
*
|
|
97
|
+
* @param {string} value The search value.
|
|
91
98
|
* @public
|
|
99
|
+
* @param {string} value The search value.
|
|
92
100
|
*/
|
|
93
101
|
@event("change-search", { bubbles: true })
|
|
94
102
|
|
|
95
103
|
/**
|
|
96
104
|
* Fired event when the user clicks on the first icon.
|
|
97
|
-
*
|
|
105
|
+
* @param { PointerEvent } originalEvent The original event object
|
|
106
|
+
* @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
|
|
98
107
|
* @public
|
|
108
|
+
* @param { PointerEvent } originalEvent The original event object
|
|
109
|
+
* @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
|
|
99
110
|
*/
|
|
100
111
|
@event("first-icon-click", { bubbles: true })
|
|
101
112
|
|
|
102
113
|
/**
|
|
103
114
|
* Fired event when the user clicks on the second icon.
|
|
104
|
-
*
|
|
115
|
+
* @param { PointerEvent } originalEvent The original event object
|
|
116
|
+
* @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
|
|
105
117
|
* @public
|
|
118
|
+
* @param { PointerEvent } originalEvent The original event object
|
|
119
|
+
* @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
|
|
106
120
|
*/
|
|
107
121
|
@event("second-icon-click", { bubbles: true })
|
|
108
122
|
|
|
@@ -215,7 +229,7 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
215
229
|
items!: Array<UDExListItemBase | UDExListGroupHeaderBase>;
|
|
216
230
|
|
|
217
231
|
/**
|
|
218
|
-
* Defines the default accessible role for the list
|
|
232
|
+
* Defines the default accessible role for the list component.
|
|
219
233
|
*
|
|
220
234
|
* @default "list"
|
|
221
235
|
* @public
|
|
@@ -223,6 +237,12 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
223
237
|
@property({ type: String })
|
|
224
238
|
defaultAccessibleRole: string = "list";
|
|
225
239
|
|
|
240
|
+
/**
|
|
241
|
+
* Defines the filtered items for the component.
|
|
242
|
+
*
|
|
243
|
+
* @default []
|
|
244
|
+
* @private
|
|
245
|
+
*/
|
|
226
246
|
@property({ type: Object })
|
|
227
247
|
_filteredItems!: Array<UDExProcessedItem>;
|
|
228
248
|
|
|
@@ -245,16 +265,11 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
245
265
|
}
|
|
246
266
|
|
|
247
267
|
onItemPress(e:CustomEvent) {
|
|
248
|
-
const dropdownItemId: string = this.getDataTokenId(e);
|
|
268
|
+
const dropdownItemId: string = this.getDataTokenId(e.detail.item as UDExListItemBase);
|
|
249
269
|
this.handleDropdownItemPress(dropdownItemId);
|
|
250
270
|
this.fireSelectionChange(dropdownItemId);
|
|
251
271
|
}
|
|
252
272
|
|
|
253
|
-
activateHeaderAndSetAllItems(item: UDExListGroupHeaderBase) {
|
|
254
|
-
item.activateHeader();
|
|
255
|
-
item.setAllItems(false);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
273
|
handleDropdownItemPress(dropdownItemId: string) {
|
|
259
274
|
this.getProcessedItems().forEach(({ item, groupItems, isGroup }) => {
|
|
260
275
|
if (isGroup) {
|
|
@@ -291,28 +306,31 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
291
306
|
}
|
|
292
307
|
|
|
293
308
|
onHeaderPress(e:CustomEvent) {
|
|
294
|
-
|
|
309
|
+
const item = e.detail.item as UDExListItemBase;
|
|
310
|
+
const id = this.getDataTokenId(item);
|
|
311
|
+
this.handleGroupHeaderSelection(id);
|
|
295
312
|
this.syncFilteredItems();
|
|
296
|
-
this.fireSelectionChange(
|
|
313
|
+
this.fireSelectionChange(id);
|
|
297
314
|
}
|
|
298
315
|
|
|
299
316
|
onSelectAllHeaderPress(e:CustomEvent) {
|
|
300
|
-
|
|
317
|
+
const item = e.detail.item as UDExListItemBase;
|
|
318
|
+
const id = this.getDataTokenId(item);
|
|
319
|
+
this.handleGroupHeaderSelection(id);
|
|
301
320
|
this.syncFilteredItems();
|
|
302
321
|
this.fireDecoratorEvent("select-all");
|
|
303
322
|
}
|
|
304
323
|
|
|
305
|
-
handleGroupHeaderSelection(
|
|
306
|
-
const headerItemId = this.getDataTokenId(e);
|
|
324
|
+
handleGroupHeaderSelection(id: string): void {
|
|
307
325
|
this.getProcessedItems().forEach(({ item }) => {
|
|
308
|
-
if (item._id ===
|
|
326
|
+
if (item._id === id) {
|
|
309
327
|
(item as UDExListGroupHeaderBase).handleSelectionGroupState();
|
|
310
328
|
}
|
|
311
329
|
});
|
|
312
330
|
}
|
|
313
331
|
|
|
314
|
-
onSearch(
|
|
315
|
-
const searchValue: string =
|
|
332
|
+
onSearch(value: string) {
|
|
333
|
+
const searchValue: string = value;
|
|
316
334
|
this._shouldFilterItems = true;
|
|
317
335
|
this._filteredItems = this.filterItems(this.getProcessedItems(), searchValue);
|
|
318
336
|
const items = this.getFlattenItemsArray(this._filteredItems);
|
|
@@ -403,15 +421,6 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
403
421
|
}
|
|
404
422
|
}
|
|
405
423
|
|
|
406
|
-
handleKeyDown(e: KeyboardEvent) {
|
|
407
|
-
if (isUp(e)) {
|
|
408
|
-
this.handlePreviousItemFocus(e);
|
|
409
|
-
}
|
|
410
|
-
if (isDown(e)) {
|
|
411
|
-
this.handleNextListItemFocus(e);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
|
|
415
424
|
getSlottedItems(items: Array<UDExListItemBase | UDExListGroupHeaderBase>): Array<UDExListItemBase | UDExListGroupHeaderBase> {
|
|
416
425
|
const arr: Array<UDExListItemBase | UDExListGroupHeaderBase> = [];
|
|
417
426
|
items.forEach(item => {
|
|
@@ -452,31 +461,6 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
452
461
|
});
|
|
453
462
|
}
|
|
454
463
|
|
|
455
|
-
// moves focus to next list item
|
|
456
|
-
handlePreviousItemFocus(e: KeyboardEvent) {
|
|
457
|
-
const item = e.target as HTMLElement;
|
|
458
|
-
const listItems = this.getDomListItems();
|
|
459
|
-
const currentSelectIndex = this.getCurrentIndex(item);
|
|
460
|
-
const previousSelectIndex = currentSelectIndex - 1;
|
|
461
|
-
if (currentSelectIndex > 0) {
|
|
462
|
-
e.preventDefault();
|
|
463
|
-
(listItems[previousSelectIndex] as HTMLElement).focus();
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
// moves focus to previous list item
|
|
468
|
-
handleNextListItemFocus(e: KeyboardEvent) {
|
|
469
|
-
const item = e.target as HTMLElement;
|
|
470
|
-
const listItems = this.getDomListItems();
|
|
471
|
-
const lastItemIndex = listItems.length - 1;
|
|
472
|
-
const currentSelectIndex = this.getCurrentIndex(item);
|
|
473
|
-
const nextSelectIndex = currentSelectIndex + 1;
|
|
474
|
-
if (nextSelectIndex <= lastItemIndex) {
|
|
475
|
-
e.preventDefault();
|
|
476
|
-
(listItems[nextSelectIndex] as HTMLElement).focus();
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
|
|
480
464
|
fireFirstIconClickEvent(e: CustomEvent): void {
|
|
481
465
|
this._fireIconClickEvent("first-icon-click", e);
|
|
482
466
|
}
|
|
@@ -486,7 +470,8 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
486
470
|
}
|
|
487
471
|
|
|
488
472
|
private _fireIconClickEvent(eventName: "first-icon-click" | "second-icon-click", e: CustomEvent): void {
|
|
489
|
-
const
|
|
473
|
+
const item = e.detail.item as UDExListItemBase;
|
|
474
|
+
const id = this.getDataTokenId(item);
|
|
490
475
|
this.fireDecoratorEvent(eventName, {
|
|
491
476
|
originalEvent: e.detail.originalEvent,
|
|
492
477
|
item: this.getItemFromList(id),
|
|
@@ -505,47 +490,44 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
505
490
|
});
|
|
506
491
|
}
|
|
507
492
|
|
|
508
|
-
getCurrentIndex(item:
|
|
493
|
+
getCurrentIndex(item: UDExListItem): number {
|
|
509
494
|
return this.getDomListItems().indexOf(item);
|
|
510
495
|
}
|
|
511
496
|
|
|
512
|
-
|
|
513
|
-
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")!;
|
|
514
503
|
}
|
|
515
504
|
|
|
516
505
|
getPopover(): Popover {
|
|
517
506
|
return this.shadowRoot!.querySelector<Popover>("[ui5-popover]")!;
|
|
518
507
|
}
|
|
519
508
|
|
|
520
|
-
getDomListItems():
|
|
509
|
+
getDomListItems(): UDExListItem[] {
|
|
521
510
|
const elementList = this.shadowRoot!.querySelector("[udex-list]") as HTMLElement;
|
|
522
511
|
return elementList ? Array.from(elementList.querySelectorAll("[udex-list-item]")) : [];
|
|
523
512
|
}
|
|
524
513
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
item.mode = this.mode;
|
|
528
|
-
item.controlled = this.isControlled;
|
|
529
|
-
});
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
getDataTokenId(e:CustomEvent): string {
|
|
533
|
-
return e.detail.item.getAttribute("data-token-id") as string;
|
|
514
|
+
getDataTokenId(item: UDExListItemBase): string {
|
|
515
|
+
return item.getAttribute("data-token-id") as string;
|
|
534
516
|
}
|
|
535
517
|
|
|
536
518
|
getProcessedItems(): Array<UDExProcessedItem> {
|
|
537
519
|
return this.items.map(item => {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
520
|
+
const isGroup = item.isGroup;
|
|
521
|
+
const groupItems = isGroup ? (item as UDExListGroupHeaderBase).getItems() : [];
|
|
522
|
+
|
|
523
|
+
if (isGroup) {
|
|
524
|
+
this._setItemsModeAndControl(groupItems);
|
|
541
525
|
}
|
|
526
|
+
|
|
542
527
|
item.mode = this.mode;
|
|
543
528
|
item.controlled = this.isControlled;
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
groupItems: item.isGroup ? (item as UDExListGroupHeaderBase).getItems() : [],
|
|
547
|
-
isGroup: item.isGroup,
|
|
548
|
-
};
|
|
529
|
+
|
|
530
|
+
return { item, groupItems, isGroup };
|
|
549
531
|
});
|
|
550
532
|
}
|
|
551
533
|
|
|
@@ -563,6 +545,13 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
563
545
|
content.style.maxHeight = this.height || "";
|
|
564
546
|
}
|
|
565
547
|
|
|
548
|
+
_setItemsModeAndControl(items: Array<UDExFilterMenuItem>) {
|
|
549
|
+
items.forEach(item => {
|
|
550
|
+
item.mode = this.mode;
|
|
551
|
+
item.controlled = this.isControlled;
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
|
|
566
555
|
get getNoResultText(): string {
|
|
567
556
|
const hasTextProperty = this.noResultText !== undefined && this.noResultText.length > 0;
|
|
568
557
|
return hasTextProperty ? this.noResultText : this.noMatchesFoundText;
|
|
@@ -581,7 +570,8 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
581
570
|
}
|
|
582
571
|
|
|
583
572
|
get selectedItems(): Array<UDExListItemBase> {
|
|
584
|
-
|
|
573
|
+
const selectedItems: Array<UDExListItemBase> = this.getSlottedItems(this.items).filter(({ selected }) => selected);
|
|
574
|
+
return selectedItems;
|
|
585
575
|
}
|
|
586
576
|
|
|
587
577
|
get modeMultiSelect(): boolean {
|
|
@@ -611,7 +601,8 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
611
601
|
}
|
|
612
602
|
|
|
613
603
|
get showSearch(): boolean {
|
|
614
|
-
|
|
604
|
+
const isSearchVisible = this.showSearchInput || (this.isSearchActive && !this.modeRadioGroup);
|
|
605
|
+
return !this.hideDropdownSearch && isSearchVisible;
|
|
615
606
|
}
|
|
616
607
|
|
|
617
608
|
get isSearchActive(): boolean {
|
|
@@ -641,6 +632,10 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
641
632
|
|
|
642
633
|
return "none";
|
|
643
634
|
}
|
|
635
|
+
|
|
636
|
+
get hideDropdownSearch(): boolean {
|
|
637
|
+
return false;
|
|
638
|
+
}
|
|
644
639
|
}
|
|
645
640
|
|
|
646
641
|
export default UDExSearchableListBase;
|