{"version":3,"file":"static/js/395a0f70cb52f605ef8c.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/themes/dobbies/definition-extensions/navigation-menu.ext.props.autogenerated.ts?e84a","webpack://Dobbies.Commerce/./src/themes/dobbies/views/navigation-menu.view.tsx?87a3","webpack://Dobbies.Commerce/./lib/navigation-menu/module-registration.js?7039","webpack://Dobbies.Commerce/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://Dobbies.Commerce/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://Dobbies.Commerce/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://Dobbies.Commerce/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://Dobbies.Commerce/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://Dobbies.Commerce/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://Dobbies.Commerce/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://Dobbies.Commerce/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://Dobbies.Commerce/external var \"React\"?0d3b","webpack://Dobbies.Commerce/external var \"ReactDOM\"?853b"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * INavigationMenu contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport const enum navigationMenuSource {\r\n all = 'all',\r\n retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly'\r\n}\r\n\r\nexport interface INavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n enableMultilevelMenu?: boolean;\r\n enabletopMenu?: boolean;\r\n menuLevelSupport?: number;\r\n rootMenuNavigation?: string;\r\n displayCategoryImage?: boolean;\r\n displayPromotionalImage?: boolean;\r\n categoryPromotionalContent?: ICategoryPromotionalContentData[];\r\n categoryImageSettings?: Msdyn365.IImageSettings;\r\n className?: string;\r\n clientRender?: boolean;\r\n cmsNavItemsNew?: ICmsNavItemsNewData[];\r\n hideMenuItemPrefix?: string;\r\n menuImagesSchedule?: IMenuImagesScheduleData[];\r\n removeExtraSubMenusOnMobile?: string[];\r\n subMenuStaticMenus?: ISubMenuStaticMenusData[];\r\n menuHeading?: string;\r\n dobbiesClubNavItemText?: string;\r\n clubFreeTierText?: string;\r\n clubPlusTierText?: string;\r\n showOptionAll?: boolean;\r\n imageSettings?: IImageSettingsData[];\r\n categoryImageLinks?: ICategoryImageLinksData[];\r\n}\r\n\r\nexport interface INavigationMenuResources {\r\n menuAriaLabel: string;\r\n backButtonAriaLabel: string;\r\n allCategoryMenuText: string;\r\n}\r\n\r\nexport interface ICmsNavItemsData {\r\n linkText?: string;\r\n linkUrl?: Msdyn365.ILinkData;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface ICategoryPromotionalContentData {\r\n categoryName?: string;\r\n image: Msdyn365.IImageData;\r\n text?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface ICmsNavItemsNewData {\r\n linkText?: string;\r\n linkUrl?: Msdyn365.ILinkData;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface IMenuImagesScheduleData {\r\n menuName: string;\r\n menuImageName: string;\r\n imageShowStartDate: string;\r\n imageShowEndDate: string;\r\n imageUrl?: string;\r\n}\r\n\r\nexport interface ISubMenuStaticMenusData {\r\n linkText?: string;\r\n linkUrl?: Msdyn365.ILinkData;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface IImageSettingsData {\r\n width?: number;\r\n height?: number;\r\n}\r\n\r\nexport interface ICategoryImageLinksData {\r\n categoryName?: string;\r\n categoryImageLink?: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface INavigationMenuProps extends Msdyn365.IModule {\r\n resources: INavigationMenuResources;\r\n config: INavigationMenuConfig;\r\n slots: {\r\n search: React.ReactNode[];\r\n };\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { ICmsNavItemsData, IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport {\r\n Module,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n ITelemetryContent,\r\n Node,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n\r\n/* VSI Customization - START */\r\nimport { generateImageUrl, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { getUrlSync, IActionContext, IImageData, Image, Text } from '@msdyn365-commerce/core';\r\nimport { LoyaltyCard, LoyaltyGroup, TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n INavigationMenuProps,\r\n ISubMenusData,\r\n navigationMenuSource\r\n} from '../definition-extensions/navigation-menu.ext.props.autogenerated';\r\nimport { INavigationMenuData } from './navigation-menu.data';\r\n/* VSI Customization - END */\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n scrollClass: boolean;\r\n mobileViewLabelText?: string;\r\n /* VSI Customization - START\r\n when mouse moves on any submneu item, currentcategory shows its option at ID if at level 2 and previous category ID (which is actually its parent ID) if at level 3 */\r\n currentCategory?: number | undefined;\r\n // checks whether back button is clicked or not on mobile menu\r\n isBackBtnClicked?: boolean;\r\n categoryName?: string;\r\n categoryImage?: string | null;\r\n categoryImageLink?: string;\r\n dobbiesClubLink?: string; // Check if user is club or club plus member, clicking on Dobbies club will navigate to loyalty page otherwise to dobbies marketing or as configured in CMS page\r\n /* VSI Customization - END */\r\n navigationSearch: boolean;\r\n shouldShowHamburger?: boolean;\r\n}\r\n\r\nconst NAMES_TO_HIDE = ['Edits', 'CS-'];\r\n\r\nconst shouldHideMenuItem = (menuName: string | undefined): boolean => {\r\n if (menuName === undefined) return true;\r\n return NAMES_TO_HIDE.some(name => menuName.startsWith(name));\r\n};\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent<\r\n INavigationMenuViewProps & INavigationMenuProps,\r\n INavigationState\r\n> {\r\n private static isBackTrack: boolean = false;\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n /* VSI Customization - START - 13/11/20 */\r\n // Tells current active level on mobile\r\n private currentLevelMobile: number = 0;\r\n private menuItemData: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n /* VSI Customization - END */\r\n private menuNode: React.RefObject;\r\n private telemetryContent: ITelemetryContent;\r\n private payLoad: IPayLoad;\r\n //private documentRef: Document | undefined;\r\n\r\n private mouseDownRefs: ((e: any) => void)[] = [];\r\n private navRef: React.RefObject;\r\n\r\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\r\n let nameTranslation: TextValueTranslation | undefined;\r\n if (locale && nameTranslations && nameTranslations.length > 0) {\r\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\r\n }\r\n\r\n return nameTranslation && nameTranslation.Text;\r\n }\r\n\r\n constructor(props: INavigationMenuViewProps & INavigationMenuProps, state: INavigationState) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.navRef = React.createRef();\r\n this.menuItemData = this._mapData();\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {\r\n navigationSearch: true,\r\n activeMenu: undefined,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n scrollClass: false,\r\n isBackBtnClicked: false,\r\n shouldShowHamburger: this.isNavOutOfBounds() || this.props.isMobileView\r\n };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public componentDidMount(): void {\r\n //this.documentRef = document;\r\n\r\n if (document.body) {\r\n this.mouseDownRefs.push(this._handleClickOutside);\r\n this.mouseDownRefs.push(this._handleMouseHover(undefined));\r\n this.mouseDownRefs.push(this._handleLinkClick(undefined));\r\n this.mouseDownRefs.forEach(ref => document.body.addEventListener('mousedown', ref));\r\n }\r\n window.addEventListener('scroll', this._mainMenuScroll);\r\n\r\n // Get Customer Loyalty card details if he/she is authenticated and state is not set yet\r\n this.props.data.loyaltyCard.then(loyaltyCard => {\r\n const loyaltyGroup = loyaltyCard && loyaltyCard.LoyaltyGroups && loyaltyCard.LoyaltyGroups[0];\r\n const tierId = loyaltyGroup && this._getTierId(loyaltyGroup);\r\n const redirectionLink = loyaltyCard && tierId && this._getRedirectionLink(loyaltyCard, tierId);\r\n this.setState({ dobbiesClubLink: redirectionLink });\r\n });\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n this.mouseDownRefs.forEach(ref => document.body.removeEventListener('mousedown', ref));\r\n window.addEventListener('scroll', this._mainMenuScroll);\r\n }\r\n\r\n /* VSI CUSTOMIZATION - START - 18/09/2023 */\r\n private _constructSecondLevelStaticMenus(id: number, linkText: string): IMenuItemData[] {\r\n const staticMenuItems: IMenuItemData[] = [];\r\n /* VSI Customization - START - 8/31/22 /** adding another menu */\r\n if (this.isCMS && this.props.config.subMenuStaticMenus && this.props.config.subMenuStaticMenus.length > 0) {\r\n this.props.config.subMenuStaticMenus.map((item: ICmsNavItemsData, idx: number) => {\r\n if (linkText === item.linkText) {\r\n item.subMenus?.map((submenu) => {\r\n staticMenuItems.push(this._constructMenuItemData(undefined, submenu, false, idx + 1));\r\n });\r\n }\r\n });\r\n }\r\n return staticMenuItems; \r\n };\r\n private _getUrlFromConfigOfNavItem(linkText: string): string {\r\n var urlFromConfig: string = \"\";\r\n if (this.isCMS && this.props.config.subMenuStaticMenus && this.props.config.subMenuStaticMenus.length > 0) {\r\n this.props.config.subMenuStaticMenus.map((item: ICmsNavItemsData, idx: number) => {\r\n if (linkText === item.linkText) {\r\n urlFromConfig = item.linkUrl?.destinationUrl ? item.linkUrl?.destinationUrl : \"\";\r\n }\r\n });\r\n }\r\n return urlFromConfig;\r\n };\r\n /* VSI CUSTOMIZATION - END CUSTOMIZATION - 18/09/2023 */\r\n private _getCategoryScheduledImageUrl = (): string | undefined => {\r\n let scheduledImageUrl: string | undefined = '';\r\n if(this.state.categoryName && this.props.config.menuImagesSchedule) {\r\n for(const imageSchedule of this.props.config.menuImagesSchedule) {\r\n if(imageSchedule.menuName === this.state.categoryName) {\r\n try {\r\n const now = new Date();\r\n const dateTimeSplittedStartDate = imageSchedule.imageShowStartDate.split(' ');\r\n const startDateMonth = dateTimeSplittedStartDate[0].split('-')[1];\r\n const startDateDay = dateTimeSplittedStartDate[0].split('-')[0];\r\n const startDateYear = dateTimeSplittedStartDate[0].split('-')[2];\r\n const startDateHour = dateTimeSplittedStartDate[1].split(':')[0];\r\n const startDateMinutes = dateTimeSplittedStartDate[1].split(':')[1];\r\n const imageShowingStartDate = new Date(`${startDateMonth}-${startDateDay}-${startDateYear} ${startDateHour}:${startDateMinutes}:00`);\r\n const dateTimeSplittedEndDate = imageSchedule.imageShowEndDate.split(' ');\r\n const endDateMonth = dateTimeSplittedEndDate[0].split('-')[1];\r\n const endDateDay = dateTimeSplittedEndDate[0].split('-')[0];\r\n const endDateYear = dateTimeSplittedEndDate[0].split('-')[2];\r\n const endDateHour = dateTimeSplittedEndDate[1].split(':')[0];\r\n const endDateMinutes = dateTimeSplittedEndDate[1].split(':')[1];\r\n const imageShowEndDate = new Date(`${endDateMonth}-${endDateDay}-${endDateYear} ${endDateHour}:${endDateMinutes}:00`);\r\n if(now.getTime() <= imageShowEndDate.getTime() && now.getTime() >= imageShowingStartDate.getTime()) {\r\n scheduledImageUrl = imageSchedule.imageUrl;\r\n return scheduledImageUrl; \r\n }\r\n } catch(ex) {\r\n return undefined; \r\n }\r\n }\r\n }\r\n }\r\n return scheduledImageUrl;\r\n };\r\n\r\n private isNavOutOfBounds(): boolean {\r\n if(MsDyn365.isBrowser && window) {\r\n const parentDiv = document.getElementsByClassName('ms-nav__list');\r\n \r\n if (parentDiv && parentDiv.length > 0) {\r\n const offsetWidth = parentDiv[0]['offsetWidth'] ? parseFloat(parentDiv[0]['offsetWidth']) : 0;\r\n const offsetHeight = parentDiv[0]['offsetWidth'] ? parseFloat(parentDiv[0]['offsetHeight']) : 0;\r\n if((window && window.innerWidth <= offsetWidth) || offsetHeight > 49) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n\r\n private setNavRoles() {\r\n this.props.Navigation.role = 'listbox';\r\n this.props.MenuList.role = 'listbox';\r\n this.props.Link.role = 'option'\r\n this.props.Navigation.className = this.props.Navigation.className.replace('desktop', 'mobile');\r\n this.props.Button.role = 'option';\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n if(this.state.shouldShowHamburger) {\r\n if(MsDyn365.isBrowser && window) {\r\n const body = document.getElementsByTagName(\"body\")[0];\r\n if (body && !body.classList.contains('mobile')) {\r\n body.classList.remove('pc');\r\n body.classList.add('mobile');\r\n }\r\n this.setNavRoles();\r\n }\r\n }\r\n const {\r\n MenuList,\r\n MobileBackButton,\r\n MobileDescriptionContainer,\r\n MobileDescriptionLabel,\r\n Navigation,\r\n config: { menuHeading }\r\n } = this.props;\r\n this.currentLevel = 1;\r\n const searchSlot = this._getSlot('search');\r\n const search = (searchSlot && searchSlot.length && searchSlot) || [];\r\n\r\n return (\r\n /* Below line updated for Sticky Navigation */\r\n
\r\n \r\n {/* VSI Customization - START\r\n Mobile menu heading */}\r\n {this.state.shouldShowHamburger && this.state.activeMenu === undefined && (\r\n \r\n \r\n \r\n )}\r\n {/* VSI Customization - END */}\r\n \r\n {this.state.shouldShowHamburger && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n )}\r\n\r\n {this.state.navigationSearch ? this._renderDisplay() : ''}\r\n {this.state.scrollClass &&\r\n (this.state.navigationSearch ? (\r\n
this.setState({ navigationSearch: false })}>
\r\n ) : (\r\n <>\r\n {search} \r\n
this.setState({ navigationSearch: true })}>
\r\n \r\n ))}\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private _getSlot(slotName: string): React.ReactNode[] | null {\r\n const { slots } = this.props;\r\n return (slots! && slots[slotName]! && slots[slotName].length! && slots[slotName]!) || null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props;\r\n const { activeMenu } = this.state;\r\n const { menuItemData } = this;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (this.state.shouldShowHamburger && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: undefined })\r\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n /* VSI Customization - START - 13/11/20 */\r\n if (menuItem) {\r\n // if user is on level < supported level, add 1 in currentLevelMobile\r\n // but if user clicks on back button and go to previous menu, currentLevelMobile will not be incremented\r\n this.currentLevelMobile < this.supportedLevel && this.state.isBackBtnClicked === false && this.currentLevelMobile++;\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}{' '}\r\n \r\n );\r\n }\r\n /* VSI Customization - END */\r\n } else {\r\n /* VSI Customization - START -13/11/20 */\r\n // if user is on first/root navigation menu level\r\n this.currentLevelMobile = 0;\r\n /* VSI Customization - END */\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n /* VSI Customization - START - 17/06/21 - Copied following functions from tsx file to display all option on 3rd level */\r\n private _mapData(): IMenuItemData[] {\r\n const { data, config } = this.props;\r\n const showCannedSearches = this.props.context.request.query?.showCannedSearches;\r\n const mergedData: IMenuItemData[] = [];\r\n /* VSI Customization - START - 8/31/22 /** adding another menu */\r\n if (this.isCMS && config.cmsNavItemsNew && config.cmsNavItemsNew.length > 0) {\r\n config.cmsNavItemsNew.map((item: ICmsNavItemsData, idx: number) =>\r\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\r\n );\r\n }\r\n /* VSI Customization - END - 8/31/22 /** adding another menu */\r\n\r\n if (\r\n this.isRetail &&\r\n config.navigationMenuSource === 'all' &&\r\n data &&\r\n data.categories &&\r\n data.categories.result &&\r\n data.categories.result.length > 0\r\n ) {\r\n data.categories.result.map((item: CategoryHierarchy, index) => {\r\n if (item.Name === 'Sale' || (this.props.config.hideMenuItemPrefix && item.NeutralizedName?.startsWith(this.props.config.hideMenuItemPrefix))) {\r\n return;\r\n }\r\n (showCannedSearches || !shouldHideMenuItem(item.Name)) &&\r\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true));\r\n });\r\n }\r\n\r\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\r\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\r\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\r\n );\r\n }\r\n return this._constructTopMenuItemData(mergedData);\r\n }\r\n\r\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\r\n const enableTopLevelMenu = this.props.config.enabletopMenu || false;\r\n if (!enableTopLevelMenu) {\r\n return mergedData;\r\n }\r\n const mergedRootMenuData: IMenuItemData[] = [];\r\n const topMenu = {\r\n id: 1,\r\n linkText: this.props.config.rootMenuNavigation || '...',\r\n linkURL: '#',\r\n imageSource: undefined,\r\n subMenu: mergedData\r\n } as IMenuItemData;\r\n mergedRootMenuData.push(topMenu);\r\n\r\n return mergedRootMenuData;\r\n }\r\n\r\n\r\n /* VSI CUSTOMIZATION - START CUSTOMIZATION - 08/11/2023 */\r\n private menuExistsInRedundantMobileMenusConfig(menuText?: string): string {\r\n if(this.props.config.removeExtraSubMenusOnMobile && this.props.config.removeExtraSubMenusOnMobile.length) {\r\n for(let i = 0; i < this.props.config.removeExtraSubMenusOnMobile.length; i++) {\r\n if(menuText === this.props.config.removeExtraSubMenusOnMobile[i]) {\r\n return menuText;\r\n }\r\n }\r\n }\r\n return \"\";\r\n }\r\n /* VSI CUSTOMIZATION - END CUSTOMIZATION - 08/11/2023 */\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity\r\n private _constructMenuItemData(\r\n retailItem?: CategoryHierarchy,\r\n cmsItem?: ICmsNavItemsData,\r\n isRetail?: boolean,\r\n idx?: number,\r\n addedAllMenu?: boolean\r\n ): IMenuItemData {\r\n const locale =\r\n this.props.context && this.props.context.request && this.props.context.request.locale\r\n ? this.props.context.request.locale\r\n : 'en-us';\r\n const imageSouce = retailItem && retailItem.Images && retailItem.Images[0].Uri ? retailItem.Images[0].Uri : 'empty';\r\n /* VSI CUSTOMIZATION - START - 18/09/2023 */\r\n const friendlyName = NavigationMenuView.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '';\r\n const urlFromConfig = this._getUrlFromConfigOfNavItem(friendlyName);\r\n if (isRetail) {\r\n if (retailItem?.Children && retailItem.Children.length) {\r\n retailItem.Children = retailItem.Children.filter(ric => !(this.props.config.hideMenuItemPrefix && ric.NeutralizedName?.startsWith(this.props.config.hideMenuItemPrefix)));\r\n }\r\n return {\r\n id: NavigationMenuView.RSItemIdInit++,\r\n linkText: friendlyName,\r\n linkURL: urlFromConfig ? urlFromConfig : retailItem && retailItem.Url,\r\n imageSource: imageSouce,\r\n subMenu: this._getNestedChildren(retailItem, imageSouce, addedAllMenu).concat(this._constructSecondLevelStaticMenus(retailItem?.RecordId ? retailItem.RecordId: -1, retailItem?.Name ? retailItem.Name : ''))\r\n } as IMenuItemData;\r\n } else {\r\n const isMobile = this.props.isMobileView || this.isNavOutOfBounds();\r\n if(isMobile){\r\n const menuText = this.menuExistsInRedundantMobileMenusConfig(cmsItem?.linkText);\r\n if(menuText) {\r\n const subMenu = this._getCMSNestedChildren(cmsItem);\r\n if(subMenu.length === 1) {\r\n const subMenuItem = subMenu[0];\r\n if(subMenuItem.linkText === menuText){\r\n return {\r\n id: NavigationMenuView.CMSItemIdInit++,\r\n linkText: (cmsItem && cmsItem.linkText) || '',\r\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\r\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\r\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\r\n subMenu: subMenuItem.subMenu\r\n } as IMenuItemData;\r\n }\r\n } \r\n }\r\n }\r\n return {\r\n id: NavigationMenuView.CMSItemIdInit++,\r\n linkText: (cmsItem && cmsItem.linkText) || '',\r\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\r\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\r\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\r\n subMenu: this._getCMSNestedChildren(cmsItem)\r\n } as IMenuItemData;\r\n }\r\n }\r\n\r\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n const showCannedSearches = this.props.context.request.query?.showCannedSearches;\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n if (!this.props.config.enabletopMenu && addedAllMenu) {\r\n nestedChildren.push({\r\n linkText: this.props.resources.allCategoryMenuText,\r\n imageSource: imageSourceUrl,\r\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\r\n });\r\n }\r\n category.Children.map((item: CategoryHierarchy, index) => {\r\n (showCannedSearches || !shouldHideMenuItem(item.Name)) &&\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, true));\r\n });\r\n return nestedChildren;\r\n }\r\n\r\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n\r\n if (!category || !category.subMenus || !category.subMenus.length) {\r\n return [];\r\n }\r\n\r\n category.subMenus.map((item: ISubMenusData, idx: number) => {\r\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\r\n });\r\n return nestedChildren;\r\n }\r\n\r\n private _setNavigationSource = (sourceType?: navigationMenuSource): void => {\r\n switch (sourceType) {\r\n case navigationMenuSource.retailServerOnly:\r\n this.isRetail = true;\r\n this.isCMS = false;\r\n break;\r\n case navigationMenuSource.cmsOnly:\r\n this.isRetail = false;\r\n this.isCMS = true;\r\n break;\r\n case navigationMenuSource.all:\r\n this.isRetail = true;\r\n this.isCMS = true;\r\n break;\r\n default:\r\n }\r\n };\r\n /* VSI Customization - END - 17/04/21 */\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: item && item.id })\r\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n private _renderMobileSubMenu(menuItemData: IMenuItemData): JSX.Element | null {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, undefined, menuItemData.linkText)}\r\n \r\n );\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n const {\r\n config: { dobbiesClubNavItemText },\r\n context: {\r\n request: {\r\n user: { isAuthenticated }\r\n }\r\n }\r\n } = this.props;\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.state.shouldShowHamburger && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, undefined, menuItemData.linkText);\r\n } else {\r\n /* VSI Customization - START */\r\n if (this.state.shouldShowHamburger) {\r\n return this._renderMobileSubMenu(menuItemData);\r\n }\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, undefined)}\r\n \r\n \r\n \r\n );\r\n /* VSI Customization - END */\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n /* VSI Customization - START - 11/11/20 */\r\n // Check if user is club or club plus member, clicking on Dobbies club will navigate to loyalty page otherwise to dobbies marketing or as configured in CMS page\r\n let updatedMenuItemData: IMenuItemData = menuItemData;\r\n if (isAuthenticated && menuItemData.linkText?.toLowerCase() === dobbiesClubNavItemText?.toLowerCase()) {\r\n updatedMenuItemData = this.conditionalRoutingMenuItem(menuItemData);\r\n }\r\n /* Displayed static menu items as buttons in desktop view and as link menu items in mobile/iPad view */\r\n if (this.state.shouldShowHamburger) {\r\n return this._renderLinkMenuItem(updatedMenuItemData);\r\n }\r\n return this._renderButtonMenuItem(updatedMenuItemData);\r\n /* VSI Customization - END */\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n /* VSI Customization - START - 07/04/21 - Conditional routing of dobbies club navigation menu item */\r\n\r\n // Route conditionally on clicking Dobbies Club nav item, it updated menu item url and returns updated menuItemData\r\n private conditionalRoutingMenuItem = (menuItemData: IMenuItemData): IMenuItemData => {\r\n const { dobbiesClubLink } = this.state;\r\n\r\n if (dobbiesClubLink) {\r\n const updatedMenuItem = menuItemData;\r\n updatedMenuItem.linkURL = dobbiesClubLink;\r\n return updatedMenuItem;\r\n }\r\n return menuItemData;\r\n };\r\n\r\n // Provide the TierId of user's loyalty\r\n private _getTierId = (loyaltyGroup: LoyaltyGroup | undefined) => {\r\n // highestLoyaltCardTier\r\n const highestActiveLoyaltyCardTier = loyaltyGroup && loyaltyGroup.HighestActiveLoyaltyCardTier;\r\n const loyaltyCardTiers = loyaltyGroup && loyaltyGroup.LoyaltyCardTiers;\r\n if (loyaltyCardTiers && loyaltyCardTiers?.length > 0) {\r\n for (const [_, loyaltyCardTier] of loyaltyCardTiers.entries()) {\r\n if (loyaltyCardTier.RecordId === highestActiveLoyaltyCardTier) {\r\n return loyaltyCardTier.TierId;\r\n }\r\n }\r\n }\r\n return;\r\n };\r\n\r\n // Redirects the user based on certain criteria defined inside function\r\n private _getRedirectionLink = (loyaltyCard: LoyaltyCard, tierId: string | undefined) => {\r\n const {\r\n config: { clubFreeTierText, clubPlusTierText }\r\n } = this.props;\r\n\r\n if (!loyaltyCard.CardNumber || !tierId || !clubFreeTierText || !clubPlusTierText) {\r\n return undefined;\r\n }\r\n\r\n tierId = tierId.toLowerCase().trim();\r\n // If user is already dobbies club free/plus member and clicks on dobbies club nav item, navigate him to loyalty page\r\n if (tierId === clubFreeTierText.toLowerCase() || tierId === clubPlusTierText.toLowerCase()) {\r\n return getUrlSync('loyalty', this.props.context.actionContext);\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n /* VSI Customization - END */\r\n private _getCategoryImage = (categoryImage: string): React.ReactNode | null => {\r\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, this.props.context.actionContext.requestContext.apiSettings);\r\n if(this.state.categoryName && this.props.config.menuImagesSchedule) {\r\n for(const imageSchedule of this.props.config.menuImagesSchedule) {\r\n if(imageSchedule.menuName === this.state.categoryName) {\r\n try {\r\n const now = new Date();\r\n const dateTimeSplittedStartDate = imageSchedule.imageShowStartDate.split(' ');\r\n const startDateMonth = dateTimeSplittedStartDate[0].split('-')[1];\r\n const startDateDay = dateTimeSplittedStartDate[0].split('-')[0];\r\n const startDateYear = dateTimeSplittedStartDate[0].split('-')[2];\r\n const startDateHour = dateTimeSplittedStartDate[1].split(':')[0];\r\n const startDateMinutes = dateTimeSplittedStartDate[1].split(':')[1];\r\n const imageShowingStartDate = new Date(`${startDateMonth}-${startDateDay}-${startDateYear} ${startDateHour}:${startDateMinutes}:00`);\r\n const dateTimeSplittedEndDate = imageSchedule.imageShowEndDate.split(' ');\r\n const endDateMonth = dateTimeSplittedEndDate[0].split('-')[1];\r\n const endDateDay = dateTimeSplittedEndDate[0].split('-')[0];\r\n const endDateYear = dateTimeSplittedEndDate[0].split('-')[2];\r\n const endDateHour = dateTimeSplittedEndDate[1].split(':')[0];\r\n const endDateMinutes = dateTimeSplittedEndDate[1].split(':')[1];\r\n const imageShowEndDate = new Date(`${endDateMonth}-${endDateDay}-${endDateYear} ${endDateHour}:${endDateMinutes}:00`);\r\n if(now.getTime() <= imageShowEndDate.getTime() && now.getTime() >= imageShowingStartDate.getTime()) {\r\n const scheduledImageUrl = generateImageUrl(`${imageSchedule.menuImageName}`, this.props.context.actionContext.requestContext.apiSettings);\r\n const ImageData: IImageData = { src: scheduledImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n } catch(ex) {\r\n if (categoryImageUrl !== undefined) {\r\n const ImageData: IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n } \r\n }\r\n }\r\n }\r\n }\r\n if (categoryImageUrl !== undefined) {\r\n const ImageData: IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n private _updateCategoryImage = (categoryImage: string, selectedCategoryName: string) => () => {\r\n /* VSI Customization - START - 16/03/21 */\r\n // Get category image data matched with currenct category\r\n const {\r\n config: { categoryImageLinks }\r\n } = this.props;\r\n const selectedCategory =\r\n categoryImageLinks &&\r\n categoryImageLinks.find(category => {\r\n const categoryName = category.categoryName && category.categoryName.trim().toLowerCase();\r\n return selectedCategoryName.toLowerCase().trim() === categoryName;\r\n });\r\n const categoryLink = selectedCategory && selectedCategory.categoryImageLink && selectedCategory.categoryImageLink.destinationUrl;\r\n /* VSI Customization - END */\r\n this.setState({\r\n categoryName: selectedCategory?.categoryName,\r\n categoryImage: categoryImage !== '' ? categoryImage : 'empty',\r\n categoryImageLink: categoryImage !== '' ? categoryLink : undefined\r\n });\r\n };\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, isChild?: boolean, parentName?: string): JSX.Element | null {\r\n const {\r\n ListItem,\r\n MenuList,\r\n config: { showOptionAll }\r\n } = this.props;\r\n /* VSI Customization - START */\r\n /* Added isMobileView condition to check this condition just for mobile to fill submenu by default in case of desktop */\r\n if (this.state.shouldShowHamburger && activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n /* VSI Customization - END */\r\n if (!subMenus || subMenus.length === 0) {\r\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n /* VSI Customization - START - 02/11/20 */\r\n let _subMenus: IMenuItemData[];\r\n if (isChild === undefined && !showOptionAll) {\r\n if (!this.state.shouldShowHamburger) {\r\n // Second level menu will not include option 'All' on desktop\r\n _subMenus =\r\n subMenus &&\r\n subMenus.filter(subItem => {\r\n return subItem.linkText && subItem.linkText.toLowerCase() !== 'all';\r\n });\r\n } else {\r\n // display parentName instead of all in third level on desktop\r\n let allOptionFound = false;\r\n _subMenus = subMenus;\r\n _subMenus &&\r\n _subMenus.map(submenu => {\r\n if (!allOptionFound && submenu.linkText && submenu.linkText.toLowerCase() === 'all') {\r\n submenu.linkText = `${submenu.linkText} ${parentName}`;\r\n allOptionFound = true;\r\n }\r\n });\r\n }\r\n } else {\r\n // Third level menu\r\n // on desktop, do not show the all category menu on the third level\r\n _subMenus = subMenus;\r\n _subMenus =\r\n subMenus &&\r\n subMenus.filter(subItem => {\r\n return subItem.linkText && subItem.linkText.toLowerCase() !== 'all';\r\n });\r\n }\r\n /* VSI Customization - END */\r\n let levelClassName: string = '';\r\n const menuOptions =\r\n _subMenus &&\r\n _subMenus.map((option: IMenuItemData, idx: number) => {\r\n let isActiveOption = option.id !== undefined && this.state.currentCategory === option.id;\r\n isActiveOption = isActiveOption && 'id' in option; // if any option doesn't have id value, its submenu will not be created\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0) || false;\r\n const renderChildMenu = this.state.shouldShowHamburger ? hasOptions : isActiveOption;\r\n\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.shouldShowHamburger && this.currentLevelMobile < this.supportedLevel - 1) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = option.linkURL\r\n ? this._renderLinkMenuItem(option, idx, activeMenu, isChild, parentName)\r\n : this._renderSpanMenuItem(option);\r\n }\r\n let subMenu;\r\n if (renderChildMenu === isActiveOption) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n /* Last parameter indicated if it is child or not */\r\n subMenu = this._renderSubMenu(option.subMenu, this.state.shouldShowHamburger ? option.id : undefined, true, option.linkText);\r\n }\r\n }\r\n return (\r\n <>\r\n \r\n {menuItem}\r\n {/* VSI Customization - START */}\r\n {this.state.shouldShowHamburger && subMenu}\r\n {/* Following node displays submenu against a menu item when user moves mouse on it on desktop*/}\r\n {!this.state.shouldShowHamburger && (\r\n \r\n \r\n {subMenu}\r\n \r\n \r\n )}\r\n {/* VSI Customization - END */}\r\n \r\n \r\n );\r\n });\r\n\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu);\r\n }\r\n /* VSI Customization - START */\r\n /* Following function navigate to category page */\r\n private _gotoCategoryPage = (categoryPageURL: string | undefined) => () => {\r\n if (categoryPageURL) {\r\n window.location.href = categoryPageURL;\r\n }\r\n };\r\n /* VSI Customization - END */\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n /* VSI Customization - START */\r\n //customization to remove Offers category dynamically.\r\n if (option.linkURL === '/all/offers/5637246576.c') {\r\n return null;\r\n }\r\n\r\n if (this.state.shouldShowHamburger) {\r\n return (\r\n \r\n
{option.linkText}
\r\n \r\n );\r\n } else {\r\n /* Mouse Hover on menuitem displays its submenu till level 3 */\r\n /* Mouse Click on menuitem will navigate to its category page */\r\n\r\n return (\r\n \r\n
{option.linkText}
\r\n \r\n );\r\n }\r\n /* VSI Customization - START */\r\n }\r\n private _renderLinkMenuItem(\r\n option: IMenuItemData,\r\n index?: number,\r\n activeMenu?: number | undefined,\r\n _isChild?: boolean | undefined,\r\n parentName?: string\r\n ): JSX.Element | null {\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n //remove linktext, when third category gets the same name of it's parent-- #task-11184\r\n const optionLinkText = _isChild && linkText === parentName ? linkText : linkText;\r\n /* VSI Customization - START*/\r\n if (this.state.shouldShowHamburger) {\r\n return (\r\n \r\n {optionLinkText}\r\n \r\n );\r\n } else {\r\n /* onClick navigates to category page if clicked item is child item (level 3) */\r\n const onClick = _isChild ? { onClick: this._handleLinkClick(option.linkText) } : undefined;\r\n return (\r\n \r\n {optionLinkText}\r\n {!_isChild && option.subMenu && option.subMenu.length > 0 ? : undefined}\r\n \r\n );\r\n }\r\n /* VSI Customization - END - 31/10/20 */\r\n }\r\n\r\n /* VSI Customization - START */\r\n /* Following function sets value of previous current category in case of level 3 and option.id in case of level 2 */\r\n private _handleMouseHover = (optionID: number | undefined, _isChild?: boolean | undefined) => () => {\r\n const _activeItem = _isChild ? this.state.currentCategory : optionID;\r\n _activeItem !== undefined && this.setState({ currentCategory: _activeItem });\r\n };\r\n /* onClick navigates to category page if clicked item is child item */\r\n private _handleLinkClick = (linkURL: string | undefined) => () => {\r\n this._gotoCategoryPage(linkURL);\r\n };\r\n /* VSI Customization - END */\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n // VSI Customization - Added categoryImageLink has been added\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage } = this.props;\r\n const { categoryImage, categoryImageLink } = this.state;\r\n this.currentLevel = 1;\r\n const scheduledImageUrl = this._getCategoryScheduledImageUrl() || categoryImageLink;\r\n if (showCategoryImage) {\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n \r\n {categoryImage !== undefined && categoryImage !== null && (\r\n <>\r\n {scheduledImageUrl ? (\r\n {this._getCategoryImage(categoryImage)}\r\n ) : (\r\n this._getCategoryImage(categoryImage)\r\n )}\r\n \r\n )}\r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n \r\n );\r\n }\r\n\r\n /* VSI Customization - START - 04/01/21 */\r\n // private _getSubMenuLength = (menuItemId: number | undefined) => {\r\n // const menuItem = menuItemId && menuItemId.toString();\r\n // const htmlElement = menuItem && this.documentRef && this.documentRef.getElementById(menuItem);\r\n // const menuItemHeight = htmlElement && htmlElement.offsetHeight;\r\n // return menuItemHeight === 0 ? undefined : menuItemHeight;\r\n // };\r\n /* VSI Customization - END */\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.state.shouldShowHamburger) {\r\n this.setState({\r\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\r\n parentMenu: parentId,\r\n currentCategory: undefined // parent of third menu to render third level menu\r\n });\r\n if (this.props.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data.linkText!)();\r\n }\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId,\r\n isBackBtnClicked: false\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu, isBackBtnClicked: true });\r\n /* VSI Customization - START -13/11/20 */\r\n // decrement of 1 in currentLevelMobile when user clicks on back button\r\n this.currentLevelMobile--;\r\n /* VSI Customization - END */\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.state.shouldShowHamburger) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.state.shouldShowHamburger) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n\r\n private isInViewport = () => {\r\n const bounding = this.navRef.current?.getBoundingClientRect();\r\n return bounding && bounding.top >= 0;\r\n };\r\n\r\n /* VSI Customization - START - 29/10/20 */\r\n /* Sticky Navigation function added */\r\n private _mainMenuScroll = (): void => {\r\n if (this.isInViewport()) {\r\n this.setState({\r\n scrollClass: false,\r\n navigationSearch: true\r\n });\r\n } else if (!this.state.scrollClass) {\r\n this.setState({\r\n scrollClass: true,\r\n navigationSearch: true\r\n });\r\n }\r\n };\r\n /* VSI Customization - END - 29/10/20 */\r\n}\r\n\r\nexport default NavigationMenuView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu'),\n $type: 'contentModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'navigation-menu',\n p: 'navigation-menu',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|dobbies|views|navigation-menu'] = {\n c: () => require('partner/themes/dobbies/views/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|navigation-menu|modules|navigation-menu|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-navigation-menu-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-navigation-menu'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return this.viewport === 'xs' || this.viewport === 'sm';\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation'\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: this.isMobile ? 'listbox' : 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage ?? false,\n showPromotionalContent: this.props.config.displayPromotionalImage ?? false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer: {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer: {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) =>\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n );\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n );\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu ?? false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation ?? '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(\n retailItem?: CategoryHierarchy,\n cmsItem?: ICmsNavItemsData,\n isRetail?: boolean,\n idx?: number,\n addedAllMenu?: boolean\n ): IMenuItemData {\n const locale =\n this.props.context && this.props.context.request && this.props.context.request.locale\n ? this.props.context.request.locale\n : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n const cmsItemText = (cmsItem && cmsItem.linkText) || '';\n const { menuAriaLabel } = this.props.resources;\n\n // Filter category promotional data based on category name\n const promotionalData =\n retailItem &&\n categoryPromotionalContent?.filter(promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItemText,\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab,\n ariaLabel: `${cmsItemText} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({\n linkText: this.props.resources.allCategoryMenuText,\n imageSource: imageSourceUrl,\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\n });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}{' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootEnabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n};\n\nexport default navigationMenuView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["navigationMenuSource","NAMES_TO_HIDE","shouldHideMenuItem","menuName","undefined","some","name","startsWith","NavigationMenuView","React","constructor","props","state","super","supportedLevel","currentLevel","currentLevelMobile","isRetail","isCMS","mouseDownRefs","_getCategoryScheduledImageUrl","scheduledImageUrl","this","categoryName","config","menuImagesSchedule","imageSchedule","now","Date","dateTimeSplittedStartDate","imageShowStartDate","split","startDateMonth","startDateDay","startDateYear","startDateHour","startDateMinutes","imageShowingStartDate","dateTimeSplittedEndDate","imageShowEndDate","endDateMonth","endDateDay","endDateYear","endDateHour","endDateMinutes","getTime","imageUrl","ex","_setNavigationSource","sourceType","retailServerOnly","cmsOnly","all","conditionalRoutingMenuItem","menuItemData","dobbiesClubLink","updatedMenuItem","linkURL","_getTierId","loyaltyGroup","highestActiveLoyaltyCardTier","HighestActiveLoyaltyCardTier","loyaltyCardTiers","LoyaltyCardTiers","length","_","loyaltyCardTier","entries","RecordId","TierId","_getRedirectionLink","loyaltyCard","tierId","clubFreeTierText","clubPlusTierText","CardNumber","toLowerCase","trim","getUrlSync","context","actionContext","_getCategoryImage","categoryImage","categoryImageUrl","generateImageUrl","requestContext","apiSettings","ImageData","src","menuImageName","Image","Object","assign","className","gridSettings","request","imageSettings","loadFailureBehavior","role","id","_updateCategoryImage","selectedCategoryName","categoryImageLinks","selectedCategory","find","category","categoryLink","categoryImageLink","destinationUrl","setState","_gotoCategoryPage","categoryPageURL","window","location","href","_handleMouseHover","optionID","_isChild","_activeItem","currentCategory","_handleLinkClick","_handleDropdownToggle","data","parentId","shouldShowHamburger","isBackTrack","activeMenu","mobileViewLabelText","linkText","parentMenu","isBackBtnClicked","showCategoryImage","imageSource","_resetFocus","_handleGoBack","setTimeout","menuNode","current","focus","_handleClickOutside","event","contains","target","isInViewport","_this$navRef$current","bounding","navRef","getBoundingClientRect","top","_mainMenuScroll","scrollClass","navigationSearch","_mapData","isNavOutOfBounds","isMobileView","_closeSubmenu","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","locale","nameTranslations","nameTranslation","item","Language","Text","componentDidMount","document","body","push","forEach","ref","addEventListener","then","LoyaltyGroups","redirectionLink","componentWillUnmount","removeEventListener","_constructSecondLevelStaticMenus","staticMenuItems","subMenuStaticMenus","map","idx","_item$subMenus","subMenus","submenu","_constructMenuItemData","_getUrlFromConfigOfNavItem","urlFromConfig","_item$linkUrl","_item$linkUrl2","linkUrl","MsDyn365","isBrowser","parentDiv","getElementsByClassName","offsetWidth","parseFloat","offsetHeight","innerWidth","setNavRoles","Navigation","MenuList","Link","replace","Button","render","getElementsByTagName","classList","remove","add","MobileBackButton","MobileDescriptionContainer","MobileDescriptionLabel","menuHeading","searchSlot","_getSlot","search","Module","classnames","Node","tag","text","tabIndex","onClick","_renderDisplay","slotName","slots","ListItem","menuItemList","menuItem","i","_getFromSubMenu","key","_createMenuItemList","index","_this$props$context$r","showCannedSearches","query","mergedData","cmsNavItemsNew","categories","result","_item$NeutralizedName","Name","hideMenuItemPrefix","NeutralizedName","cmsNavItems","_constructTopMenuItemData","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","subMenu","menuExistsInRedundantMobileMenusConfig","menuText","removeExtraSubMenusOnMobile","retailItem","cmsItem","addedAllMenu","imageSouce","Images","Uri","getFriendlyName","NameTranslations","Children","filter","ric","_ric$NeutralizedName","RSItemIdInit","Url","_getNestedChildren","concat","_getCMSNestedChildren","subMenuItem","CMSItemIdInit","imageDestinationURL","imageLink","image","imageSourceUrl","_this$props$context$r2","arguments","nestedChildren","resources","allCategoryMenuText","getCategoryUrl","found","error","_renderMobileSubMenu","_renderButtonMenuItem","_renderSubMenu","dobbiesClubNavItemText","user","isAuthenticated","_menuItemData$linkTex","updatedMenuItemData","_renderLinkMenuItem","_renderSpanMenuItem","isChild","parentName","showOptionAll","_subMenus","subItem","allOptionFound","levelClassName","menuOptions","option","isActiveOption","hasOptions","renderChildMenu","toString","_renderMenu","onMouseEnter","contentAction","etext","attributes","getTelemetryAttributes","optionLinkText","onTelemetryClick","onMouseOver","Span","level","currentItem","DivContainer","ImageDivContainer","binding","modules","dataActions","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","__bindings__","_objectSpread","viewDictionary","cn","_positionInSetOffset","escapeKey","categoryImageSrc","promotionalImage","altText","ArrayExtensions","hasElements","promotionalContent","imageSrc","promotionalItemImageSettings","additionalProperties","categoryImageAltText","_handleFocusOutside","relatedTarget","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","defaultImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","_ref","_categoryImage$imageS","categoryImageSettings","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","_renderMobileMenu","_renderDesktopMenu","posinset","_renderDrawerMenu","setSize","_renderDrawer","toggleButtonText","keyValue","keys","isDrawerOpen","colProps","Drawer","toggleButtonProps","ariaLabel","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","menuItemDatum","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","haveSubmenu","Math","round","onFocus","hoverEffect","isParent","imagesource","shouldOpenNewTab","_renderPromotionalLink","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","MenuTypeIndexId","MenuSource","NavigationMenu","_updateViewport","viewport","device","Type","isMobile","resizeThrottledEventHandler","addThrottledEvent","_this$props$config$di","_this$props$config$di2","isEmptyOrNullObject","viewProps","xl","moduleProps","displayCategoryImage","displayPromotionalImage","ImageContainer","backButtonAriaLabel","renderView","_this$props$config$en","_this$props$config$ro","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","promoItem","_promoItem$categoryNa","_retailItem$Name","_NavigationMenu$getFr","_NavigationMenu$getFr2","menuSource","Retail","Cms","openInNewTab","_getViewport","__decorate","observable","computed","_shouldAddFocusMenuRef","menuItemRef","componentDidUpdate","_this$menuItemRef$cur","children","NavMenuConstants","getCategoryImage","alttext","navProps","_props$navProps$confi","imageData","Msdyn365","NavigationMenuRootDisabled","four","zero","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","categoryImageSource","isOnlyMobile","_closeNavMenu","_this$menuNode$curren","_this$menuNode$curren2","_customUpdateViewport","variant","VariantType","Browser","customResizeThrottledEventHandler","title","hamburgerAriaLabel","_renderCollapseMenu","Collapse","StringExtensions","isNullOrWhitespace","parentMenuId","menu","one","Number","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","rootMenu","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","timeout","isHoverEffect","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","module","exports","ReactDOM"],"sourceRoot":""}