@sapudex/web-components 2.3.0 → 2.4.1
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/.eslintignore +3 -0
- package/bundle.esm.js +2 -0
- package/cypress/fixtures/contact-numbers.ts +10 -0
- package/cypress/specs/Accordion.cy.tsx +24 -0
- package/cypress/specs/Contact.cy.tsx +92 -0
- package/cypress/specs/ContactItem.cy.tsx +56 -0
- package/cypress/support/commands.ts +31 -2
- package/cypress/support/component-imports.instrumented.ts +4 -0
- package/cypress/support/component-imports.src.ts +4 -0
- package/dist/Accordion.d.ts +7 -1
- package/dist/Accordion.js +3 -3
- package/dist/Accordion.js.map +1 -1
- package/dist/Assets.js +31 -0
- package/dist/Assets.js.map +1 -1
- package/dist/AssetsVariables.js +6 -1
- package/dist/AssetsVariables.js.map +1 -1
- package/dist/Contact.d.ts +102 -0
- package/dist/Contact.js +152 -0
- package/dist/Contact.js.map +1 -0
- package/dist/ContactItem.d.ts +67 -0
- package/dist/ContactItem.js +96 -0
- package/dist/ContactItem.js.map +1 -0
- package/dist/ContactItemTemplate.d.ts +2 -0
- package/dist/ContactItemTemplate.js +13 -0
- package/dist/ContactItemTemplate.js.map +1 -0
- package/dist/ContactTemplate.d.ts +4 -0
- package/dist/ContactTemplate.js +29 -0
- package/dist/ContactTemplate.js.map +1 -0
- package/dist/CountrySelector.d.ts +0 -2
- package/dist/CountrySelector.js +0 -4
- package/dist/CountrySelector.js.map +1 -1
- package/dist/Footer.d.ts +0 -1
- package/dist/Footer.js +7 -9
- package/dist/Footer.js.map +1 -1
- package/dist/List.d.ts +1 -1
- package/dist/List.js +1 -1
- package/dist/List.js.map +1 -1
- package/dist/MastheadCountrySelector.d.ts +6 -0
- package/dist/MastheadCountrySelector.js +8 -2
- package/dist/MastheadCountrySelector.js.map +1 -1
- package/dist/MastheadItem.d.ts +13 -10
- package/dist/MastheadItem.js +24 -27
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadMenu.d.ts +3 -1
- package/dist/MastheadMenu.js +5 -4
- package/dist/MastheadMenu.js.map +1 -1
- package/dist/MastheadMenuItem.d.ts +1 -1
- package/dist/MastheadMenuItem.js +1 -1
- package/dist/MastheadMenuItem.js.map +1 -1
- package/dist/MastheadMobileMenu.d.ts +6 -0
- package/dist/MastheadMobileMenu.js +13 -2
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/MastheadProfileMenu.d.ts +4 -5
- package/dist/MastheadProfileMenu.js +9 -4
- package/dist/MastheadProfileMenu.js.map +1 -1
- package/dist/MastheadShell.d.ts +12 -4
- package/dist/MastheadShell.js +19 -10
- package/dist/MastheadShell.js.map +1 -1
- package/dist/MessageStripTemplate.js +1 -1
- package/dist/MessageStripTemplate.js.map +1 -1
- package/dist/SearchableListBase.js +5 -1
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +0 -1
- package/dist/SecondaryNavigation.js +2 -4
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/assets/{InputSuggestions-BgbbJ4tc.js → InputSuggestions-B7dpC1q9.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-onAnn1Tj.js → ListItemStandardExpandableTextTemplate-BF6mHEec.js} +1 -1
- package/dist/assets/{bundle.esm-CwUfibNQ.js → bundle.esm-BFePNrxi.js} +241 -231
- package/dist/assets/messagebundle_en-DXEe5nWA.js +1 -0
- package/dist/css/themes/Accordion.css +1 -1
- package/dist/css/themes/Button.css +1 -1
- package/dist/css/themes/Contact.css +1 -0
- package/dist/css/themes/ContactItem.css +1 -0
- package/dist/css/themes/MastheadProfileMenu.css +1 -1
- package/dist/css/themes/Modal.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/TabInOverflow.css +1 -1
- package/dist/custom-elements-internal.json +416 -21
- package/dist/custom-elements.json +393 -21
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +4 -1
- package/dist/generated/i18n/i18n-defaults.js +4 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/AccordionTemplate.lit.js +4 -2
- package/dist/generated/templates/AccordionTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +3 -3
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadItemTemplate.lit.js +25 -22
- package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMenuTemplate.lit.js +2 -2
- package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +14 -14
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadShellTemplate.lit.js +2 -2
- package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
- package/dist/generated/themes/Accordion.css.d.ts +1 -1
- package/dist/generated/themes/Accordion.css.js +1 -1
- package/dist/generated/themes/Accordion.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/Contact.css.d.ts +2 -0
- package/dist/generated/themes/Contact.css.js +8 -0
- package/dist/generated/themes/Contact.css.js.map +1 -0
- package/dist/generated/themes/ContactItem.css.d.ts +2 -0
- package/dist/generated/themes/ContactItem.css.js +8 -0
- package/dist/generated/themes/ContactItem.css.js.map +1 -0
- 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/Modal.css.d.ts +1 -1
- package/dist/generated/themes/Modal.css.js +1 -1
- package/dist/generated/themes/Modal.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/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/TabInOverflow.css.d.ts +1 -1
- package/dist/generated/themes/TabInOverflow.css.js +1 -1
- package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
- package/dist/messagebundle.properties +8 -0
- package/dist/messagebundle_en.properties +4 -0
- package/dist/types/AnalyticsName.d.ts +5 -0
- package/dist/types/AnalyticsName.js +7 -0
- package/dist/types/AnalyticsName.js.map +1 -0
- package/dist/types/ContactItemIcon.d.ts +6 -0
- package/dist/types/ContactItemIcon.js +8 -0
- package/dist/types/ContactItemIcon.js.map +1 -0
- package/dist/types/EventRibbon.d.ts +38 -13
- package/dist/types/EventRibbon.js +39 -12
- package/dist/types/EventRibbon.js.map +1 -1
- package/dist/utils/parseArrayFromString.d.ts +2 -0
- package/dist/utils/parseArrayFromString.js +5 -0
- package/dist/utils/parseArrayFromString.js.map +1 -0
- package/dist/vscode.html-custom-data.json +90 -26
- package/dist/web-types.json +184 -16
- package/package.json +2 -2
- package/src/Accordion.hbs +13 -9
- package/src/Accordion.ts +7 -4
- package/src/Assets.ts +29 -0
- package/src/AssetsVariables.ts +6 -1
- package/src/Contact.ts +200 -0
- package/src/ContactItem.ts +119 -0
- package/src/ContactItemTemplate.tsx +22 -0
- package/src/ContactTemplate.tsx +105 -0
- package/src/CountrySelector.ts +0 -5
- package/src/Footer.ts +7 -10
- package/src/List.ts +1 -1
- package/src/MastheadCountrySelector.hbs +3 -0
- package/src/MastheadCountrySelector.ts +13 -3
- package/src/MastheadItem.hbs +8 -0
- package/src/MastheadItem.ts +36 -35
- package/src/MastheadMenu.hbs +6 -1
- package/src/MastheadMenu.ts +7 -5
- package/src/MastheadMenuItem.hbs +1 -1
- package/src/MastheadMenuItem.ts +2 -2
- package/src/MastheadMobileMenu.hbs +24 -9
- package/src/MastheadMobileMenu.ts +19 -3
- package/src/MastheadProfileMenu.hbs +2 -0
- package/src/MastheadProfileMenu.ts +13 -10
- package/src/MastheadShell.hbs +2 -0
- package/src/MastheadShell.ts +31 -14
- package/src/MessageStripTemplate.tsx +1 -0
- package/src/SearchableListBase.ts +6 -1
- package/src/SecondaryNavigation.ts +3 -5
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/AccordionTemplate.lit.ts +4 -2
- package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +3 -3
- package/src/generated/templates/MastheadItemTemplate.lit.ts +25 -22
- package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +1 -1
- package/src/generated/templates/MastheadMenuTemplate.lit.ts +2 -2
- package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +14 -14
- package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +1 -1
- package/src/generated/templates/MastheadShellTemplate.lit.ts +2 -2
- package/src/generated/themes/Accordion.css.ts +1 -1
- package/src/generated/themes/Button.css.ts +1 -1
- package/src/generated/themes/Contact.css.ts +9 -0
- package/src/generated/themes/ContactItem.css.ts +9 -0
- package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
- package/src/generated/themes/Modal.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/Slider.css.ts +1 -1
- package/src/generated/themes/TabInOverflow.css.ts +1 -1
- package/src/i18n/messagebundle.properties +8 -0
- package/src/i18n/messagebundle_en.properties +4 -0
- package/src/themes/Accordion.css +1 -0
- package/src/themes/Button.css +8 -1
- package/src/themes/Contact.css +184 -0
- package/src/themes/ContactItem.css +44 -0
- package/src/themes/MastheadProfileMenu.css +2 -1
- package/src/themes/Modal.css +4 -4
- package/src/themes/Search.css +2 -1
- package/src/themes/TabInOverflow.css +1 -1
- package/src/types/AnalyticsName.ts +6 -0
- package/src/types/ContactItemIcon.ts +7 -0
- package/src/types/EventRibbon.ts +38 -13
- package/src/utils/parseArrayFromString.ts +5 -0
- package/dist/assets/messagebundle_en-CVKgy_9L.js +0 -1
package/src/MastheadItem.ts
CHANGED
|
@@ -11,7 +11,7 @@ import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
|
11
11
|
import { isEscape } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
12
12
|
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
|
|
13
13
|
import {
|
|
14
|
-
OPENS_IN_A_NEW_WINDOW, PROFILE, CART, COUNTRY_SELECTOR, SUPPORT,
|
|
14
|
+
OPENS_IN_A_NEW_WINDOW, PROFILE, CART, COUNTRY_SELECTOR, SUPPORT, SEARCH,
|
|
15
15
|
} from "./generated/i18n/i18n-defaults.js";
|
|
16
16
|
import UDExMastheadMenu from "./MastheadMenu.js";
|
|
17
17
|
import type UDExAvatar from "./Avatar.js";
|
|
@@ -20,6 +20,8 @@ import type UDExMastheadShell from "./MastheadShell.js";
|
|
|
20
20
|
import MastheadItemTemplate from "./generated/templates/MastheadItemTemplate.lit.js";
|
|
21
21
|
import { UDExTarget } from "./types/common.js";
|
|
22
22
|
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
23
|
+
import parseArrayFromString from "./utils/parseArrayFromString.js";
|
|
24
|
+
import AnalyticsName from "./types/AnalyticsName.js";
|
|
23
25
|
|
|
24
26
|
// Styles
|
|
25
27
|
import MastheadItemCss from "./generated/themes/MastheadItem.css.js";
|
|
@@ -31,7 +33,6 @@ export enum UDExMastheadDropdownItemAction {
|
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
export interface IMastheadItem {
|
|
34
|
-
text?: string;
|
|
35
36
|
selected?: boolean;
|
|
36
37
|
icon?: string;
|
|
37
38
|
avatar?: Array<HTMLElement>;
|
|
@@ -58,11 +59,14 @@ export type MenuItem = {
|
|
|
58
59
|
type UDExMastheadItemItemClickEventDetail = {
|
|
59
60
|
originalEvent: PointerEvent,
|
|
60
61
|
item: UDExMastheadItem,
|
|
62
|
+
analyticsName: AnalyticsName,
|
|
63
|
+
sourceNode: HTMLElement,
|
|
61
64
|
}
|
|
62
65
|
|
|
63
66
|
export type UDExMastheadDropdownEventDetail = {
|
|
64
67
|
title: string,
|
|
65
68
|
action: UDExMastheadDropdownItemAction,
|
|
69
|
+
analyticsName: AnalyticsName,
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
/**
|
|
@@ -142,15 +146,6 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
142
146
|
@property({ type: String })
|
|
143
147
|
menuTitle: string = "";
|
|
144
148
|
|
|
145
|
-
/**
|
|
146
|
-
* Defines the text of item.
|
|
147
|
-
*
|
|
148
|
-
* @public
|
|
149
|
-
* @default ""
|
|
150
|
-
*/
|
|
151
|
-
@property({ type: String })
|
|
152
|
-
text: string = "";
|
|
153
|
-
|
|
154
149
|
/**
|
|
155
150
|
* Defines the selected item.
|
|
156
151
|
*
|
|
@@ -264,6 +259,14 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
264
259
|
@property({ type: Boolean })
|
|
265
260
|
_isMobileMode!: boolean;
|
|
266
261
|
|
|
262
|
+
/**
|
|
263
|
+
* Defines the label for analytics
|
|
264
|
+
*
|
|
265
|
+
* @public
|
|
266
|
+
*/
|
|
267
|
+
@property({ type: String })
|
|
268
|
+
label!: string;
|
|
269
|
+
|
|
267
270
|
/**
|
|
268
271
|
* Slot for the dropdown
|
|
269
272
|
*
|
|
@@ -295,6 +298,10 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
295
298
|
}
|
|
296
299
|
}
|
|
297
300
|
|
|
301
|
+
onBeforeRendering(): void {
|
|
302
|
+
this.label = this.eventItemTitle;
|
|
303
|
+
}
|
|
304
|
+
|
|
298
305
|
onAfterRendering(): void {
|
|
299
306
|
this._profileAvatar = this.profileAvatar;
|
|
300
307
|
this._mastheadShell = this.mastheadShell;
|
|
@@ -381,17 +388,19 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
381
388
|
}
|
|
382
389
|
|
|
383
390
|
fireDropdownCloseEvent(title: string, action: UDExMastheadDropdownItemAction): void {
|
|
384
|
-
this.fireDecoratorEvent("dropdown-closed", { title, action });
|
|
391
|
+
this.fireDecoratorEvent("dropdown-closed", { title, action, analyticsName: AnalyticsName.Header });
|
|
385
392
|
}
|
|
386
393
|
|
|
387
394
|
fireDropdownOpenEvent(title: string, action: UDExMastheadDropdownItemAction): void {
|
|
388
|
-
this.fireDecoratorEvent("dropdown-opened", { title, action });
|
|
395
|
+
this.fireDecoratorEvent("dropdown-opened", { title, action, analyticsName: AnalyticsName.Header });
|
|
389
396
|
}
|
|
390
397
|
|
|
391
398
|
fireItemClickEvent(e: PointerEvent): void {
|
|
392
399
|
this.fireDecoratorEvent("item-click", {
|
|
393
400
|
item: this,
|
|
394
401
|
originalEvent: e,
|
|
402
|
+
analyticsName: AnalyticsName.Header,
|
|
403
|
+
sourceNode: e.currentTarget as HTMLElement,
|
|
395
404
|
});
|
|
396
405
|
}
|
|
397
406
|
|
|
@@ -442,19 +451,15 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
442
451
|
|
|
443
452
|
closeDropdown(): void {
|
|
444
453
|
this.selected = false;
|
|
445
|
-
this.fireDropdownCloseEvent(this.eventItemTitle, UDExMastheadDropdownItemAction.Close);
|
|
454
|
+
this.fireDropdownCloseEvent(this.accessibleName || this.eventItemTitle, UDExMastheadDropdownItemAction.Close);
|
|
446
455
|
}
|
|
447
456
|
|
|
448
457
|
getDomElement(selector: string): HTMLElement | undefined | null {
|
|
449
458
|
return this.shadowRoot?.querySelector(`${selector}`);
|
|
450
459
|
}
|
|
451
460
|
|
|
452
|
-
parseArrayFromString<T>(string: string): T[] {
|
|
453
|
-
return string ? JSON.parse(string) as T[] : [];
|
|
454
|
-
}
|
|
455
|
-
|
|
456
461
|
getSubItems(): Array<MenuItem> {
|
|
457
|
-
return
|
|
462
|
+
return parseArrayFromString(this.subItems);
|
|
458
463
|
}
|
|
459
464
|
|
|
460
465
|
get mastheadShell(): UDExMastheadShell {
|
|
@@ -494,22 +499,18 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
494
499
|
return this.selected ? " udex-masthead-item__button--active" : "";
|
|
495
500
|
}
|
|
496
501
|
|
|
497
|
-
get ariaDescribedBy(): string {
|
|
502
|
+
get ariaDescribedBy(): string | undefined {
|
|
498
503
|
const labels = [];
|
|
499
504
|
|
|
500
|
-
if (this.text) {
|
|
501
|
-
labels.push(`${this.__id}-text`);
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
if (this.icon) {
|
|
505
|
-
labels.push(`${this.__id}-icon`);
|
|
506
|
-
}
|
|
507
|
-
|
|
508
505
|
if (this.isTargetBlank) {
|
|
509
506
|
labels.push(`new-win-desc`);
|
|
510
507
|
}
|
|
511
508
|
|
|
512
|
-
|
|
509
|
+
if (this.imageAlt) {
|
|
510
|
+
labels.push(`image-desc`);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
return labels.length ? labels.join(" ").trim() : undefined;
|
|
513
514
|
}
|
|
514
515
|
|
|
515
516
|
get isDropdownOpened(): boolean {
|
|
@@ -540,6 +541,10 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
540
541
|
return this.getAttribute("slot") === "cart";
|
|
541
542
|
}
|
|
542
543
|
|
|
544
|
+
get isSearchBtn(): boolean {
|
|
545
|
+
return this.icon === "search";
|
|
546
|
+
}
|
|
547
|
+
|
|
543
548
|
get isSupportBtn(): boolean {
|
|
544
549
|
return this.getAttribute("slot") === "support";
|
|
545
550
|
}
|
|
@@ -561,22 +566,18 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
561
566
|
}
|
|
562
567
|
|
|
563
568
|
get eventItemTitle(): string {
|
|
564
|
-
if (this.
|
|
565
|
-
return
|
|
569
|
+
if (this.isSearchBtn) {
|
|
570
|
+
return UDExMastheadItem.i18nBundle.getText(SEARCH);
|
|
566
571
|
}
|
|
567
|
-
|
|
568
572
|
if (this.isCartBtn) {
|
|
569
573
|
return UDExMastheadItem.i18nBundle.getText(CART);
|
|
570
574
|
}
|
|
571
|
-
|
|
572
575
|
if (this.isProfileBtn) {
|
|
573
576
|
return UDExMastheadItem.i18nBundle.getText(PROFILE);
|
|
574
577
|
}
|
|
575
|
-
|
|
576
578
|
if (this.isCountrySelectorBtn) {
|
|
577
579
|
return UDExMastheadItem.i18nBundle.getText(COUNTRY_SELECTOR);
|
|
578
580
|
}
|
|
579
|
-
|
|
580
581
|
if (this.isSupportBtn) {
|
|
581
582
|
return UDExMastheadItem.i18nBundle.getText(SUPPORT);
|
|
582
583
|
}
|
package/src/MastheadMenu.hbs
CHANGED
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
{{#*inline "header"}}
|
|
23
23
|
<div class="udex-masthead-menu__header">
|
|
24
24
|
<udex-masthead-menu-item
|
|
25
|
+
part="menu-item"
|
|
26
|
+
exportparts="menu-item"
|
|
25
27
|
id="category-{{categoryId}}"
|
|
26
28
|
@click="{{../../handleMenuItemClick}}"
|
|
27
29
|
url="{{this.url}}"
|
|
@@ -42,11 +44,14 @@
|
|
|
42
44
|
<li>
|
|
43
45
|
{{#if this.url}}
|
|
44
46
|
<udex-masthead-menu-item
|
|
47
|
+
part="menu-item"
|
|
48
|
+
exportparts="menu-item"
|
|
45
49
|
@click="{{../../../handleMenuItemClick}}"
|
|
46
50
|
badge="{{this.badge}}"
|
|
47
51
|
?external-link="{{this.externalLink}}"
|
|
48
52
|
url="{{this.url}}"
|
|
49
|
-
label="{{this.title}}"
|
|
53
|
+
label="{{this.title}}"
|
|
54
|
+
exportparts="badge">
|
|
50
55
|
</udex-masthead-menu-item>
|
|
51
56
|
{{else}}
|
|
52
57
|
<udex-divider class="udex-masthead-menu__item-divider"></udex-divider>
|
package/src/MastheadMenu.ts
CHANGED
|
@@ -11,6 +11,8 @@ import UDExBadge from "./Badge.js";
|
|
|
11
11
|
import UDExMastheadMenuItem, { UDExItemType } from "./MastheadMenuItem.js";
|
|
12
12
|
import UDExDivider from "./Divider.js";
|
|
13
13
|
import MastheadMenuTemplate from "./generated/templates/MastheadMenuTemplate.lit.js";
|
|
14
|
+
import parseArrayFromString from "./utils/parseArrayFromString.js";
|
|
15
|
+
import AnalyticsName from "./types/AnalyticsName.js";
|
|
14
16
|
|
|
15
17
|
// Styles
|
|
16
18
|
import MastheadMenuCss from "./generated/themes/MastheadMenu.css.js";
|
|
@@ -38,6 +40,8 @@ type UDExMastheadMenuMenuItemClickEventDetail = {
|
|
|
38
40
|
category?: string,
|
|
39
41
|
originalEvent: PointerEvent,
|
|
40
42
|
item: UDExMastheadMenuItem,
|
|
43
|
+
analyticsName: AnalyticsName,
|
|
44
|
+
sourceNode: HTMLElement,
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
/**
|
|
@@ -130,6 +134,8 @@ class UDExMastheadMenu extends UI5Element {
|
|
|
130
134
|
if (url?.length) {
|
|
131
135
|
const list = item.closest(".udex-masthead-menu__list") as HTMLElement;
|
|
132
136
|
this.fireDecoratorEvent("menu-item-click", {
|
|
137
|
+
sourceNode: item.shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
|
|
138
|
+
analyticsName: AnalyticsName.Header,
|
|
133
139
|
item,
|
|
134
140
|
originalEvent: e,
|
|
135
141
|
...(type !== UDExItemType.Heading && { category: list?.getAttribute("category") || "" }),
|
|
@@ -154,10 +160,6 @@ class UDExMastheadMenu extends UI5Element {
|
|
|
154
160
|
return this.links.indexOf(item);
|
|
155
161
|
}
|
|
156
162
|
|
|
157
|
-
parseArrayFromString<T>(string: string): T[] {
|
|
158
|
-
return string ? JSON.parse(string) as T[] : [];
|
|
159
|
-
}
|
|
160
|
-
|
|
161
163
|
get links(): Array<UDExMastheadMenuItem> {
|
|
162
164
|
const menuItems: Array<UDExMastheadMenuItem> = Array.from(this.shadowRoot!.querySelectorAll("[udex-masthead-menu-item]"));
|
|
163
165
|
return menuItems.filter(({ url }) => url && url.length > 0);
|
|
@@ -165,7 +167,7 @@ class UDExMastheadMenu extends UI5Element {
|
|
|
165
167
|
|
|
166
168
|
get itemsList(): Array<MenuItem> {
|
|
167
169
|
let id = 1;
|
|
168
|
-
const parsedItems: Array<MenuItem> =
|
|
170
|
+
const parsedItems: Array<MenuItem> = parseArrayFromString(this.subItems);
|
|
169
171
|
return parsedItems.map((mainItem: MenuItem) => {
|
|
170
172
|
mainItem.subMenuLinkItems = mainItem.subMenuLinkItems.map((category: SubMenuLinkItem) => {
|
|
171
173
|
category.categoryId = `${id++}`;
|
package/src/MastheadMenuItem.hbs
CHANGED
package/src/MastheadMenuItem.ts
CHANGED
|
@@ -225,8 +225,8 @@ class UDExMastheadMenuItem extends UI5Element {
|
|
|
225
225
|
return this.externalLink ? "new-win-desc" : null;
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
get accessibleRoleText(): string
|
|
229
|
-
return this.accessibleRole ? this.accessibleRole :
|
|
228
|
+
get accessibleRoleText(): string {
|
|
229
|
+
return this.accessibleRole ? this.accessibleRole : "menuitem";
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
get partAttr(): string {
|
|
@@ -10,9 +10,10 @@
|
|
|
10
10
|
{{>nav-items}}
|
|
11
11
|
{{/if}}
|
|
12
12
|
{{#if _showCategories}}
|
|
13
|
-
<li class="udex-masthead-mobile-menu__list-item" role="
|
|
13
|
+
<li class="udex-masthead-mobile-menu__list-item" role="none">
|
|
14
14
|
{{#if _hideExploreSapBtn}}
|
|
15
15
|
<udex-masthead-menu-item
|
|
16
|
+
part="menu-item"
|
|
16
17
|
class="udex-masthead-mobile-menu__back-item"
|
|
17
18
|
@click="{{handleExploreBackToMenuItems}}"
|
|
18
19
|
label="{{_clickedItem.innerText}}"
|
|
@@ -24,6 +25,7 @@
|
|
|
24
25
|
{{else}}
|
|
25
26
|
{{#if isNotMultipleMode}}
|
|
26
27
|
<udex-masthead-menu-item
|
|
28
|
+
part="menu-item"
|
|
27
29
|
class="udex-masthead-mobile-menu__heading"
|
|
28
30
|
label="{{_clickedItem.innerText}}"
|
|
29
31
|
type="Heading"
|
|
@@ -31,9 +33,11 @@
|
|
|
31
33
|
</udex-masthead-menu-item>
|
|
32
34
|
{{else}}
|
|
33
35
|
<udex-masthead-menu-item
|
|
36
|
+
part="menu-item"
|
|
34
37
|
class="udex-masthead-mobile-menu__back-item"
|
|
35
38
|
@click="{{handleBackToMenuItems}}"
|
|
36
39
|
label="{{_clickedItem.innerText}}"
|
|
40
|
+
aria-has-popup="true"
|
|
37
41
|
type="Button"
|
|
38
42
|
has-border
|
|
39
43
|
icon-start
|
|
@@ -45,12 +49,14 @@
|
|
|
45
49
|
{{>categories}}
|
|
46
50
|
{{/if}}
|
|
47
51
|
{{#if _showCategoryItems}}
|
|
48
|
-
<li class="udex-masthead-mobile-menu__list-item" role="
|
|
52
|
+
<li class="udex-masthead-mobile-menu__list-item" role="none">
|
|
49
53
|
<udex-masthead-menu-item
|
|
54
|
+
part="menu-item"
|
|
50
55
|
class="udex-masthead-mobile-menu__back-item"
|
|
51
56
|
@click="{{handleBackToCategories}}"
|
|
52
57
|
label="{{_category.category}}"
|
|
53
58
|
type="Button"
|
|
59
|
+
aria-has-popup="true"
|
|
54
60
|
has-border
|
|
55
61
|
icon-start
|
|
56
62
|
is-back-to-categories>
|
|
@@ -62,11 +68,13 @@
|
|
|
62
68
|
</div>
|
|
63
69
|
{{#if showExploreBtn}}
|
|
64
70
|
<udex-masthead-menu-item
|
|
71
|
+
part="menu-item"
|
|
65
72
|
class="udex-masthead-mobile-menu__explore-btn"
|
|
66
73
|
id="{{exploreItem._id}}"
|
|
67
74
|
@click="{{handleExploreSapClick}}"
|
|
68
75
|
@keydown="{{handleLeftRightKeys}}"
|
|
69
|
-
accessible-role="button"
|
|
76
|
+
accessible-role-text="button"
|
|
77
|
+
aria-has-popup="true"
|
|
70
78
|
type="Button"
|
|
71
79
|
first-level
|
|
72
80
|
icon-end
|
|
@@ -78,9 +86,10 @@
|
|
|
78
86
|
|
|
79
87
|
{{#*inline "nav-items"}}
|
|
80
88
|
{{#each items}}
|
|
81
|
-
<li class="udex-masthead-mobile-menu__list-item" role="
|
|
89
|
+
<li class="udex-masthead-mobile-menu__list-item" role="none">
|
|
82
90
|
{{#if this.subItems}}
|
|
83
91
|
<udex-masthead-menu-item
|
|
92
|
+
part="menu-item"
|
|
84
93
|
@click="{{../handleMenuItemClick}}"
|
|
85
94
|
label="{{this.innerText}}"
|
|
86
95
|
aria-has-popup="true"
|
|
@@ -92,6 +101,7 @@
|
|
|
92
101
|
</udex-masthead-menu-item>
|
|
93
102
|
{{else}}
|
|
94
103
|
<udex-masthead-menu-item
|
|
104
|
+
part="menu-item"
|
|
95
105
|
@click="{{../handleMobileItemEvent}}"
|
|
96
106
|
url="{{this.href}}"
|
|
97
107
|
label="{{this.innerText}}"
|
|
@@ -105,8 +115,9 @@
|
|
|
105
115
|
|
|
106
116
|
{{#*inline "categories"}}
|
|
107
117
|
{{#if _clickedItem.href}}
|
|
108
|
-
<li class="udex-masthead-mobile-menu__list-item" role="
|
|
118
|
+
<li class="udex-masthead-mobile-menu__list-item" role="none">
|
|
109
119
|
<udex-masthead-menu-item
|
|
120
|
+
part="menu-item"
|
|
110
121
|
url="{{_clickedItem.href}}"
|
|
111
122
|
label="{{overviewLinkText}}"
|
|
112
123
|
@click="{{handleMobileItemEvent}}"
|
|
@@ -116,8 +127,9 @@
|
|
|
116
127
|
{{/if}}
|
|
117
128
|
{{#each _categories}}
|
|
118
129
|
{{#if this.category}}
|
|
119
|
-
<li class="udex-masthead-mobile-menu__list-item" role="
|
|
130
|
+
<li class="udex-masthead-mobile-menu__list-item" role="none">
|
|
120
131
|
<udex-masthead-menu-item
|
|
132
|
+
part="menu-item"
|
|
121
133
|
@click="{{../handleMenuCategoryClick}}"
|
|
122
134
|
url="{{this.url}}"
|
|
123
135
|
id="{{@index}}"
|
|
@@ -131,8 +143,9 @@
|
|
|
131
143
|
</li>
|
|
132
144
|
{{else}}
|
|
133
145
|
{{#each this.items}}
|
|
134
|
-
<li class="udex-masthead-mobile-menu__list-item" role="
|
|
146
|
+
<li class="udex-masthead-mobile-menu__list-item" role="none">
|
|
135
147
|
<udex-masthead-menu-item
|
|
148
|
+
part="menu-item"
|
|
136
149
|
@click="{{../handleMobileItemEvent}}"
|
|
137
150
|
url="{{this.url}}"
|
|
138
151
|
label="{{this.title}}"
|
|
@@ -146,8 +159,9 @@
|
|
|
146
159
|
|
|
147
160
|
{{#*inline "category-items"}}
|
|
148
161
|
{{#if _category.url}}
|
|
149
|
-
<li class="udex-masthead-mobile-menu__list-item" role="
|
|
162
|
+
<li class="udex-masthead-mobile-menu__list-item" role="none">
|
|
150
163
|
<udex-masthead-menu-item
|
|
164
|
+
part="menu-item"
|
|
151
165
|
@click="{{../handleMobileCategoryItemEvent}}"
|
|
152
166
|
url="{{this._category.url}}"
|
|
153
167
|
label="{{overviewLinkText}}"
|
|
@@ -157,8 +171,9 @@
|
|
|
157
171
|
{{/if}}
|
|
158
172
|
{{#each _category.items}}
|
|
159
173
|
{{#if this.url}}
|
|
160
|
-
<li class="udex-masthead-mobile-menu__list-item" role="
|
|
174
|
+
<li class="udex-masthead-mobile-menu__list-item" role="none">
|
|
161
175
|
<udex-masthead-menu-item
|
|
176
|
+
part="menu-item"
|
|
162
177
|
@click="{{../handleMobileCategoryItemEvent}}"
|
|
163
178
|
label="{{this.title}}"
|
|
164
179
|
url="{{this.url}}"
|
|
@@ -13,7 +13,7 @@ import type { MenuItem, SubMenuLinkItem } from "./MastheadItem.js";
|
|
|
13
13
|
import type UDExMastheadItem from "./MastheadItem.js";
|
|
14
14
|
import UDExMastheadMenuItem, { UDExItemType } from "./MastheadMenuItem.js";
|
|
15
15
|
import { OVERVIEW } from "./generated/i18n/i18n-defaults.js";
|
|
16
|
-
|
|
16
|
+
import AnalyticsName from "./types/AnalyticsName.js";
|
|
17
17
|
import MastheadMobileMenuTemplate from "./generated/templates/MastheadMobileMenuTemplate.lit.js";
|
|
18
18
|
|
|
19
19
|
// Styles
|
|
@@ -24,10 +24,14 @@ type UDExMastheadMobileMenuItemClickEventDetail = {
|
|
|
24
24
|
item: UDExMastheadMenuItem,
|
|
25
25
|
category?: string,
|
|
26
26
|
isMobile: boolean,
|
|
27
|
+
analyticsName: AnalyticsName,
|
|
28
|
+
sourceNode: HTMLElement,
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
type UDExMastheadMobileMenuExploreClickEventDetail = {
|
|
30
32
|
originalEvent: PointerEvent | KeyboardEvent,
|
|
33
|
+
analyticsName: AnalyticsName,
|
|
34
|
+
sourceNode: HTMLElement,
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
/**
|
|
@@ -151,7 +155,7 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
151
155
|
e.preventDefault();
|
|
152
156
|
this.openExploreSapMenu(e);
|
|
153
157
|
this.setFocusItemByIndex(0);
|
|
154
|
-
this.
|
|
158
|
+
this.fireExploreSapMobileButton(e);
|
|
155
159
|
}
|
|
156
160
|
|
|
157
161
|
handleBackToMenuItems(e: PointerEvent) {
|
|
@@ -411,14 +415,26 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
411
415
|
}
|
|
412
416
|
|
|
413
417
|
fireMobileItemEvent(e: PointerEvent | KeyboardEvent, category?: string) {
|
|
418
|
+
const item = e.target as UDExMastheadMenuItem;
|
|
419
|
+
|
|
414
420
|
this.fireDecoratorEvent("item-click", {
|
|
415
421
|
isMobile: true,
|
|
416
|
-
item
|
|
422
|
+
item,
|
|
417
423
|
originalEvent: e,
|
|
424
|
+
analyticsName: AnalyticsName.Header,
|
|
425
|
+
sourceNode: item.shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
|
|
418
426
|
...(category && { category }),
|
|
419
427
|
});
|
|
420
428
|
}
|
|
421
429
|
|
|
430
|
+
fireExploreSapMobileButton(e: PointerEvent | KeyboardEvent) {
|
|
431
|
+
this.fireDecoratorEvent("explorer-menu-click", {
|
|
432
|
+
originalEvent: e,
|
|
433
|
+
analyticsName: AnalyticsName.Header,
|
|
434
|
+
sourceNode: (e.target as HTMLElement).shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
|
|
422
438
|
setFocusItemByIndex(index: number) {
|
|
423
439
|
this._shouldFocusItemByIndex = true;
|
|
424
440
|
this._focusedItemIndex = index;
|
|
@@ -10,6 +10,8 @@ import { LOGOUT } from "./generated/i18n/i18n-defaults.js";
|
|
|
10
10
|
import UDExMastheadMenu from "./MastheadMenu.js";
|
|
11
11
|
import MastheadProfileMenuTemplate from "./generated/templates/MastheadProfileMenuTemplate.lit.js";
|
|
12
12
|
import type UDExMastheadMenuItem from "./MastheadMenuItem.js";
|
|
13
|
+
import parseArrayFromString from "./utils/parseArrayFromString.js";
|
|
14
|
+
import AnalyticsName from "./types/AnalyticsName.js";
|
|
13
15
|
|
|
14
16
|
// Styles
|
|
15
17
|
import MastheadProfileMenuCss from "./generated/themes/MastheadProfileMenu.css.js";
|
|
@@ -22,13 +24,11 @@ interface UserData {
|
|
|
22
24
|
avatarInitials?: string
|
|
23
25
|
}
|
|
24
26
|
|
|
25
|
-
type UDExMastheadProfileMenuLogoutClickEventDetail = {
|
|
26
|
-
originalEvent: PointerEvent,
|
|
27
|
-
}
|
|
28
|
-
|
|
29
27
|
type UDExMastheadProfileMenuItemClickEventDetail = {
|
|
30
28
|
item: UDExMastheadMenuItem,
|
|
31
29
|
originalEvent: PointerEvent,
|
|
30
|
+
analyticsName: AnalyticsName,
|
|
31
|
+
sourceNode: HTMLElement,
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
@@ -71,7 +71,7 @@ type UDExMastheadProfileMenuItemClickEventDetail = {
|
|
|
71
71
|
|
|
72
72
|
class UDExMastheadProfileMenu extends UI5Element {
|
|
73
73
|
eventDetails!: {
|
|
74
|
-
"logout":
|
|
74
|
+
"logout": UDExMastheadProfileMenuItemClickEventDetail,
|
|
75
75
|
"profile-item-click": UDExMastheadProfileMenuItemClickEventDetail
|
|
76
76
|
};
|
|
77
77
|
/**
|
|
@@ -121,8 +121,13 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
121
121
|
static i18nBundle: I18nBundle;
|
|
122
122
|
|
|
123
123
|
handleUserLogoutItemClick(e: PointerEvent): void {
|
|
124
|
+
const item = e.target as UDExMastheadMenuItem;
|
|
125
|
+
|
|
124
126
|
this.fireDecoratorEvent("logout", {
|
|
127
|
+
item,
|
|
128
|
+
sourceNode: item.shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
|
|
125
129
|
originalEvent: e,
|
|
130
|
+
analyticsName: AnalyticsName.Header,
|
|
126
131
|
});
|
|
127
132
|
}
|
|
128
133
|
|
|
@@ -132,13 +137,11 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
132
137
|
this.fireDecoratorEvent("profile-item-click", {
|
|
133
138
|
item,
|
|
134
139
|
originalEvent,
|
|
140
|
+
analyticsName: AnalyticsName.Header,
|
|
141
|
+
sourceNode: item.shadowRoot.querySelector(".udex-masthead-menu-item") as HTMLElement,
|
|
135
142
|
});
|
|
136
143
|
}
|
|
137
144
|
|
|
138
|
-
parseArrayFromString<T>(string: string): T[] {
|
|
139
|
-
return string ? JSON.parse(string) as T[] : [];
|
|
140
|
-
}
|
|
141
|
-
|
|
142
145
|
get linksList(): string {
|
|
143
146
|
return this.links ? JSON.stringify([{
|
|
144
147
|
subMenuLinkItems: JSON.parse(this.links),
|
|
@@ -146,7 +149,7 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
146
149
|
}
|
|
147
150
|
|
|
148
151
|
get userData(): UserData {
|
|
149
|
-
return
|
|
152
|
+
return parseArrayFromString(this.loggedInUser) as UserData;
|
|
150
153
|
}
|
|
151
154
|
|
|
152
155
|
get messageAvailable(): boolean {
|
package/src/MastheadShell.hbs
CHANGED
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
class="udex-masthead-shell__close-search-btn"
|
|
40
40
|
size="Small"
|
|
41
41
|
icon="decline"
|
|
42
|
+
part="search-close-button"
|
|
42
43
|
tooltip="{{closeButtonAccessibleName}}"
|
|
43
44
|
accessible-name="{{closeButtonAccessibleName}}"
|
|
44
45
|
@click="{{handleCloseSearch}}">
|
|
@@ -71,6 +72,7 @@
|
|
|
71
72
|
<udex-masthead-item
|
|
72
73
|
class="udex-masthead-shell__search-btn"
|
|
73
74
|
icon="search"
|
|
75
|
+
part="search-button"
|
|
74
76
|
@click="{{handleSearchClick}}"
|
|
75
77
|
accessible-name="search">
|
|
76
78
|
</udex-masthead-item>
|