@sapudex/web-components 2.10.0 → 2.12.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 +1 -0
- package/cypress/fixtures/profile-menu.ts +75 -0
- package/cypress/specs/Accordion.cy.tsx +19 -0
- package/cypress/specs/AccordionItem.cy.tsx +9 -0
- package/cypress/specs/Footer.cy.tsx +48 -11
- package/cypress/specs/ListItem.cy.tsx +66 -52
- package/cypress/specs/MastheadProfileMenu.cy.tsx +174 -0
- package/cypress/specs/PromoTile.cy.tsx +124 -0
- package/cypress/specs/Quote.cy.tsx +65 -0
- package/cypress/specs/SelectBox.cy.tsx +134 -66
- package/cypress/support/component-imports.instrumented.ts +8 -0
- package/cypress/support/component-imports.src.ts +9 -1
- package/dist/Accordion.d.ts +15 -0
- package/dist/Accordion.js +19 -0
- package/dist/Accordion.js.map +1 -1
- package/dist/AccordionItem.d.ts +19 -0
- package/dist/AccordionItem.js +23 -0
- package/dist/AccordionItem.js.map +1 -1
- package/dist/AccordionItemTemplate.js +7 -2
- package/dist/AccordionItemTemplate.js.map +1 -1
- package/dist/AccordionTemplate.js +21 -1
- package/dist/AccordionTemplate.js.map +1 -1
- package/dist/Button.d.ts +8 -0
- package/dist/Button.js +11 -0
- package/dist/Button.js.map +1 -1
- package/dist/Footer.d.ts +45 -3
- package/dist/Footer.js +41 -17
- package/dist/Footer.js.map +1 -1
- package/dist/List.d.ts +9 -2
- package/dist/List.js +19 -8
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeader.d.ts +2 -1
- package/dist/ListGroupHeader.js.map +1 -1
- package/dist/ListItem.d.ts +12 -1
- package/dist/ListItem.js +15 -1
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +10 -0
- package/dist/ListItemBase.js +31 -0
- package/dist/ListItemBase.js.map +1 -1
- package/dist/ListSelectAll.d.ts +2 -1
- package/dist/ListSelectAll.js.map +1 -1
- package/dist/MastheadItem.d.ts +2 -0
- package/dist/MastheadItem.js +6 -0
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadProfileMenu.d.ts +67 -3
- package/dist/MastheadProfileMenu.js +164 -10
- package/dist/MastheadProfileMenu.js.map +1 -1
- package/dist/MastheadShell.d.ts +1 -0
- package/dist/MastheadShell.js +6 -1
- package/dist/MastheadShell.js.map +1 -1
- package/dist/PromoTile.d.ts +143 -0
- package/dist/PromoTile.js +198 -0
- package/dist/PromoTile.js.map +1 -0
- package/dist/PromoTileTemplate.d.ts +2 -0
- package/dist/PromoTileTemplate.js +22 -0
- package/dist/PromoTileTemplate.js.map +1 -0
- package/dist/Quote.d.ts +11 -0
- package/dist/Quote.js +18 -3
- package/dist/Quote.js.map +1 -1
- package/dist/Search.d.ts +3 -1
- package/dist/Search.js +1 -0
- package/dist/Search.js.map +1 -1
- package/dist/SearchableListBase.d.ts +16 -0
- package/dist/SearchableListBase.js +31 -1
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SelectBox.js +10 -0
- package/dist/SelectBox.js.map +1 -1
- package/dist/SelectBoxItem.d.ts +29 -0
- package/dist/SelectBoxItem.js +26 -0
- package/dist/SelectBoxItem.js.map +1 -1
- package/dist/StatusBadge.d.ts +1 -7
- package/dist/StatusBadge.js +1 -8
- package/dist/StatusBadge.js.map +1 -1
- package/dist/StepInputTemplate.js +1 -1
- package/dist/StepInputTemplate.js.map +1 -1
- package/dist/assets/{InputSuggestions-xcV7PZDf.js → InputSuggestions-DtUQULbo.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-RYCr4pVL.js → ListItemStandardExpandableTextTemplate-B62PaSFk.js} +1 -1
- package/dist/assets/{bundle.esm-bg-64miJ.js → bundle.esm-Ba8g4ech.js} +211 -210
- package/dist/assets/messagebundle_en-PmkE-Vht.js +1 -0
- package/dist/css/themes/AccordionItem.css +1 -1
- package/dist/css/themes/BreadcrumbsPopover.css +1 -1
- package/dist/css/themes/Button.css +1 -1
- package/dist/css/themes/CountrySelector.css +1 -1
- package/dist/css/themes/Divider.css +1 -1
- package/dist/css/themes/Footer.css +1 -1
- package/dist/css/themes/HeroBanner.css +1 -1
- package/dist/css/themes/ListItem.css +1 -1
- package/dist/css/themes/MastheadProfileMenu.css +1 -1
- package/dist/css/themes/PromoTile.css +1 -0
- package/dist/css/themes/Quote.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/StepInput.css +1 -1
- package/dist/css/themes/Tag.css +1 -1
- package/dist/custom-elements-internal.json +1515 -277
- package/dist/custom-elements.json +1220 -146
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +7 -1
- package/dist/generated/i18n/i18n-defaults.js +7 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/FooterTemplate.lit.js +33 -32
- package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
- package/dist/generated/templates/HeroBannerTemplate.lit.js +1 -1
- package/dist/generated/templates/HeroBannerTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js +31 -23
- package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListTemplate.lit.js +2 -2
- package/dist/generated/templates/ListTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +11 -6
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js +6 -6
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
- package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
- package/dist/generated/themes/AccordionItem.css.js +1 -1
- package/dist/generated/themes/AccordionItem.css.js.map +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.d.ts +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.js.map +1 -1
- package/dist/generated/themes/Button.css.d.ts +1 -1
- package/dist/generated/themes/Button.css.js +1 -1
- package/dist/generated/themes/Button.css.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/Divider.css.d.ts +1 -1
- package/dist/generated/themes/Divider.css.js +1 -1
- package/dist/generated/themes/Divider.css.js.map +1 -1
- package/dist/generated/themes/Footer.css.d.ts +1 -1
- package/dist/generated/themes/Footer.css.js +1 -1
- package/dist/generated/themes/Footer.css.js.map +1 -1
- package/dist/generated/themes/HeroBanner.css.d.ts +1 -1
- package/dist/generated/themes/HeroBanner.css.js +1 -1
- package/dist/generated/themes/HeroBanner.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/MastheadProfileMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
- package/dist/generated/themes/PromoTile.css.d.ts +2 -0
- package/dist/generated/themes/PromoTile.css.js +8 -0
- package/dist/generated/themes/PromoTile.css.js.map +1 -0
- package/dist/generated/themes/Quote.css.d.ts +1 -1
- package/dist/generated/themes/Quote.css.js +1 -1
- package/dist/generated/themes/Quote.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/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/StepInput.css.d.ts +1 -1
- package/dist/generated/themes/StepInput.css.js +1 -1
- package/dist/generated/themes/StepInput.css.js.map +1 -1
- package/dist/generated/themes/Tag.css.d.ts +1 -1
- package/dist/generated/themes/Tag.css.js +1 -1
- package/dist/generated/themes/Tag.css.js.map +1 -1
- package/dist/messagebundle.properties +10 -0
- package/dist/messagebundle_en.properties +6 -0
- package/dist/types/PromoTile.d.ts +60 -0
- package/dist/types/PromoTile.js +63 -0
- package/dist/types/PromoTile.js.map +1 -0
- package/dist/types/StatusBadgeValueState.d.ts +8 -0
- package/dist/types/StatusBadgeValueState.js +10 -0
- package/dist/types/StatusBadgeValueState.js.map +1 -0
- package/dist/utils/debounce.d.ts +3 -1
- package/dist/utils/debounce.js +16 -4
- package/dist/utils/debounce.js.map +1 -1
- package/dist/vscode.html-custom-data.json +185 -16
- package/dist/web-types.json +603 -34
- package/package.json +1 -1
- package/src/Accordion.ts +19 -0
- package/src/AccordionItem.ts +28 -0
- package/src/AccordionItemTemplate.tsx +25 -10
- package/src/AccordionTemplate.tsx +22 -1
- package/src/Button.ts +10 -0
- package/src/Footer.hbs +39 -36
- package/src/Footer.ts +81 -6
- package/src/HeroBanner.hbs +0 -1
- package/src/List.hbs +0 -2
- package/src/List.ts +27 -8
- package/src/ListGroupHeader.ts +2 -1
- package/src/ListItem.hbs +16 -2
- package/src/ListItem.ts +29 -2
- package/src/ListItemBase.ts +42 -0
- package/src/ListSelectAll.ts +2 -1
- package/src/MastheadItem.ts +9 -0
- package/src/MastheadProfileMenu.hbs +79 -15
- package/src/MastheadProfileMenu.ts +228 -13
- package/src/MastheadShell.ts +7 -1
- package/src/PromoTile.ts +290 -0
- package/src/PromoTileTemplate.tsx +68 -0
- package/src/Quote.ts +17 -3
- package/src/Search.ts +1 -0
- package/src/SearchableListBase.hbs +18 -1
- package/src/SearchableListBase.ts +47 -1
- package/src/SelectBox.ts +11 -0
- package/src/SelectBoxItem.ts +39 -0
- package/src/StatusBadge.ts +1 -8
- package/src/StepInputTemplate.tsx +1 -1
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/FooterTemplate.lit.ts +33 -32
- package/src/generated/templates/HeroBannerTemplate.lit.ts +1 -1
- package/src/generated/templates/ListItemTemplate.lit.ts +31 -23
- package/src/generated/templates/ListTemplate.lit.ts +2 -2
- package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +10 -5
- package/src/generated/templates/SearchableListBaseTemplate.lit.ts +6 -6
- package/src/generated/themes/AccordionItem.css.ts +1 -1
- package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
- package/src/generated/themes/Button.css.ts +1 -1
- package/src/generated/themes/CountrySelector.css.ts +1 -1
- package/src/generated/themes/Divider.css.ts +1 -1
- package/src/generated/themes/Footer.css.ts +1 -1
- package/src/generated/themes/HeroBanner.css.ts +1 -1
- package/src/generated/themes/ListItem.css.ts +1 -1
- package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
- package/src/generated/themes/PromoTile.css.ts +9 -0
- package/src/generated/themes/Quote.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/StepInput.css.ts +1 -1
- package/src/generated/themes/Tag.css.ts +1 -1
- package/src/i18n/messagebundle.properties +10 -0
- package/src/i18n/messagebundle_en.properties +6 -0
- package/src/themes/AccordionItem.css +61 -22
- package/src/themes/BreadcrumbsPopover.css +2 -1
- package/src/themes/Button.css +13 -0
- package/src/themes/CountrySelector.css +4 -0
- package/src/themes/Divider.css +2 -1
- package/src/themes/Footer.css +44 -9
- package/src/themes/HeroBanner.css +34 -32
- package/src/themes/ListItem.css +4 -9
- package/src/themes/MastheadProfileMenu.css +87 -3
- package/src/themes/PromoTile.css +152 -0
- package/src/themes/Quote.css +21 -24
- package/src/themes/StepInput.css +10 -0
- package/src/themes/Tag.css +18 -24
- package/src/types/PromoTile.ts +61 -0
- package/src/types/StatusBadgeValueState.ts +9 -0
- package/src/utils/debounce.ts +19 -4
- package/dist/assets/messagebundle_en-BHfPJk-2.js +0 -1
package/src/ListItem.ts
CHANGED
|
@@ -7,10 +7,13 @@ import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
|
7
7
|
import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
8
8
|
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
|
|
9
9
|
import UDExCheckbox from "./Checkbox.js";
|
|
10
|
+
import type { UDExListItemBaseEvents } from "./ListItemBase.js";
|
|
10
11
|
import UDExListItemBase from "./ListItemBase.js";
|
|
11
12
|
import type UDExListGroupHeaderBase from "./ListGroupHeaderBase.js";
|
|
12
13
|
import UDExAvatar, { UDExAvatarShape, UDExAvatarSize } from "./Avatar.js";
|
|
13
14
|
import UDExButton from "./Button.js";
|
|
15
|
+
import UDExStatusBadge from "./StatusBadge.js";
|
|
16
|
+
import type UDExStatusBadgeValueState from "./types/StatusBadgeValueState.js";
|
|
14
17
|
import {
|
|
15
18
|
UDExListItemSize, UDExListMode, UDExAdditionalTextState,
|
|
16
19
|
} from "./types/List.js";
|
|
@@ -68,6 +71,7 @@ type UDExListItemItemPressEventDetail = {
|
|
|
68
71
|
UDExButton,
|
|
69
72
|
UDExRadioButton,
|
|
70
73
|
UDExCheckbox,
|
|
74
|
+
UDExStatusBadge,
|
|
71
75
|
Icon,
|
|
72
76
|
],
|
|
73
77
|
})
|
|
@@ -89,7 +93,16 @@ class UDExListItem extends UDExListItemBase {
|
|
|
89
93
|
eventDetails!: {
|
|
90
94
|
"item-press": UDExListItemItemPressEventDetail,
|
|
91
95
|
"item-focus": UDExListItemBaseEventDetail,
|
|
92
|
-
};
|
|
96
|
+
} & UDExListItemBaseEvents;
|
|
97
|
+
/**
|
|
98
|
+
* Defines the image badge state of the component.
|
|
99
|
+
*
|
|
100
|
+
* @default ""
|
|
101
|
+
* @public
|
|
102
|
+
*/
|
|
103
|
+
@property()
|
|
104
|
+
imageBadgeState?: `${UDExStatusBadgeValueState}`;
|
|
105
|
+
|
|
93
106
|
/**
|
|
94
107
|
* Defines the accessible name of the item.
|
|
95
108
|
*
|
|
@@ -190,6 +203,7 @@ class UDExListItem extends UDExListItemBase {
|
|
|
190
203
|
*/
|
|
191
204
|
@slot({ type: Node, "default": true })
|
|
192
205
|
content!: Array<Node>;
|
|
206
|
+
|
|
193
207
|
/**
|
|
194
208
|
* Slot for first icon.
|
|
195
209
|
*
|
|
@@ -198,6 +212,7 @@ class UDExListItem extends UDExListItemBase {
|
|
|
198
212
|
*/
|
|
199
213
|
@slot({ type: UDExButton })
|
|
200
214
|
firstIcon!: Array<UDExButton>;
|
|
215
|
+
|
|
201
216
|
/**
|
|
202
217
|
* Slot for second icon.
|
|
203
218
|
*
|
|
@@ -261,6 +276,10 @@ class UDExListItem extends UDExListItemBase {
|
|
|
261
276
|
}
|
|
262
277
|
|
|
263
278
|
handleKeyDown(e: KeyboardEvent) {
|
|
279
|
+
if (this.firstIconElement === e.target || this.secondIconElement === e.target) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
|
|
264
283
|
if (isSpace(e)) {
|
|
265
284
|
e.preventDefault();
|
|
266
285
|
}
|
|
@@ -324,6 +343,14 @@ class UDExListItem extends UDExListItemBase {
|
|
|
324
343
|
return `${listItemClass} ${groupClassName} ${this._additionalClassName} ${controlledClassName} ${largeSizeClassName}`.trim();
|
|
325
344
|
}
|
|
326
345
|
|
|
346
|
+
get firstIconElement(): UDExButton {
|
|
347
|
+
return this.getSlottedNodes<UDExButton>("firstIcon")[0];
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
get secondIconElement(): UDExButton {
|
|
351
|
+
return this.getSlottedNodes<UDExButton>("secondIcon")[0];
|
|
352
|
+
}
|
|
353
|
+
|
|
327
354
|
get hasFirstIcon(): boolean {
|
|
328
355
|
return !!this.firstIcon;
|
|
329
356
|
}
|
|
@@ -357,7 +384,7 @@ class UDExListItem extends UDExListItemBase {
|
|
|
357
384
|
}
|
|
358
385
|
|
|
359
386
|
get accessibleListItemName(): string {
|
|
360
|
-
return this.accessibleName || this.label;
|
|
387
|
+
return this.accessibleName || this.label?.replace(/<[^>]+>/g, "");
|
|
361
388
|
}
|
|
362
389
|
|
|
363
390
|
get stateAccessibleName(): string {
|
package/src/ListItemBase.ts
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
2
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
3
3
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
|
+
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
4
5
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
5
6
|
import { UDExListItemSize, UDExListMode, UDExListStyleType } from "./types/List.js";
|
|
6
7
|
|
|
8
|
+
type UDExListItemBaseEventDetail = {
|
|
9
|
+
originalEvent: PointerEvent,
|
|
10
|
+
item: HTMLElement,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type UDExListItemBaseEvents = {
|
|
14
|
+
"first-icon-click": UDExListItemBaseEventDetail,
|
|
15
|
+
"second-icon-click": UDExListItemBaseEventDetail,
|
|
16
|
+
}
|
|
17
|
+
|
|
7
18
|
/**
|
|
8
19
|
* @class
|
|
9
20
|
*
|
|
@@ -20,7 +31,22 @@ import { UDExListItemSize, UDExListMode, UDExListStyleType } from "./types/List.
|
|
|
20
31
|
renderer: litRender,
|
|
21
32
|
})
|
|
22
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Fired event when the user click on a first icon.
|
|
36
|
+
*
|
|
37
|
+
* @public
|
|
38
|
+
*/
|
|
39
|
+
@event("first-icon-click", { bubbles: true })
|
|
40
|
+
/**
|
|
41
|
+
* Fired event when the user click on a second icon.
|
|
42
|
+
*
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
@event("second-icon-click", { bubbles: true })
|
|
46
|
+
|
|
23
47
|
class UDExListItemBase extends UI5Element {
|
|
48
|
+
eventDetails!: UDExListItemBaseEvents;
|
|
49
|
+
|
|
24
50
|
/**
|
|
25
51
|
* Defines the <code>label</code> for the item.
|
|
26
52
|
*
|
|
@@ -114,6 +140,22 @@ class UDExListItemBase extends UI5Element {
|
|
|
114
140
|
@property({ type: String })
|
|
115
141
|
_tabIndex!: string;
|
|
116
142
|
|
|
143
|
+
_fireIconClickEvent(e: PointerEvent): void {
|
|
144
|
+
const target = e.target as HTMLElement;
|
|
145
|
+
const slot = target.getAttribute("slot");
|
|
146
|
+
if (slot === "firstIcon") {
|
|
147
|
+
this.fireDecoratorEvent("first-icon-click", {
|
|
148
|
+
originalEvent: e,
|
|
149
|
+
item: this,
|
|
150
|
+
});
|
|
151
|
+
} else if (slot === "secondIcon") {
|
|
152
|
+
this.fireDecoratorEvent("second-icon-click", {
|
|
153
|
+
originalEvent: e,
|
|
154
|
+
item: this,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
117
159
|
get _effectiveTabIndex(): string {
|
|
118
160
|
if (this.disabled) {
|
|
119
161
|
return "-1";
|
package/src/ListSelectAll.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { UDExListMode } from "./types/List.js";
|
|
|
9
9
|
import { SELECT_ALL } from "./generated/i18n/i18n-defaults.js";
|
|
10
10
|
import ListSelectAllTemplate from "./generated/templates/ListSelectAllTemplate.lit.js";
|
|
11
11
|
import UDExListItem from "./ListItem.js";
|
|
12
|
+
import type { UDExListItemBaseEvents } from "./ListItemBase.js";
|
|
12
13
|
|
|
13
14
|
// Styles
|
|
14
15
|
import ListGroupHeaderCss from "./generated/themes/ListGroupHeader.css.js";
|
|
@@ -50,7 +51,7 @@ type UDExListSelectAllSelectAllEventDetail = {
|
|
|
50
51
|
class UDExListSelectAll extends UDExListGroupHeaderBase {
|
|
51
52
|
eventDetails!: {
|
|
52
53
|
"select-all": UDExListSelectAllSelectAllEventDetail,
|
|
53
|
-
};
|
|
54
|
+
} & UDExListItemBaseEvents;
|
|
54
55
|
|
|
55
56
|
@i18n("@sapudex/web-components")
|
|
56
57
|
static i18nBundle: I18nBundle;
|
package/src/MastheadItem.ts
CHANGED
|
@@ -23,6 +23,8 @@ import { UDExTarget } from "./types/common.js";
|
|
|
23
23
|
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
24
24
|
import parseArrayFromString from "./utils/parseArrayFromString.js";
|
|
25
25
|
import AnalyticsName from "./types/AnalyticsName.js";
|
|
26
|
+
import type UDExMastheadProfileMenu from "./MastheadProfileMenu.js";
|
|
27
|
+
|
|
26
28
|
// Styles
|
|
27
29
|
import MastheadItemCss from "./generated/themes/MastheadItem.css.js";
|
|
28
30
|
|
|
@@ -398,6 +400,9 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
398
400
|
}
|
|
399
401
|
|
|
400
402
|
handleItemClick(e: PointerEvent): void {
|
|
403
|
+
if (this.isProfileBtn) {
|
|
404
|
+
this.profileSlot.closeIdentitiesPanel();
|
|
405
|
+
}
|
|
401
406
|
this.handleSelectedChange();
|
|
402
407
|
this.fireItemClickEvent(e);
|
|
403
408
|
this.fireDropdownEvents();
|
|
@@ -626,6 +631,10 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
626
631
|
return this.accessibleName || this.innerText || (this.isProfileBtn ? UDExMastheadItem.i18nBundle.getText(PROFILE) : "");
|
|
627
632
|
}
|
|
628
633
|
|
|
634
|
+
get profileSlot(): UDExMastheadProfileMenu {
|
|
635
|
+
return this.getSlottedNodes<UDExMastheadProfileMenu>("dropdown")[0];
|
|
636
|
+
}
|
|
637
|
+
|
|
629
638
|
get isMobile(): boolean {
|
|
630
639
|
return BreakpointUtils.isAtMost("M") || this.mastheadShell?._isMobileMode;
|
|
631
640
|
}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
<div
|
|
1
|
+
<div
|
|
2
|
+
@keydown="{{handleKeydown}}"
|
|
3
|
+
class="{{rootClass}}">
|
|
4
|
+
{{#if _openIdentities}}
|
|
5
|
+
{{> account-indetities}}
|
|
6
|
+
{{else}}
|
|
7
|
+
{{> account-profile}}
|
|
8
|
+
{{/if}}
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
{{#*inline "account-profile"}}
|
|
2
12
|
<div class="udex-masthead-profile-menu__header">
|
|
3
13
|
{{#if userData}}
|
|
4
14
|
<udex-avatar
|
|
@@ -6,35 +16,89 @@
|
|
|
6
16
|
size="L"
|
|
7
17
|
initials="{{userData.avatarInitials}}">
|
|
8
18
|
{{#if userData.avatarUrl}}
|
|
9
|
-
|
|
19
|
+
<img src="{{userData.avatarUrl}}" alt="avatar"/>
|
|
10
20
|
{{/if}}
|
|
11
21
|
</udex-avatar>
|
|
12
22
|
<div>
|
|
13
23
|
<p class="udex-profile-menu__account-name">{{userData.name}}</p>
|
|
14
24
|
<p class="udex-profile-menu__account-email">{{userData.email}}</p>
|
|
25
|
+
{{#if hasIdentities}}
|
|
26
|
+
<udex-button
|
|
27
|
+
@click="{{handleSwitcherClick}}"
|
|
28
|
+
class="udex-masthead-profile-menu__btn-switcher"
|
|
29
|
+
size="Large"
|
|
30
|
+
end-icon="slim-arrow-right"
|
|
31
|
+
design="Invisible">
|
|
32
|
+
{{switcherAccountText}}
|
|
33
|
+
</udex-button>
|
|
34
|
+
{{/if}}
|
|
15
35
|
</div>
|
|
16
36
|
{{/if}}
|
|
17
37
|
</div>
|
|
18
38
|
{{#if messageAvailable}}
|
|
19
39
|
<div class="udex-masthead-profile-menu__message">
|
|
20
|
-
|
|
40
|
+
<slot name="message"></slot>
|
|
21
41
|
</div>
|
|
22
42
|
{{/if}}
|
|
23
43
|
<div class="udex-masthead-profile-menu__links">
|
|
24
44
|
<udex-masthead-menu
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
45
|
+
exportparts="badge, menu-item"
|
|
46
|
+
part="menu"
|
|
47
|
+
sub-items='{{linksList}}'
|
|
48
|
+
@ui5-menu-item-click="{{handleProfileMenuItemClick}}">
|
|
29
49
|
</udex-masthead-menu>
|
|
30
50
|
{{#if logoutLink}}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
51
|
+
<div class="udex-masthead-profile-menu__actions">
|
|
52
|
+
<udex-masthead-menu-item
|
|
53
|
+
@click="{{handleUserLogoutItemClick}}"
|
|
54
|
+
label="{{logoutText}}"
|
|
55
|
+
url="{{logoutUrl}}">
|
|
56
|
+
</udex-masthead-menu-item>
|
|
57
|
+
</div>
|
|
38
58
|
{{/if}}
|
|
39
59
|
</div>
|
|
40
|
-
|
|
60
|
+
{{/inline}}
|
|
61
|
+
|
|
62
|
+
{{#*inline "account-indetities"}}
|
|
63
|
+
<div class="udex-masthead-profile-menu__header-wrap back-btn">
|
|
64
|
+
<udex-masthead-menu-item
|
|
65
|
+
class="udex-masthead-profile-menu__btn-back"
|
|
66
|
+
@click="{{handleSwitcherClick}}"
|
|
67
|
+
label="{{btnBackText}}"
|
|
68
|
+
type="Button"
|
|
69
|
+
icon-start>
|
|
70
|
+
</udex-masthead-menu-item>
|
|
71
|
+
<span class="udex-masthead-profile-menu__switcher-title">{{switcherAccountText}}</span>
|
|
72
|
+
</div>
|
|
73
|
+
<div class="udex-masthead-profile-menu__identities-list-wrap">
|
|
74
|
+
<span class="udex-masthead-profile-menu__identities-list-title">{{listTitleText}}</span>
|
|
75
|
+
{{#if identitiesList.length}}
|
|
76
|
+
<udex-list
|
|
77
|
+
class="udex-masthead-profile-menu__identities-list"
|
|
78
|
+
mode="SingleSelect"
|
|
79
|
+
accessible-name="{{listTitleText}}"
|
|
80
|
+
controlled>
|
|
81
|
+
{{#each identitiesList}}
|
|
82
|
+
<udex-list-item
|
|
83
|
+
id="{{this.idsUser}}"
|
|
84
|
+
class="udex-masthead-profile-menu__identities-list-item"
|
|
85
|
+
@ui5-item-press="{{../fireEventIdentityItemClick}}"
|
|
86
|
+
supporting-text="{{this.supportingText}}"
|
|
87
|
+
image-badge-state="{{this.statusBadge}}"
|
|
88
|
+
image="{{this.avatarUrl}}"
|
|
89
|
+
image-alt="{{this.name}}">
|
|
90
|
+
{{this.email}}
|
|
91
|
+
</udex-list-item>
|
|
92
|
+
{{/each}}
|
|
93
|
+
</udex-list>
|
|
94
|
+
{{/if}}
|
|
95
|
+
<udex-button
|
|
96
|
+
@click="{{fireEventAddOrRemoveAccountClick}}"
|
|
97
|
+
class="udex-masthead-profile-menu__add-remove-btn"
|
|
98
|
+
design="Primary"
|
|
99
|
+
end-icon="action"
|
|
100
|
+
size="Large">
|
|
101
|
+
{{addOrRemoveAccountText}}
|
|
102
|
+
</udex-button>
|
|
103
|
+
</div>
|
|
104
|
+
{{/inline}}
|
|
@@ -6,16 +6,28 @@ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
|
6
6
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
7
7
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
8
8
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
LOGOUT, SWITCH_ACCOUNT, BACK, OTHER_IDENTITIES, ADD_OR_REMOVE_ACCOUNT,
|
|
11
|
+
} from "./generated/i18n/i18n-defaults.js";
|
|
12
|
+
import { isEscape } from "@ui5/webcomponents-base/Keys.js";
|
|
10
13
|
import UDExMastheadMenu from "./MastheadMenu.js";
|
|
14
|
+
import UDExButton from "./Button.js";
|
|
15
|
+
import UDExList from "./List.js";
|
|
16
|
+
import UDExListItem from "./ListItem.js";
|
|
17
|
+
import UDExMastheadMenuItem from "./MastheadMenuItem.js";
|
|
11
18
|
import MastheadProfileMenuTemplate from "./generated/templates/MastheadProfileMenuTemplate.lit.js";
|
|
12
|
-
import type UDExMastheadMenuItem from "./MastheadMenuItem.js";
|
|
13
19
|
import parseArrayFromString from "./utils/parseArrayFromString.js";
|
|
14
20
|
import AnalyticsName from "./types/AnalyticsName.js";
|
|
15
21
|
import type UDExMastheadShell from "./MastheadShell.js";
|
|
16
|
-
|
|
22
|
+
import "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
|
|
23
|
+
import "@ui5/webcomponents-icons/dist/action.js";
|
|
24
|
+
import type { LinkClickEventDetail } from "@ui5/webcomponents/dist/Link.js";
|
|
17
25
|
// Styles
|
|
18
26
|
import MastheadProfileMenuCss from "./generated/themes/MastheadProfileMenu.css.js";
|
|
27
|
+
import UDExStatusBadgeValueState from "./types/StatusBadgeValueState.js";
|
|
28
|
+
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/delegate/ResizeHandler.js";
|
|
29
|
+
import ResizeHandler from "@ui5/webcomponents-base/delegate/ResizeHandler.js";
|
|
30
|
+
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
19
31
|
|
|
20
32
|
interface UserData {
|
|
21
33
|
name?: string,
|
|
@@ -25,6 +37,24 @@ interface UserData {
|
|
|
25
37
|
avatarInitials?: string
|
|
26
38
|
}
|
|
27
39
|
|
|
40
|
+
interface UserIdentity {
|
|
41
|
+
avatarUrl: string,
|
|
42
|
+
email: string,
|
|
43
|
+
name: string,
|
|
44
|
+
idsUser: string,
|
|
45
|
+
isLogged: boolean,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
interface ExtendedUserIdentity extends UserIdentity {
|
|
49
|
+
supportingText: string;
|
|
50
|
+
statusBadge: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
type UDExMastheadProfileMenuIdentityClickEventDetail = {
|
|
54
|
+
item: ExtendedUserIdentity;
|
|
55
|
+
analyticsName: AnalyticsName,
|
|
56
|
+
};
|
|
57
|
+
|
|
28
58
|
type UDExMastheadProfileMenuItemClickEventDetail = {
|
|
29
59
|
item: UDExMastheadMenuItem,
|
|
30
60
|
originalEvent: PointerEvent,
|
|
@@ -32,6 +62,10 @@ type UDExMastheadProfileMenuItemClickEventDetail = {
|
|
|
32
62
|
sourceNode: HTMLElement,
|
|
33
63
|
}
|
|
34
64
|
|
|
65
|
+
type UDExMastheadProfileMenuAddOrRemoveClickEventDetail = {
|
|
66
|
+
analyticsName: AnalyticsName,
|
|
67
|
+
}
|
|
68
|
+
|
|
35
69
|
/**
|
|
36
70
|
* @class
|
|
37
71
|
*
|
|
@@ -54,27 +88,59 @@ type UDExMastheadProfileMenuItemClickEventDetail = {
|
|
|
54
88
|
renderer: litRender,
|
|
55
89
|
styles: [UDExMastheadMenu.styles, MastheadProfileMenuCss],
|
|
56
90
|
template: MastheadProfileMenuTemplate,
|
|
57
|
-
dependencies: [
|
|
91
|
+
dependencies: [
|
|
92
|
+
UDExMastheadMenuItem,
|
|
93
|
+
UDExMastheadMenu,
|
|
94
|
+
UDExListItem,
|
|
95
|
+
UDExButton,
|
|
96
|
+
UDExList,
|
|
97
|
+
],
|
|
58
98
|
})
|
|
59
99
|
|
|
60
100
|
/**
|
|
61
101
|
* Fired when use click Logout link
|
|
62
102
|
* @public
|
|
63
103
|
*/
|
|
64
|
-
@event("logout", { bubbles: true })
|
|
104
|
+
@event("logout", { cancelable: true, bubbles: true })
|
|
65
105
|
|
|
66
106
|
/**
|
|
67
107
|
* Fires when profile menu item is clicked
|
|
68
108
|
*
|
|
69
109
|
* @public
|
|
70
110
|
*/
|
|
71
|
-
@event("profile-item-click", { bubbles: true })
|
|
111
|
+
@event("profile-item-click", { cancelable: true, bubbles: true })
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Fired when use click add or remove account button
|
|
115
|
+
*
|
|
116
|
+
* @public
|
|
117
|
+
*/
|
|
118
|
+
@event("add-or-remove-account-click", { cancelable: true, bubbles: true })
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Fires when identity item is clicked
|
|
122
|
+
*
|
|
123
|
+
* @public
|
|
124
|
+
*/
|
|
125
|
+
@event("identity-item-click", { cancelable: true, bubbles: true })
|
|
72
126
|
|
|
73
127
|
class UDExMastheadProfileMenu extends UI5Element {
|
|
74
128
|
eventDetails!: {
|
|
75
129
|
"logout": UDExMastheadProfileMenuItemClickEventDetail,
|
|
76
|
-
"profile-item-click": UDExMastheadProfileMenuItemClickEventDetail
|
|
130
|
+
"profile-item-click": UDExMastheadProfileMenuItemClickEventDetail,
|
|
131
|
+
"add-or-remove-account-click": UDExMastheadProfileMenuAddOrRemoveClickEventDetail,
|
|
132
|
+
"identity-item-click": UDExMastheadProfileMenuIdentityClickEventDetail,
|
|
77
133
|
};
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Defines the object of user identities
|
|
137
|
+
*
|
|
138
|
+
* @default ""
|
|
139
|
+
* @public
|
|
140
|
+
*/
|
|
141
|
+
@property()
|
|
142
|
+
identities!: string;
|
|
143
|
+
|
|
78
144
|
/**
|
|
79
145
|
* Defines the object of link values
|
|
80
146
|
*
|
|
@@ -110,6 +176,14 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
110
176
|
@property({ type: Boolean })
|
|
111
177
|
_isMobileMode!: boolean;
|
|
112
178
|
|
|
179
|
+
/**
|
|
180
|
+
* Defines the open identities panel state
|
|
181
|
+
*
|
|
182
|
+
* @private
|
|
183
|
+
*/
|
|
184
|
+
@property({ type: Boolean })
|
|
185
|
+
_openIdentities: boolean = false;
|
|
186
|
+
|
|
113
187
|
/**
|
|
114
188
|
* Placeholder for message strip.
|
|
115
189
|
*
|
|
@@ -122,25 +196,115 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
122
196
|
static i18nBundle: I18nBundle;
|
|
123
197
|
|
|
124
198
|
_mastheadShell!: UDExMastheadShell;
|
|
199
|
+
_handleResizeBound: ResizeObserverCallback;
|
|
200
|
+
_shouldFocusBackBtn!: boolean;
|
|
201
|
+
_shouldFocusSwitchBtn!: boolean;
|
|
202
|
+
|
|
203
|
+
constructor() {
|
|
204
|
+
super();
|
|
205
|
+
this._handleResizeBound = this.handleResize.bind(this);
|
|
206
|
+
}
|
|
125
207
|
|
|
126
208
|
onAfterRendering(): void {
|
|
127
209
|
this._mastheadShell = this.mastheadShell;
|
|
210
|
+
this.updateFocusState(this._shouldFocusBackBtn, this.focusBackBtn.bind(this));
|
|
211
|
+
this.updateFocusState(this._shouldFocusSwitchBtn, this.focusSwitchBtn.bind(this));
|
|
212
|
+
this.setMenuItemsMobileMode();
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
onEnterDOM(): void {
|
|
216
|
+
ResizeHandler.register(this, this._handleResizeBound);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
onExitDOM(): void {
|
|
220
|
+
ResizeHandler.deregister(this, this._handleResizeBound);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
handleResize(): void {
|
|
224
|
+
this._isMobileMode = this.isMobile;
|
|
225
|
+
|
|
226
|
+
if (this.profileMenuLinks) {
|
|
227
|
+
this.profileMenuLinks._isMobileMode = this.isMobile;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
handleSwitcherClick(): void {
|
|
232
|
+
this._openIdentities = !this._openIdentities;
|
|
233
|
+
this._shouldFocusBackBtn = this._openIdentities;
|
|
234
|
+
this._shouldFocusSwitchBtn = !this._openIdentities;
|
|
128
235
|
}
|
|
129
236
|
|
|
130
237
|
handleUserLogoutItemClick(e: PointerEvent): void {
|
|
131
238
|
this.fireLogoutItemClick(e);
|
|
132
|
-
if (this.
|
|
239
|
+
if (this._isMobileMode) {
|
|
133
240
|
this.closeMenu();
|
|
134
241
|
}
|
|
135
242
|
}
|
|
136
243
|
|
|
137
244
|
handleProfileMenuItemClick(e: CustomEvent): void {
|
|
138
245
|
this.fireMenuItemClick(e);
|
|
139
|
-
if (this.
|
|
246
|
+
if (this._isMobileMode) {
|
|
247
|
+
this.closeMenu();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
updateFocusState(shouldFocus: boolean, focusMethod: () => void): void {
|
|
252
|
+
if (shouldFocus) {
|
|
253
|
+
focusMethod();
|
|
254
|
+
if (focusMethod === this.focusBackBtn) {
|
|
255
|
+
this._shouldFocusBackBtn = false;
|
|
256
|
+
} else if (focusMethod === this.focusSwitchBtn) {
|
|
257
|
+
this._shouldFocusSwitchBtn = false;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
handleKeydown(e: KeyboardEvent): void {
|
|
263
|
+
if (isEscape(e) && this._openIdentities) {
|
|
264
|
+
this.closeIdentitiesPanel();
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
focusSwitchBtn(): void {
|
|
269
|
+
this.focusElement(".udex-masthead-profile-menu__btn-switcher");
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
focusBackBtn(): void {
|
|
273
|
+
this.focusElement(".udex-masthead-profile-menu__btn-back");
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
focusElement(selector: string): void {
|
|
277
|
+
const element = this.shadowRoot?.querySelector<UDExButton>(selector);
|
|
278
|
+
element?.focus();
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
fireEventIdentityItemClick(e: CustomEvent): void {
|
|
282
|
+
const { item } = e.detail;
|
|
283
|
+
const identity = this.identitiesList.find(({ idsUser }) => idsUser === item.id);
|
|
284
|
+
const eventPrevented = !this.fireDecoratorEvent("identity-item-click", {
|
|
285
|
+
item: identity!,
|
|
286
|
+
analyticsName: AnalyticsName.Header,
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
if (eventPrevented) {
|
|
290
|
+
e.preventDefault();
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
if (this._isMobileMode) {
|
|
140
294
|
this.closeMenu();
|
|
141
295
|
}
|
|
142
296
|
}
|
|
143
297
|
|
|
298
|
+
fireEventAddOrRemoveAccountClick(e: CustomEvent<LinkClickEventDetail>): void {
|
|
299
|
+
const eventPrevented = !this.fireDecoratorEvent("add-or-remove-account-click", {
|
|
300
|
+
analyticsName: AnalyticsName.Header,
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
if (eventPrevented) {
|
|
304
|
+
e.preventDefault();
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
144
308
|
fireLogoutItemClick(e: PointerEvent): void {
|
|
145
309
|
const item = e.target as UDExMastheadMenuItem;
|
|
146
310
|
|
|
@@ -168,8 +332,14 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
168
332
|
this._mastheadShell.mobileBtn?.focus();
|
|
169
333
|
}
|
|
170
334
|
|
|
171
|
-
|
|
172
|
-
|
|
335
|
+
closeIdentitiesPanel(): void {
|
|
336
|
+
this._openIdentities = false;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
setMenuItemsMobileMode(): void {
|
|
340
|
+
if (this._isMobileMode && this.profileMenuLinks) {
|
|
341
|
+
this.profileMenuLinks._isMobileMode = true;
|
|
342
|
+
}
|
|
173
343
|
}
|
|
174
344
|
|
|
175
345
|
get linksList(): string {
|
|
@@ -178,10 +348,22 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
178
348
|
}]) : "";
|
|
179
349
|
}
|
|
180
350
|
|
|
351
|
+
get hasIdentities(): boolean {
|
|
352
|
+
return !!this.identities?.length;
|
|
353
|
+
}
|
|
354
|
+
|
|
181
355
|
get userData(): UserData {
|
|
182
356
|
return parseArrayFromString(this.loggedInUser) as UserData;
|
|
183
357
|
}
|
|
184
358
|
|
|
359
|
+
get identitiesList(): Array<ExtendedUserIdentity> {
|
|
360
|
+
return parseArrayFromString<ExtendedUserIdentity>(this.identities).map((identity: UserIdentity) => ({
|
|
361
|
+
...identity,
|
|
362
|
+
statusBadge: identity.isLogged ? "" : UDExStatusBadgeValueState.Warning,
|
|
363
|
+
supportingText: [identity.name, identity.idsUser].filter(Boolean).join(", "),
|
|
364
|
+
}));
|
|
365
|
+
}
|
|
366
|
+
|
|
185
367
|
get messageAvailable(): boolean {
|
|
186
368
|
return !!this.message.length;
|
|
187
369
|
}
|
|
@@ -190,13 +372,46 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
190
372
|
return !!this.logoutUrl?.length;
|
|
191
373
|
}
|
|
192
374
|
|
|
193
|
-
get
|
|
194
|
-
|
|
375
|
+
get rootClass(): string {
|
|
376
|
+
const root = "udex-masthead-profile-menu";
|
|
377
|
+
return this._openIdentities ? `${root} ${root}_switcher` : root;
|
|
195
378
|
}
|
|
196
379
|
|
|
197
380
|
get mastheadShell(): UDExMastheadShell {
|
|
198
381
|
return document.querySelector<UDExMastheadShell>("[udex-masthead-shell]")!;
|
|
199
382
|
}
|
|
383
|
+
|
|
384
|
+
get profileMenuLinks(): UDExMastheadMenu | undefined | null {
|
|
385
|
+
return this.shadowRoot?.querySelector<UDExMastheadMenu>("[udex-masthead-menu]");
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
get btnBackText(): string {
|
|
389
|
+
return this._isMobileMode ? this.switcherAccountText : UDExMastheadProfileMenu.i18nBundle.getText(BACK);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
get listTitleText(): string {
|
|
393
|
+
return `${UDExMastheadProfileMenu.i18nBundle.getText(OTHER_IDENTITIES)} (${this.identitiesList.length})`;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
get addOrRemoveAccountText(): string {
|
|
397
|
+
return UDExMastheadProfileMenu.i18nBundle.getText(ADD_OR_REMOVE_ACCOUNT);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
get switcherAccountText(): string {
|
|
401
|
+
return UDExMastheadProfileMenu.i18nBundle.getText(SWITCH_ACCOUNT);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
get logoutText(): string {
|
|
405
|
+
return UDExMastheadProfileMenu.i18nBundle.getText(LOGOUT);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
get isAtMostBreakpointSizeM(): boolean {
|
|
409
|
+
return BreakpointUtils.isAtMost("M");
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
get isMobile(): boolean {
|
|
413
|
+
return this.isAtMostBreakpointSizeM || this.mastheadShell?.isMobileMenuMode;
|
|
414
|
+
}
|
|
200
415
|
}
|
|
201
416
|
|
|
202
417
|
UDExMastheadProfileMenu.define();
|
package/src/MastheadShell.ts
CHANGED
|
@@ -540,6 +540,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
540
540
|
|
|
541
541
|
if (this.isMobileMenuMode) {
|
|
542
542
|
this.setMobileMenuHeight();
|
|
543
|
+
this.setProfileMobileMode();
|
|
543
544
|
}
|
|
544
545
|
|
|
545
546
|
this._shouldHandleResize = true;
|
|
@@ -861,6 +862,12 @@ class UDExMastheadShell extends UI5Element {
|
|
|
861
862
|
this.style.setProperty(UDExMastheadVariable.mobileMenuHeight, mobileMenuHeight);
|
|
862
863
|
}
|
|
863
864
|
|
|
865
|
+
setProfileMobileMode(): void {
|
|
866
|
+
if (this.profileMenu) {
|
|
867
|
+
this.profileMenu._isMobileMode = this.isMobileMenuMode;
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
|
|
864
871
|
removeMobileMode(): void {
|
|
865
872
|
this._isMobileMode = false;
|
|
866
873
|
this.slottedItems.forEach((item: MastheadSlottedItem) => {
|
|
@@ -951,7 +958,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
951
958
|
this.profileMenu,
|
|
952
959
|
this.cartItem,
|
|
953
960
|
this.supportItem,
|
|
954
|
-
this.profileMenu,
|
|
955
961
|
this.profileMenuLinks,
|
|
956
962
|
this.countrySelectorItem,
|
|
957
963
|
this.countrySelectorMenu,
|