{"version":3,"file":"static/js/a432633130d9aefb0134.bundle.js","mappings":"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","sources":["webpack://nss-commerce/./src/themes/newsunshine-b2c/definition-extensions/navigation-menu.ext.props.autogenerated.ts?eab3","webpack://nss-commerce/./src/themes/newsunshine-b2c/views/navigation-menu.view.tsx?0fdb","webpack://nss-commerce/./src/themes/newsunshine/definition-extensions/navigation-menu.ext.props.autogenerated.ts?1c0d","webpack://nss-commerce/./src/themes/newsunshine/views/navigation-menu.view.tsx?ffa4","webpack://nss-commerce/./lib/navigation-menu/module-registration.js?7039","webpack://nss-commerce/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://nss-commerce/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://nss-commerce/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://nss-commerce/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://nss-commerce/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://nss-commerce/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://nss-commerce/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://nss-commerce/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://nss-commerce/external var \"React\"?0d3b","webpack://nss-commerce/external var \"ReactDOM\"?853b","webpack://nss-commerce/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/does-not-exceed-safe-integer.js?58a6","webpack://nss-commerce/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/flatten-into-array.js?98f9","webpack://nss-commerce/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.array.flat.js?1688","webpack://nss-commerce/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.array.unscopables.flat.js?4ea0"],"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\n\r\nexport const enum navigationMenuSource {\r\n all = 'all',\r\n retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly'\r\n}\r\n\r\nexport const enum desktopLayoutType {\r\n flat = 'flat',\r\n nested = 'nested'\r\n}\r\n\r\nexport const enum inheritCategoryImages {\r\n never = 'never',\r\n whenEmpty = 'whenEmpty',\r\n always = 'always'\r\n}\r\n\r\nexport const enum desktopImagePosition {\r\n left = 'left',\r\n center = 'center',\r\n right = 'right'\r\n}\r\n\r\nexport const enum pagerType {\r\n arrow = 'arrow',\r\n bubble = 'bubble'\r\n}\r\n\r\nexport interface INavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n enabletopMenu?: boolean;\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 desktopLayoutType?: desktopLayoutType;\r\n inheritCategoryImages?: inheritCategoryImages;\r\n desktopImagePosition?: desktopImagePosition;\r\n pagerType?: pagerType;\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 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 INavigationMenuProps extends Msdyn365.IModule {\r\n resources: INavigationMenuResources;\r\n config: INavigationMenuConfig;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport * as React from 'react';\r\nimport {\r\n desktopImagePosition,\r\n desktopLayoutType,\r\n INavigationMenuProps,\r\n inheritCategoryImages,\r\n navigationMenuSource,\r\n pagerType\r\n} from '../definition-extensions/navigation-menu.ext.props.autogenerated';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Render the Navigation menu.\r\n * @param props - The navigation menu view props.\r\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\r\n */\r\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\r\n return ;\r\n};\r\n\r\n/**\r\n * INavigationMenuViewRootProps.\r\n */\r\ninterface INavigationMenuViewRootProps {\r\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\r\n}\r\n\r\n/**\r\n * Represent navigation menu state interface.\r\n */\r\ninterface INavigationState {\r\n categoryImages: Msdyn365.IImageData[];\r\n imageOffset: number;\r\n screenWidth: number;\r\n isMobile: boolean;\r\n isNavOpen: boolean;\r\n breadcrumb: IMenuItemData[];\r\n}\r\n\r\nclass NavMenu extends React.PureComponent {\r\n private readonly mobileMaxWidth = 1200;\r\n private readonly widthPerImage = 250;\r\n private parentCategoryMap: Map = new Map();\r\n\r\n public constructor(props: INavigationMenuViewRootProps) {\r\n super(props);\r\n\r\n this.state = {\r\n categoryImages: [],\r\n imageOffset: 0,\r\n screenWidth: window.innerWidth,\r\n isMobile: this.isMobile,\r\n isNavOpen: false,\r\n breadcrumb: []\r\n };\r\n\r\n const handleResize = () =>\r\n this.setState({ ...this.state, isMobile: this.isMobile, screenWidth: window.innerWidth, imageOffset: 0 });\r\n window.addEventListener('resize', handleResize);\r\n\r\n for (let menu of this.getMenus()) {\r\n this.mapParentCategory(menu);\r\n }\r\n }\r\n\r\n private get isMobile(): boolean {\r\n return window.innerWidth <= this.mobileMaxWidth;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n return
{this.state.isMobile ? this._renderMobile() : this._renderDesktop()}
;\r\n }\r\n\r\n private mapParentCategory(parent?: IMenuItemData): void {\r\n if (!parent?.subMenu) {\r\n return;\r\n }\r\n\r\n for (let menu of parent.subMenu) {\r\n this.parentCategoryMap.set(menu, parent);\r\n this.mapParentCategory(menu);\r\n }\r\n }\r\n\r\n private getParentCategory(menu?: IMenuItemData): IMenuItemData | undefined {\r\n if (!menu) {\r\n return undefined;\r\n }\r\n\r\n return this.parentCategoryMap.get(menu);\r\n }\r\n\r\n private getMenus(): IMenuItemData[] {\r\n switch (Object(this.props.navProps.config.navigationMenuSource)?.toString()) {\r\n case navigationMenuSource.all:\r\n return this.props.navProps.menuItemData;\r\n case navigationMenuSource.retailServerOnly:\r\n return this.props.navProps.menuItemData.filter(menu => menu.menuSource === 'Retail');\r\n case navigationMenuSource.cmsOnly:\r\n return this.props.navProps.menuItemData.filter(menu => menu.menuSource === 'Cms');\r\n default:\r\n // scream in typscript pain\r\n return [];\r\n }\r\n }\r\n\r\n private _renderDesktop(): JSX.Element | null {\r\n const _handleOutsideClick = () => {\r\n const elements = document.querySelectorAll('.nss-navigation-menu__sub-menu');\r\n for (let i = 0; i < elements.length; i++) {\r\n elements.item(i).classList.remove('shown');\r\n }\r\n\r\n const elements2 = document.querySelectorAll('.nss-navigation-menu a');\r\n for (let i = 0; i < elements2.length; i++) {\r\n elements2.item(i).classList.remove('selected');\r\n }\r\n\r\n document.querySelector('.nss-navigation-menu__wrap')?.classList.remove('open');\r\n this._updateCategoryImage();\r\n };\r\n\r\n const _handleAnchorClick = (event: React.MouseEvent) => {\r\n if (event.target instanceof HTMLElement) {\r\n if (!window.matchMedia('(hover: none)').matches || event.target.classList.contains('touched')) {\r\n return true;\r\n }\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return false;\r\n };\r\n\r\n const _handleTouchEnd = (event: React.TouchEvent, menu: IMenuItemData, level: number) => {\r\n if (event.target instanceof HTMLElement) {\r\n if (event.target.classList.contains('touched')) {\r\n return;\r\n }\r\n\r\n // not selected, emulate hover\r\n _onLinkMouseEnter(event, menu, level);\r\n event.target.classList.add('touched');\r\n document.querySelector('.nss-navigation-menu__wrap')?.classList.add('open');\r\n }\r\n };\r\n\r\n const _onLinkMouseEnter = (\r\n event: React.MouseEvent | React.TouchEvent,\r\n menu: IMenuItemData,\r\n level: number\r\n ) => {\r\n // remove other submenus of the set level\r\n const elements = document.querySelectorAll('.nss-navigation-menu__sub-menu');\r\n for (let i = 0; i < elements.length; i++) {\r\n if (Number(elements.item(i).getAttribute('data-level')) > level) {\r\n elements.item(i).classList.remove('shown');\r\n }\r\n }\r\n\r\n // show the hovered submenu\r\n document.getElementById(`nss-navigation-submenu-details-${menu.id}`)?.classList.add('shown');\r\n\r\n // remove other selections of the set level\r\n const elements2 = document.querySelectorAll('.nss-navigation-menu a');\r\n for (let i = 0; i < elements2.length; i++) {\r\n if (Number(elements2.item(i).getAttribute('data-level')) >= level) {\r\n elements2.item(i).classList.remove('selected');\r\n elements2.item(i).classList.remove('touched');\r\n }\r\n }\r\n\r\n // select the target element\r\n if (event.target instanceof HTMLElement) {\r\n event.target.classList.add('selected');\r\n }\r\n\r\n this._updateCategoryImage(menu);\r\n };\r\n\r\n const _renderMainMenu = (mainMenus: IMenuItemData[]): JSX.Element | null => {\r\n return (\r\n
\r\n {mainMenus.map(menu => (\r\n _onLinkMouseEnter(event, menu, 0)}\r\n onTouchEnd={event => _handleTouchEnd(event, menu, 0)}\r\n onClick={event => _handleAnchorClick(event)}\r\n href={menu.linkURL}\r\n data-level='0'\r\n >\r\n {menu.linkText}\r\n \r\n ))}\r\n
\r\n );\r\n };\r\n\r\n const _renderNestedSubMenu = (parent: IMenuItemData, menus?: IMenuItemData[], level: number = 1): JSX.Element | null => {\r\n if (!menus?.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n {menus.map(menu => (\r\n _onLinkMouseEnter(event, menu, level)}\r\n onTouchEnd={event => _handleTouchEnd(event, menu, level)}\r\n onClick={event => _handleAnchorClick(event)}\r\n href={menu.linkURL}\r\n data-level={level}\r\n >\r\n {menu.linkText}\r\n \r\n ))}\r\n
\r\n {menus.map(menu => _renderNestedSubMenu(menu, menu.subMenu, level + 1))}\r\n \r\n );\r\n };\r\n\r\n const _renderFlatSubMenu = (parent: IMenuItemData, submenus?: IMenuItemData[]): JSX.Element => {\r\n return (\r\n
\r\n {submenus?.map(menu => (\r\n
\r\n _onLinkMouseEnter(event, menu, 1)}\r\n onTouchEnd={event => _handleTouchEnd(event, menu, 1)}\r\n onClick={event => _handleAnchorClick(event)}\r\n href={menu.linkURL}\r\n data-level={1}\r\n >\r\n {menu.linkText}\r\n \r\n {!!menu?.subMenu?.length && (\r\n
\r\n {menu.subMenu.map(sub => (\r\n _onLinkMouseEnter(event, sub, 2)}\r\n onTouchEnd={event => _handleTouchEnd(event, sub, 2)}\r\n onClick={event => _handleAnchorClick(event)}\r\n href={sub.linkURL}\r\n data-level={2}\r\n >\r\n {sub.linkText}\r\n \r\n ))}\r\n
\r\n )}\r\n
\r\n ))}\r\n
\r\n );\r\n };\r\n\r\n const _renderNavbar = (): JSX.Element => {\r\n const _renderNestedRootEnabled = (): JSX.Element => {\r\n const mainMenu = this.getMenus()[0];\r\n const mainSubmenus = this.getMenus()[0].subMenu;\r\n const categoryContent = mainSubmenus?.filter(menu => menu.menuSource === 'Retail');\r\n const cmsContent = mainSubmenus?.filter(menu => menu.menuSource === 'Cms') ?? [];\r\n const submenus: IMenuItemData[] = [];\r\n if (categoryContent) submenus.push(...categoryContent);\r\n for (const menu of cmsContent) {\r\n if (menu.subMenu) {\r\n submenus.push(...menu.subMenu);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {_renderMainMenu([mainMenu, ...cmsContent])}\r\n
\r\n
\r\n {_renderNestedSubMenu(this.getMenus()[0], categoryContent)}\r\n {cmsContent && cmsContent.map(menu => _renderNestedSubMenu(menu, menu.subMenu))}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.left && (\r\n
\r\n )}\r\n {this._getCategoryImages()}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.right && (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _renderNestedRootDisabled = (): JSX.Element => {\r\n const mainMenus = this.getMenus();\r\n\r\n return (\r\n
\r\n {_renderMainMenu(mainMenus)}\r\n
\r\n
\r\n {mainMenus.map(menu => _renderNestedSubMenu(menu, menu.subMenu))}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.left && (\r\n
\r\n )}\r\n {this._getCategoryImages()}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.right && (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _renderFlatRootEnabled = (): JSX.Element => {\r\n const mainMenu = this.getMenus()[0];\r\n const mainSubmenus = this.getMenus()[0].subMenu;\r\n const categoryContent = mainSubmenus?.filter(menu => menu.menuSource === 'Retail');\r\n const cmsContent = mainSubmenus?.filter(menu => menu.menuSource === 'Cms') ?? [];\r\n const submenus: IMenuItemData[] = [];\r\n if (categoryContent) submenus.push(...categoryContent);\r\n for (const menu of cmsContent) {\r\n if (menu.subMenu) {\r\n submenus.push(...menu.subMenu);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {_renderMainMenu([mainMenu, ...cmsContent])}\r\n
\r\n
\r\n {_renderFlatSubMenu(mainMenu, categoryContent)}\r\n {cmsContent.map(menu => _renderFlatSubMenu(menu, menu.subMenu))}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.left && (\r\n
\r\n )}\r\n {this._getCategoryImages(1)}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.right && (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _renderFlatRootDisabled = (): JSX.Element => {\r\n const mainMenus = this.getMenus();\r\n\r\n return (\r\n
\r\n {_renderMainMenu(mainMenus)}\r\n
\r\n
\r\n {mainMenus.map(menu => _renderFlatSubMenu(menu, menu.subMenu))}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.left && (\r\n
\r\n )}\r\n {this._getCategoryImages(1)}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.right && (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n if (this.props.navProps.config.desktopLayoutType === desktopLayoutType.flat) {\r\n if (this.props.navProps.config.enabletopMenu) {\r\n return _renderFlatRootEnabled();\r\n }\r\n\r\n return _renderFlatRootDisabled();\r\n }\r\n\r\n if (this.props.navProps.config.enabletopMenu) {\r\n return _renderNestedRootEnabled();\r\n }\r\n\r\n return _renderNestedRootDisabled();\r\n };\r\n\r\n return _renderNavbar();\r\n }\r\n\r\n private _renderMobile(): JSX.Element | null {\r\n const mainMenu = this.getMenus()[0];\r\n const backRef = this.state.breadcrumb[this.state.breadcrumb.length - 1];\r\n\r\n let menus: IMenuItemData[] = [];\r\n if (backRef?.subMenu?.length) {\r\n menus = backRef.subMenu;\r\n } else if (this.props.navProps.config.enabletopMenu) {\r\n menus = mainMenu.subMenu ?? [];\r\n } else {\r\n menus = this.getMenus();\r\n }\r\n\r\n const _renderDrawerIcon = (): JSX.Element | null => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const _renderBackIcon = (): JSX.Element | null => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const _goBack = () => {\r\n const newBreadcrumb = this.state.breadcrumb.slice(0, -1);\r\n this.setState({ ...this.state, breadcrumb: newBreadcrumb });\r\n this._updateCategoryImage(newBreadcrumb[newBreadcrumb.length - 1]);\r\n };\r\n\r\n const _openDrawer = (menu: IMenuItemData) => {\r\n if (menu.subMenu?.length) {\r\n this.setState({ ...this.state, breadcrumb: [...this.state.breadcrumb, menu] });\r\n this._updateCategoryImage(menu);\r\n }\r\n };\r\n\r\n const _handleLinkClick = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n };\r\n\r\n return (\r\n
\r\n {this._getCategoryImages()}\r\n
\r\n {backRef && (\r\n
\r\n {_renderBackIcon()}\r\n \r\n {backRef.linkText}\r\n \r\n
\r\n )}\r\n {menus.map(menu => (\r\n
_openDrawer(menu)}>\r\n \r\n {menu.linkText}\r\n \r\n {!!menu.subMenu?.length && _renderDrawerIcon()}\r\n
\r\n ))}\r\n
\r\n
\r\n );\r\n }\r\n\r\n private checkImage(url?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (!url) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n const img = new Image();\r\n\r\n img.onload = () => resolve(true);\r\n img.onerror = () => resolve(false);\r\n\r\n img.src = url;\r\n });\r\n }\r\n\r\n private async _updateCategoryImage(menu?: IMenuItemData): Promise {\r\n const _resolveCategoryImages = async (menu?: IMenuItemData): Promise => {\r\n const linkText = menu?.linkText ? menu.linkText : '';\r\n const src = generateImageUrl(menu?.imageSource, this.props.navProps.context.actionContext.requestContext.apiSettings);\r\n const promotionalImages: Msdyn365.IImageData[] = [];\r\n\r\n if (this.props.navProps.config.displayCategoryImage) {\r\n if (await this.checkImage(src)) {\r\n promotionalImages.push({ src: src, altText: linkText, href: menu?.linkURL });\r\n }\r\n }\r\n\r\n // Read category and promotional image in one array\r\n if (this.props.navProps.config.displayPromotionalImage && menu?.promotionalContent?.length) {\r\n for (const item of menu.promotionalContent) {\r\n const imageSource = generateImageUrl(\r\n item.image.src,\r\n this.props.navProps.context.actionContext.requestContext.apiSettings\r\n );\r\n if (await this.checkImage(imageSource)) {\r\n promotionalImages.push({\r\n src: imageSource,\r\n altText: item.text,\r\n href: item.linkUrl.destinationUrl\r\n });\r\n }\r\n }\r\n }\r\n\r\n return promotionalImages;\r\n };\r\n\r\n const _shouldEvaluteParent = (images: Msdyn365.IImageData[], menu?: IMenuItemData): boolean => {\r\n if (!menu) {\r\n return false;\r\n }\r\n\r\n if (this.props.navProps.config.inheritCategoryImages === inheritCategoryImages.whenEmpty) {\r\n return images.length === 0;\r\n }\r\n\r\n if (this.props.navProps.config.inheritCategoryImages === inheritCategoryImages.always) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const promotionalImages = await _resolveCategoryImages(menu);\r\n if (this.props.navProps.config.inheritCategoryImages !== inheritCategoryImages.never) {\r\n let parent = this.getParentCategory(menu);\r\n while (_shouldEvaluteParent(promotionalImages, parent)) {\r\n const imagesToAdd = await _resolveCategoryImages(parent);\r\n promotionalImages.push(...imagesToAdd);\r\n parent = this.getParentCategory(parent);\r\n }\r\n }\r\n\r\n this.setState({\r\n categoryImages: promotionalImages?.length ? promotionalImages : [],\r\n imageOffset: 0\r\n });\r\n }\r\n\r\n private _getCategoryImages(maxImagesShown: number = 3) {\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const imageCount = this.state.categoryImages.length;\r\n let numShown = Math.floor(this.state.screenWidth / this.widthPerImage);\r\n numShown = Math.min(numShown, imageCount);\r\n numShown = Math.max(numShown, 1);\r\n numShown = Math.min(numShown, maxImagesShown);\r\n const imageContianerWidth = Math.max(1, imageCount / numShown) * 100;\r\n const marginPerImage = imageContianerWidth / imageCount;\r\n const marginOffset = marginPerImage * this.state.imageOffset;\r\n const style: React.CSSProperties = {\r\n width: `${imageContianerWidth}%`,\r\n marginLeft: `-${marginOffset}%`\r\n };\r\n\r\n const _touchStartHandler = (event: React.TouchEvent) => {\r\n const ele = event.currentTarget;\r\n const startX = event.touches[0].clientX;\r\n const minOffset = 0;\r\n const maxOffset = marginPerImage * (imageCount - numShown);\r\n const scrollSlop = marginPerImage / 2;\r\n const scrollThreshold = marginPerImage / 4;\r\n let deltaX = 0;\r\n let percentX = (deltaX / ele.clientWidth) * 100;\r\n\r\n const _touchMoveHandler = (event: TouchEvent) => {\r\n if (event.touches[0] && ele.parentElement) {\r\n deltaX = event.touches[0].clientX - startX;\r\n percentX = (deltaX / ele.parentElement.clientWidth) * 100;\r\n }\r\n let marginLeft = marginOffset - percentX;\r\n marginLeft = Math.max(marginLeft, minOffset - scrollSlop);\r\n marginLeft = Math.min(marginLeft, maxOffset + scrollSlop);\r\n\r\n if (ele && ele instanceof HTMLElement) {\r\n // disable anchor click if past scroll threshold\r\n if (scrollThreshold < percentX || scrollThreshold < -percentX) {\r\n ele.classList.add('disable');\r\n }\r\n\r\n // scroll the content based on mouse movement\r\n if (marginLeft < 0) {\r\n marginLeft = Math.abs(marginLeft);\r\n ele.style.marginLeft = `${marginLeft}%`;\r\n } else {\r\n ele.style.marginLeft = `-${marginLeft}%`;\r\n }\r\n }\r\n };\r\n\r\n const _touchEndHandler = (event: TouchEvent) => {\r\n let stateChanged = false;\r\n if (event.touches[0] && ele.parentElement) {\r\n deltaX = event.touches[0].clientX - startX;\r\n percentX = (deltaX / ele.parentElement.clientWidth) * 100;\r\n }\r\n\r\n if (scrollThreshold < percentX) {\r\n // scroll -Y\r\n if (this.state.imageOffset > 0) {\r\n let offset = this.state.imageOffset - 1;\r\n offset -= Math.floor((percentX - scrollThreshold) / marginPerImage);\r\n offset = Math.max(offset, 0);\r\n this.setState({ ...this.state, imageOffset: offset });\r\n stateChanged = true;\r\n }\r\n }\r\n\r\n if (scrollThreshold < -percentX) {\r\n // scroll +Y\r\n const lastOffset = this.state.categoryImages.length - numShown;\r\n if (this.state.imageOffset < lastOffset) {\r\n let offset = this.state.imageOffset + 1;\r\n offset -= Math.ceil((percentX + scrollThreshold) / marginPerImage);\r\n offset = Math.min(offset, lastOffset);\r\n this.setState({ ...this.state, imageOffset: offset });\r\n stateChanged = true;\r\n }\r\n }\r\n\r\n document.removeEventListener('touchmove', _touchMoveHandler);\r\n document.removeEventListener('touchend', _touchEndHandler);\r\n if (ele && ele instanceof HTMLElement) {\r\n ele.classList.remove('disable');\r\n ele.classList.remove('touched');\r\n if (stateChanged === false) {\r\n ele.style.marginLeft = `-${marginOffset}%`;\r\n }\r\n }\r\n event.stopPropagation();\r\n };\r\n\r\n document.addEventListener('touchmove', _touchMoveHandler);\r\n document.addEventListener('touchend', _touchEndHandler);\r\n if (ele && ele instanceof HTMLElement) {\r\n ele.classList.add('touched');\r\n }\r\n event.stopPropagation();\r\n };\r\n\r\n const _mouseDownHandler = (event: React.MouseEvent) => {\r\n const ele = event.currentTarget;\r\n const startX = event.clientX;\r\n const minOffset = 0;\r\n const maxOffset = marginPerImage * (imageCount - numShown);\r\n const scrollSlop = marginPerImage / 2;\r\n const scrollThreshold = marginPerImage / 4;\r\n let deltaX = 0;\r\n let percentX = (deltaX / ele.clientWidth) * 100;\r\n\r\n const _mouseMoveHandler = (event: MouseEvent) => {\r\n if (ele.parentElement) {\r\n deltaX = event.clientX - startX;\r\n percentX = (deltaX / ele.parentElement.clientWidth) * 100;\r\n }\r\n let marginLeft = marginOffset - percentX;\r\n marginLeft = Math.max(marginLeft, minOffset - scrollSlop);\r\n marginLeft = Math.min(marginLeft, maxOffset + scrollSlop);\r\n\r\n if (ele && ele instanceof HTMLElement) {\r\n // disable anchor click if past scroll threshold\r\n if (scrollThreshold < percentX || scrollThreshold < -percentX) {\r\n ele.classList.add('disable');\r\n }\r\n\r\n // scroll the content based on mouse movement\r\n if (marginLeft < 0) {\r\n marginLeft = Math.abs(marginLeft);\r\n ele.style.marginLeft = `${marginLeft}%`;\r\n } else {\r\n ele.style.marginLeft = `-${marginLeft}%`;\r\n }\r\n }\r\n };\r\n\r\n const _mouseUpHandler = (event: MouseEvent) => {\r\n let stateChanged = false;\r\n if (ele.parentElement) {\r\n deltaX = event.clientX - startX;\r\n percentX = (deltaX / ele.parentElement.clientWidth) * 100;\r\n }\r\n\r\n if (scrollThreshold < percentX) {\r\n // scroll -Y\r\n if (this.state.imageOffset > 0) {\r\n let offset = this.state.imageOffset - 1;\r\n offset -= Math.floor((percentX - scrollThreshold) / marginPerImage);\r\n offset = Math.max(offset, 0);\r\n this.setState({ ...this.state, imageOffset: offset });\r\n stateChanged = true;\r\n }\r\n }\r\n\r\n if (scrollThreshold < -percentX) {\r\n // scroll +Y\r\n const lastOffset = this.state.categoryImages.length - numShown;\r\n if (this.state.imageOffset < lastOffset) {\r\n let offset = this.state.imageOffset + 1;\r\n offset -= Math.ceil((percentX + scrollThreshold) / marginPerImage);\r\n offset = Math.min(offset, lastOffset);\r\n this.setState({ ...this.state, imageOffset: offset });\r\n stateChanged = true;\r\n }\r\n }\r\n\r\n document.removeEventListener('mousemove', _mouseMoveHandler);\r\n document.removeEventListener('mouseup', _mouseUpHandler);\r\n if (ele && ele instanceof HTMLElement) {\r\n ele.classList.remove('disable');\r\n ele.classList.remove('touched');\r\n if (stateChanged === false) {\r\n ele.style.marginLeft = `-${marginOffset}%`;\r\n }\r\n }\r\n event.stopPropagation();\r\n };\r\n\r\n document.addEventListener('mousemove', _mouseMoveHandler);\r\n document.addEventListener('mouseup', _mouseUpHandler);\r\n if (ele && ele instanceof HTMLElement) {\r\n ele.classList.add('touched');\r\n }\r\n event.stopPropagation();\r\n };\r\n\r\n const _renderPageLeft = (): JSX.Element | null => {\r\n const _handleClick = (event: React.MouseEvent) => {\r\n this.setState({ ...this.state, imageOffset: this.state.imageOffset - 1 });\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n\r\n if (this.state.imageOffset <= 0 || this.props.navProps.config.pagerType !== pagerType.arrow) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const _renderPageRight = (): JSX.Element | null => {\r\n const _handleClick = (event: React.MouseEvent) => {\r\n this.setState({ ...this.state, imageOffset: this.state.imageOffset + 1 });\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n\r\n if (\r\n this.state.imageOffset >= this.state.categoryImages.length - numShown ||\r\n this.props.navProps.config.pagerType !== pagerType.arrow\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const _renderBubbleContainer = () => {\r\n const _onBubbleClick = (offset: number) => {\r\n this.setState({ ...this.state, imageOffset: offset });\r\n };\r\n\r\n if (this.props.navProps.config.pagerType !== pagerType.bubble) {\r\n return null;\r\n }\r\n\r\n const items = [];\r\n\r\n for (let i = 0; i <= imageCount - numShown; i++) {\r\n const selectedClass = this.state.imageOffset === i ? ' selected' : '';\r\n items.push(\r\n
_onBubbleClick(i)}>
\r\n );\r\n }\r\n\r\n if (items.length <= 1) {\r\n return null;\r\n }\r\n\r\n return
{items}
;\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n {_renderPageLeft()}\r\n {this.state.categoryImages.map(image => (\r\n \r\n \r\n \r\n ))}\r\n {_renderPageRight()}\r\n
\r\n
\r\n {_renderBubbleContainer()}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default navigationMenuView;\r\n","/**\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\n\r\nexport const enum navigationMenuSource {\r\n all = 'all',\r\n retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly'\r\n}\r\n\r\nexport const enum desktopLayoutType {\r\n flat = 'flat',\r\n nested = 'nested'\r\n}\r\n\r\nexport const enum inheritCategoryImages {\r\n never = 'never',\r\n whenEmpty = 'whenEmpty',\r\n always = 'always'\r\n}\r\n\r\nexport const enum desktopImagePosition {\r\n left = 'left',\r\n center = 'center',\r\n right = 'right'\r\n}\r\n\r\nexport const enum pagerType {\r\n arrow = 'arrow',\r\n bubble = 'bubble'\r\n}\r\n\r\nexport interface INavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n enabletopMenu?: boolean;\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 desktopLayoutType?: desktopLayoutType;\r\n inheritCategoryImages?: inheritCategoryImages;\r\n desktopImagePosition?: desktopImagePosition;\r\n pagerType?: pagerType;\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 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 INavigationMenuProps extends Msdyn365.IModule {\r\n resources: INavigationMenuResources;\r\n config: INavigationMenuConfig;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport * as React from 'react';\r\nimport {\r\n desktopImagePosition,\r\n desktopLayoutType,\r\n INavigationMenuProps,\r\n inheritCategoryImages,\r\n navigationMenuSource,\r\n pagerType\r\n} from '../definition-extensions/navigation-menu.ext.props.autogenerated';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Render the Navigation menu.\r\n * @param props - The navigation menu view props.\r\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\r\n */\r\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\r\n return ;\r\n};\r\n\r\n/**\r\n * INavigationMenuViewRootProps.\r\n */\r\ninterface INavigationMenuViewRootProps {\r\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\r\n}\r\n\r\n/**\r\n * Represent navigation menu state interface.\r\n */\r\ninterface INavigationState {\r\n categoryImages: Msdyn365.IImageData[];\r\n imageOffset: number;\r\n screenWidth: number;\r\n isMobile: boolean;\r\n isNavOpen: boolean;\r\n breadcrumb: IMenuItemData[];\r\n}\r\n\r\nclass NavMenu extends React.PureComponent {\r\n private readonly mobileMaxWidth = 1200;\r\n private readonly widthPerImage = 250;\r\n private parentCategoryMap: Map = new Map();\r\n\r\n public constructor(props: INavigationMenuViewRootProps) {\r\n super(props);\r\n\r\n this.state = {\r\n categoryImages: [],\r\n imageOffset: 0,\r\n screenWidth: window.innerWidth,\r\n isMobile: this.isMobile,\r\n isNavOpen: false,\r\n breadcrumb: []\r\n };\r\n\r\n const handleResize = () =>\r\n this.setState({ ...this.state, isMobile: this.isMobile, screenWidth: window.innerWidth, imageOffset: 0 });\r\n window.addEventListener('resize', handleResize);\r\n\r\n for (let menu of this.getMenus()) {\r\n this.mapParentCategory(menu);\r\n }\r\n }\r\n\r\n private get isMobile(): boolean {\r\n return window.innerWidth <= this.mobileMaxWidth;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n return
{this.state.isMobile ? this._renderMobile() : this._renderDesktop()}
;\r\n }\r\n\r\n private mapParentCategory(parent?: IMenuItemData): void {\r\n if (!parent?.subMenu) {\r\n return;\r\n }\r\n\r\n for (let menu of parent.subMenu) {\r\n this.parentCategoryMap.set(menu, parent);\r\n this.mapParentCategory(menu);\r\n }\r\n }\r\n\r\n private getParentCategory(menu?: IMenuItemData): IMenuItemData | undefined {\r\n if (!menu) {\r\n return undefined;\r\n }\r\n\r\n return this.parentCategoryMap.get(menu);\r\n }\r\n\r\n private getMenus(): IMenuItemData[] {\r\n switch (Object(this.props.navProps.config.navigationMenuSource)?.toString()) {\r\n case navigationMenuSource.all:\r\n return this.props.navProps.menuItemData;\r\n case navigationMenuSource.retailServerOnly:\r\n return this.props.navProps.menuItemData.filter(menu => menu.menuSource === 'Retail');\r\n case navigationMenuSource.cmsOnly:\r\n return this.props.navProps.menuItemData.filter(menu => menu.menuSource === 'Cms');\r\n default:\r\n // scream in typscript pain\r\n return [];\r\n }\r\n }\r\n\r\n private _renderDesktop(): JSX.Element | null {\r\n const _handleOutsideClick = () => {\r\n const elements = document.querySelectorAll('.nss-navigation-menu__sub-menu');\r\n for (let i = 0; i < elements.length; i++) {\r\n elements.item(i).classList.remove('shown');\r\n }\r\n\r\n const elements2 = document.querySelectorAll('.nss-navigation-menu a');\r\n for (let i = 0; i < elements2.length; i++) {\r\n elements2.item(i).classList.remove('selected');\r\n }\r\n\r\n document.querySelector('.nss-navigation-menu__wrap')?.classList.remove('open');\r\n this._updateCategoryImage();\r\n };\r\n\r\n const _handleAnchorClick = (event: React.MouseEvent) => {\r\n if (event.target instanceof HTMLElement) {\r\n if (!window.matchMedia('(hover: none)').matches || event.target.classList.contains('touched')) {\r\n return true;\r\n }\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return false;\r\n };\r\n\r\n const _handleTouchEnd = (event: React.TouchEvent, menu: IMenuItemData, level: number) => {\r\n if (event.target instanceof HTMLElement) {\r\n if (event.target.classList.contains('touched')) {\r\n return;\r\n }\r\n\r\n // not selected, emulate hover\r\n _onLinkMouseEnter(event, menu, level);\r\n event.target.classList.add('touched');\r\n document.querySelector('.nss-navigation-menu__wrap')?.classList.add('open');\r\n }\r\n };\r\n\r\n const _onLinkMouseEnter = (\r\n event: React.MouseEvent | React.TouchEvent,\r\n menu: IMenuItemData,\r\n level: number\r\n ) => {\r\n // remove other submenus of the set level\r\n const elements = document.querySelectorAll('.nss-navigation-menu__sub-menu');\r\n for (let i = 0; i < elements.length; i++) {\r\n if (Number(elements.item(i).getAttribute('data-level')) > level) {\r\n elements.item(i).classList.remove('shown');\r\n }\r\n }\r\n\r\n // show the hovered submenu\r\n document.getElementById(`nss-navigation-submenu-details-${menu.id}`)?.classList.add('shown');\r\n\r\n // remove other selections of the set level\r\n const elements2 = document.querySelectorAll('.nss-navigation-menu a');\r\n for (let i = 0; i < elements2.length; i++) {\r\n if (Number(elements2.item(i).getAttribute('data-level')) >= level) {\r\n elements2.item(i).classList.remove('selected');\r\n elements2.item(i).classList.remove('touched');\r\n }\r\n }\r\n\r\n // select the target element\r\n if (event.target instanceof HTMLElement) {\r\n event.target.classList.add('selected');\r\n }\r\n\r\n this._updateCategoryImage(menu);\r\n };\r\n\r\n const _renderMainMenu = (mainMenus: IMenuItemData[]): JSX.Element | null => {\r\n return (\r\n
\r\n {mainMenus.map(menu => (\r\n _onLinkMouseEnter(event, menu, 0)}\r\n onTouchEnd={event => _handleTouchEnd(event, menu, 0)}\r\n onClick={event => _handleAnchorClick(event)}\r\n href={menu.linkURL}\r\n data-level='0'\r\n >\r\n {menu.linkText}\r\n \r\n ))}\r\n
\r\n );\r\n };\r\n\r\n const _renderNestedSubMenu = (parent: IMenuItemData, menus?: IMenuItemData[], level: number = 1): JSX.Element | null => {\r\n if (!menus?.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n {menus.map(menu => (\r\n _onLinkMouseEnter(event, menu, level)}\r\n onTouchEnd={event => _handleTouchEnd(event, menu, level)}\r\n onClick={event => _handleAnchorClick(event)}\r\n href={menu.linkURL}\r\n data-level={level}\r\n >\r\n {menu.linkText}\r\n \r\n ))}\r\n
\r\n {menus.map(menu => _renderNestedSubMenu(menu, menu.subMenu, level + 1))}\r\n \r\n );\r\n };\r\n\r\n const _renderFlatSubMenu = (parent: IMenuItemData, submenus?: IMenuItemData[]): JSX.Element => {\r\n return (\r\n
\r\n {submenus?.map(menu => (\r\n
\r\n _onLinkMouseEnter(event, menu, 1)}\r\n onTouchEnd={event => _handleTouchEnd(event, menu, 1)}\r\n onClick={event => _handleAnchorClick(event)}\r\n href={menu.linkURL}\r\n data-level={1}\r\n >\r\n {menu.linkText}\r\n \r\n {!!menu?.subMenu?.length && (\r\n
\r\n {menu.subMenu.map(sub => (\r\n _onLinkMouseEnter(event, sub, 2)}\r\n onTouchEnd={event => _handleTouchEnd(event, sub, 2)}\r\n onClick={event => _handleAnchorClick(event)}\r\n href={sub.linkURL}\r\n data-level={2}\r\n >\r\n {sub.linkText}\r\n \r\n ))}\r\n
\r\n )}\r\n
\r\n ))}\r\n
\r\n );\r\n };\r\n\r\n const _renderNavbar = (): JSX.Element => {\r\n const _renderNestedRootEnabled = (): JSX.Element => {\r\n const mainMenu = this.getMenus()[0];\r\n const mainSubmenus = this.getMenus()[0].subMenu;\r\n const categoryContent = mainSubmenus?.filter(menu => menu.menuSource === 'Retail');\r\n const cmsContent = mainSubmenus?.filter(menu => menu.menuSource === 'Cms') ?? [];\r\n const submenus: IMenuItemData[] = [];\r\n if (categoryContent) submenus.push(...categoryContent);\r\n for (const menu of cmsContent) {\r\n if (menu.subMenu) {\r\n submenus.push(...menu.subMenu);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {_renderMainMenu([mainMenu, ...cmsContent])}\r\n
\r\n
\r\n {_renderNestedSubMenu(this.getMenus()[0], categoryContent)}\r\n {cmsContent && cmsContent.map(menu => _renderNestedSubMenu(menu, menu.subMenu))}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.left && (\r\n
\r\n )}\r\n {this._getCategoryImages()}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.right && (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _renderNestedRootDisabled = (): JSX.Element => {\r\n const mainMenus = this.getMenus();\r\n\r\n return (\r\n
\r\n {_renderMainMenu(mainMenus)}\r\n
\r\n
\r\n {mainMenus.map(menu => _renderNestedSubMenu(menu, menu.subMenu))}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.left && (\r\n
\r\n )}\r\n {this._getCategoryImages()}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.right && (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _renderFlatRootEnabled = (): JSX.Element => {\r\n const mainMenu = this.getMenus()[0];\r\n const mainSubmenus = this.getMenus()[0].subMenu;\r\n const categoryContent = mainSubmenus?.filter(menu => menu.menuSource === 'Retail');\r\n const cmsContent = mainSubmenus?.filter(menu => menu.menuSource === 'Cms') ?? [];\r\n const submenus: IMenuItemData[] = [];\r\n if (categoryContent) submenus.push(...categoryContent);\r\n for (const menu of cmsContent) {\r\n if (menu.subMenu) {\r\n submenus.push(...menu.subMenu);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {_renderMainMenu([mainMenu, ...cmsContent])}\r\n
\r\n
\r\n {_renderFlatSubMenu(mainMenu, categoryContent)}\r\n {cmsContent.map(menu => _renderFlatSubMenu(menu, menu.subMenu))}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.left && (\r\n
\r\n )}\r\n {this._getCategoryImages(1)}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.right && (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _renderFlatRootDisabled = (): JSX.Element => {\r\n const mainMenus = this.getMenus();\r\n\r\n return (\r\n
\r\n {_renderMainMenu(mainMenus)}\r\n
\r\n
\r\n {mainMenus.map(menu => _renderFlatSubMenu(menu, menu.subMenu))}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.left && (\r\n
\r\n )}\r\n {this._getCategoryImages(1)}\r\n {this.props.navProps.config.desktopImagePosition !== desktopImagePosition.right && (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n if (this.props.navProps.config.desktopLayoutType === desktopLayoutType.flat) {\r\n if (this.props.navProps.config.enabletopMenu) {\r\n return _renderFlatRootEnabled();\r\n }\r\n\r\n return _renderFlatRootDisabled();\r\n }\r\n\r\n if (this.props.navProps.config.enabletopMenu) {\r\n return _renderNestedRootEnabled();\r\n }\r\n\r\n return _renderNestedRootDisabled();\r\n };\r\n\r\n return _renderNavbar();\r\n }\r\n\r\n private _renderMobile(): JSX.Element | null {\r\n const mainMenu = this.getMenus()[0];\r\n const backRef = this.state.breadcrumb[this.state.breadcrumb.length - 1];\r\n\r\n let menus: IMenuItemData[] = [];\r\n if (backRef?.subMenu?.length) {\r\n menus = backRef.subMenu;\r\n } else if (this.props.navProps.config.enabletopMenu) {\r\n menus = mainMenu.subMenu ?? [];\r\n } else {\r\n menus = this.getMenus();\r\n }\r\n\r\n const _renderDrawerIcon = (): JSX.Element | null => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const _renderBackIcon = (): JSX.Element | null => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const _goBack = () => {\r\n const newBreadcrumb = this.state.breadcrumb.slice(0, -1);\r\n this.setState({ ...this.state, breadcrumb: newBreadcrumb });\r\n this._updateCategoryImage(newBreadcrumb[newBreadcrumb.length - 1]);\r\n };\r\n\r\n const _openDrawer = (menu: IMenuItemData) => {\r\n if (menu.subMenu?.length) {\r\n this.setState({ ...this.state, breadcrumb: [...this.state.breadcrumb, menu] });\r\n this._updateCategoryImage(menu);\r\n }\r\n };\r\n\r\n const _handleLinkClick = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n };\r\n\r\n return (\r\n
\r\n {this._getCategoryImages()}\r\n
\r\n {backRef && (\r\n
\r\n {_renderBackIcon()}\r\n \r\n {backRef.linkText}\r\n \r\n
\r\n )}\r\n {menus.map(menu => (\r\n
_openDrawer(menu)}>\r\n \r\n {menu.linkText}\r\n \r\n {!!menu.subMenu?.length && _renderDrawerIcon()}\r\n
\r\n ))}\r\n
\r\n
\r\n );\r\n }\r\n\r\n private checkImage(url?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (!url) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n const img = new Image();\r\n\r\n img.onload = () => resolve(true);\r\n img.onerror = () => resolve(false);\r\n\r\n img.src = url;\r\n });\r\n }\r\n\r\n private async _updateCategoryImage(menu?: IMenuItemData): Promise {\r\n const _resolveCategoryImages = async (menu?: IMenuItemData): Promise => {\r\n const linkText = menu?.linkText ? menu.linkText : '';\r\n const src = generateImageUrl(menu?.imageSource, this.props.navProps.context.actionContext.requestContext.apiSettings);\r\n const promotionalImages: Msdyn365.IImageData[] = [];\r\n\r\n if (this.props.navProps.config.displayCategoryImage) {\r\n if (await this.checkImage(src)) {\r\n promotionalImages.push({ src: src, altText: linkText, href: menu?.linkURL });\r\n }\r\n }\r\n\r\n // Read category and promotional image in one array\r\n if (this.props.navProps.config.displayPromotionalImage && menu?.promotionalContent?.length) {\r\n for (const item of menu.promotionalContent) {\r\n const imageSource = generateImageUrl(\r\n item.image.src,\r\n this.props.navProps.context.actionContext.requestContext.apiSettings\r\n );\r\n if (await this.checkImage(imageSource)) {\r\n promotionalImages.push({\r\n src: imageSource,\r\n altText: item.text,\r\n href: item.linkUrl.destinationUrl\r\n });\r\n }\r\n }\r\n }\r\n\r\n return promotionalImages;\r\n };\r\n\r\n const _shouldEvaluteParent = (images: Msdyn365.IImageData[], menu?: IMenuItemData): boolean => {\r\n if (!menu) {\r\n return false;\r\n }\r\n\r\n if (this.props.navProps.config.inheritCategoryImages === inheritCategoryImages.whenEmpty) {\r\n return images.length === 0;\r\n }\r\n\r\n if (this.props.navProps.config.inheritCategoryImages === inheritCategoryImages.always) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const promotionalImages = await _resolveCategoryImages(menu);\r\n if (this.props.navProps.config.inheritCategoryImages !== inheritCategoryImages.never) {\r\n let parent = this.getParentCategory(menu);\r\n while (_shouldEvaluteParent(promotionalImages, parent)) {\r\n const imagesToAdd = await _resolveCategoryImages(parent);\r\n promotionalImages.push(...imagesToAdd);\r\n parent = this.getParentCategory(parent);\r\n }\r\n }\r\n\r\n this.setState({\r\n categoryImages: promotionalImages?.length ? promotionalImages : [],\r\n imageOffset: 0\r\n });\r\n }\r\n\r\n private _getCategoryImages(maxImagesShown: number = 3) {\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const imageCount = this.state.categoryImages.length;\r\n let numShown = Math.floor(this.state.screenWidth / this.widthPerImage);\r\n numShown = Math.min(numShown, imageCount);\r\n numShown = Math.max(numShown, 1);\r\n numShown = Math.min(numShown, maxImagesShown);\r\n const imageContianerWidth = Math.max(1, imageCount / numShown) * 100;\r\n const marginPerImage = imageContianerWidth / imageCount;\r\n const marginOffset = marginPerImage * this.state.imageOffset;\r\n const style: React.CSSProperties = {\r\n width: `${imageContianerWidth}%`,\r\n marginLeft: `-${marginOffset}%`\r\n };\r\n\r\n const _touchStartHandler = (event: React.TouchEvent) => {\r\n const ele = event.currentTarget;\r\n const startX = event.touches[0].clientX;\r\n const minOffset = 0;\r\n const maxOffset = marginPerImage * (imageCount - numShown);\r\n const scrollSlop = marginPerImage / 2;\r\n const scrollThreshold = marginPerImage / 4;\r\n let deltaX = 0;\r\n let percentX = (deltaX / ele.clientWidth) * 100;\r\n\r\n const _touchMoveHandler = (event: TouchEvent) => {\r\n if (event.touches[0] && ele.parentElement) {\r\n deltaX = event.touches[0].clientX - startX;\r\n percentX = (deltaX / ele.parentElement.clientWidth) * 100;\r\n }\r\n let marginLeft = marginOffset - percentX;\r\n marginLeft = Math.max(marginLeft, minOffset - scrollSlop);\r\n marginLeft = Math.min(marginLeft, maxOffset + scrollSlop);\r\n\r\n if (ele && ele instanceof HTMLElement) {\r\n // disable anchor click if past scroll threshold\r\n if (scrollThreshold < percentX || scrollThreshold < -percentX) {\r\n ele.classList.add('disable');\r\n }\r\n\r\n // scroll the content based on mouse movement\r\n if (marginLeft < 0) {\r\n marginLeft = Math.abs(marginLeft);\r\n ele.style.marginLeft = `${marginLeft}%`;\r\n } else {\r\n ele.style.marginLeft = `-${marginLeft}%`;\r\n }\r\n }\r\n };\r\n\r\n const _touchEndHandler = (event: TouchEvent) => {\r\n let stateChanged = false;\r\n if (event.touches[0] && ele.parentElement) {\r\n deltaX = event.touches[0].clientX - startX;\r\n percentX = (deltaX / ele.parentElement.clientWidth) * 100;\r\n }\r\n\r\n if (scrollThreshold < percentX) {\r\n // scroll -Y\r\n if (this.state.imageOffset > 0) {\r\n let offset = this.state.imageOffset - 1;\r\n offset -= Math.floor((percentX - scrollThreshold) / marginPerImage);\r\n offset = Math.max(offset, 0);\r\n this.setState({ ...this.state, imageOffset: offset });\r\n stateChanged = true;\r\n }\r\n }\r\n\r\n if (scrollThreshold < -percentX) {\r\n // scroll +Y\r\n const lastOffset = this.state.categoryImages.length - numShown;\r\n if (this.state.imageOffset < lastOffset) {\r\n let offset = this.state.imageOffset + 1;\r\n offset -= Math.ceil((percentX + scrollThreshold) / marginPerImage);\r\n offset = Math.min(offset, lastOffset);\r\n this.setState({ ...this.state, imageOffset: offset });\r\n stateChanged = true;\r\n }\r\n }\r\n\r\n document.removeEventListener('touchmove', _touchMoveHandler);\r\n document.removeEventListener('touchend', _touchEndHandler);\r\n if (ele && ele instanceof HTMLElement) {\r\n ele.classList.remove('disable');\r\n ele.classList.remove('touched');\r\n if (stateChanged === false) {\r\n ele.style.marginLeft = `-${marginOffset}%`;\r\n }\r\n }\r\n event.stopPropagation();\r\n };\r\n\r\n document.addEventListener('touchmove', _touchMoveHandler);\r\n document.addEventListener('touchend', _touchEndHandler);\r\n if (ele && ele instanceof HTMLElement) {\r\n ele.classList.add('touched');\r\n }\r\n event.stopPropagation();\r\n };\r\n\r\n const _mouseDownHandler = (event: React.MouseEvent) => {\r\n const ele = event.currentTarget;\r\n const startX = event.clientX;\r\n const minOffset = 0;\r\n const maxOffset = marginPerImage * (imageCount - numShown);\r\n const scrollSlop = marginPerImage / 2;\r\n const scrollThreshold = marginPerImage / 4;\r\n let deltaX = 0;\r\n let percentX = (deltaX / ele.clientWidth) * 100;\r\n\r\n const _mouseMoveHandler = (event: MouseEvent) => {\r\n if (ele.parentElement) {\r\n deltaX = event.clientX - startX;\r\n percentX = (deltaX / ele.parentElement.clientWidth) * 100;\r\n }\r\n let marginLeft = marginOffset - percentX;\r\n marginLeft = Math.max(marginLeft, minOffset - scrollSlop);\r\n marginLeft = Math.min(marginLeft, maxOffset + scrollSlop);\r\n\r\n if (ele && ele instanceof HTMLElement) {\r\n // disable anchor click if past scroll threshold\r\n if (scrollThreshold < percentX || scrollThreshold < -percentX) {\r\n ele.classList.add('disable');\r\n }\r\n\r\n // scroll the content based on mouse movement\r\n if (marginLeft < 0) {\r\n marginLeft = Math.abs(marginLeft);\r\n ele.style.marginLeft = `${marginLeft}%`;\r\n } else {\r\n ele.style.marginLeft = `-${marginLeft}%`;\r\n }\r\n }\r\n };\r\n\r\n const _mouseUpHandler = (event: MouseEvent) => {\r\n let stateChanged = false;\r\n if (ele.parentElement) {\r\n deltaX = event.clientX - startX;\r\n percentX = (deltaX / ele.parentElement.clientWidth) * 100;\r\n }\r\n\r\n if (scrollThreshold < percentX) {\r\n // scroll -Y\r\n if (this.state.imageOffset > 0) {\r\n let offset = this.state.imageOffset - 1;\r\n offset -= Math.floor((percentX - scrollThreshold) / marginPerImage);\r\n offset = Math.max(offset, 0);\r\n this.setState({ ...this.state, imageOffset: offset });\r\n stateChanged = true;\r\n }\r\n }\r\n\r\n if (scrollThreshold < -percentX) {\r\n // scroll +Y\r\n const lastOffset = this.state.categoryImages.length - numShown;\r\n if (this.state.imageOffset < lastOffset) {\r\n let offset = this.state.imageOffset + 1;\r\n offset -= Math.ceil((percentX + scrollThreshold) / marginPerImage);\r\n offset = Math.min(offset, lastOffset);\r\n this.setState({ ...this.state, imageOffset: offset });\r\n stateChanged = true;\r\n }\r\n }\r\n\r\n document.removeEventListener('mousemove', _mouseMoveHandler);\r\n document.removeEventListener('mouseup', _mouseUpHandler);\r\n if (ele && ele instanceof HTMLElement) {\r\n ele.classList.remove('disable');\r\n ele.classList.remove('touched');\r\n if (stateChanged === false) {\r\n ele.style.marginLeft = `-${marginOffset}%`;\r\n }\r\n }\r\n event.stopPropagation();\r\n };\r\n\r\n document.addEventListener('mousemove', _mouseMoveHandler);\r\n document.addEventListener('mouseup', _mouseUpHandler);\r\n if (ele && ele instanceof HTMLElement) {\r\n ele.classList.add('touched');\r\n }\r\n event.stopPropagation();\r\n };\r\n\r\n const _renderPageLeft = (): JSX.Element | null => {\r\n const _handleClick = (event: React.MouseEvent) => {\r\n this.setState({ ...this.state, imageOffset: this.state.imageOffset - 1 });\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n\r\n if (this.state.imageOffset <= 0 || this.props.navProps.config.pagerType !== pagerType.arrow) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const _renderPageRight = (): JSX.Element | null => {\r\n const _handleClick = (event: React.MouseEvent) => {\r\n this.setState({ ...this.state, imageOffset: this.state.imageOffset + 1 });\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n\r\n if (\r\n this.state.imageOffset >= this.state.categoryImages.length - numShown ||\r\n this.props.navProps.config.pagerType !== pagerType.arrow\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const _renderBubbleContainer = () => {\r\n const _onBubbleClick = (offset: number) => {\r\n this.setState({ ...this.state, imageOffset: offset });\r\n };\r\n\r\n if (this.props.navProps.config.pagerType !== pagerType.bubble) {\r\n return null;\r\n }\r\n\r\n const items = [];\r\n\r\n for (let i = 0; i <= imageCount - numShown; i++) {\r\n const selectedClass = this.state.imageOffset === i ? ' selected' : '';\r\n items.push(\r\n
_onBubbleClick(i)}>
\r\n );\r\n }\r\n\r\n if (items.length <= 1) {\r\n return null;\r\n }\r\n\r\n return
{items}
;\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n {_renderPageLeft()}\r\n {this.state.categoryImages.map(image => (\r\n \r\n \r\n \r\n ))}\r\n {_renderPageRight()}\r\n
\r\n
\r\n {_renderBubbleContainer()}\r\n \r\n );\r\n }\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|newsunshine-b2c|views|navigation-menu'] = {\n c: () => require('partner/themes/newsunshine-b2c/views/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['__local__|__local__|themes|newsunshine|views|navigation-menu'] = {\n c: () => require('partner/themes/newsunshine/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;","'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n return it;\n};\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg) : false;\n var element, elementLen;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n elementLen = lengthOfArrayLike(element);\n targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;\n } else {\n doesNotExceedSafeInteger(targetIndex + 1);\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flat` method\n// https://tc39.es/ecma262/#sec-array.prototype.flat\n$({ target: 'Array', proto: true }, {\n flat: function flat(/* depthArg = 1 */) {\n var depthArg = arguments.length ? arguments[0] : undefined;\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity(depthArg));\n return A;\n }\n});\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flat');\n"],"names":["navigationMenuSource","desktopLayoutType","inheritCategoryImages","desktopImagePosition","pagerType","NavMenu","React","constructor","props","super","mobileMaxWidth","widthPerImage","parentCategoryMap","Map","this","state","categoryImages","imageOffset","screenWidth","window","innerWidth","isMobile","isNavOpen","breadcrumb","addEventListener","handleResize","setState","_objectSpread","menu","getMenus","mapParentCategory","render","className","_renderMobile","_renderDesktop","parent","subMenu","set","getParentCategory","get","_Object","Object","navProps","config","toString","all","menuItemData","retailServerOnly","filter","menuSource","cmsOnly","_handleOutsideClick","_document$querySelect","elements","document","querySelectorAll","i","length","item","classList","remove","elements2","querySelector","_updateCategoryImage","_handleAnchorClick","event","target","HTMLElement","matchMedia","matches","contains","preventDefault","stopPropagation","_handleTouchEnd","level","_document$querySelect2","_onLinkMouseEnter","add","_document$getElementB","Number","getAttribute","getElementById","id","_renderMainMenu","mainMenus","map","key","onMouseEnter","onTouchEnd","onClick","href","linkURL","linkText","_renderNestedSubMenu","menus","arguments","undefined","_renderFlatSubMenu","submenus","_menu$subMenu","sub","_renderNavbar","_renderNestedRootEnabled","_mainSubmenus$filter","mainMenu","mainSubmenus","categoryContent","cmsContent","push","onMouseLeave","left","_getCategoryImages","right","_renderFlatRootEnabled","_mainSubmenus$filter2","_renderFlatRootDisabled","flat","enabletopMenu","_renderNestedRootDisabled","_backRef$subMenu","backRef","_mainMenu$subMenu","_openDrawer","_menu$subMenu2","_handleLinkClick","_goBack","newBreadcrumb","slice","xmlns","viewBox","width","fill","d","_menu$subMenu3","checkImage","url","Promise","resolve","reject","img","Image","onload","onerror","src","_resolveCategoryImages","async","_menu$promotionalCont","generateImageUrl","imageSource","context","actionContext","requestContext","apiSettings","promotionalImages","displayCategoryImage","altText","displayPromotionalImage","promotionalContent","image","text","linkUrl","destinationUrl","_shouldEvaluteParent","images","whenEmpty","always","never","imagesToAdd","maxImagesShown","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","imageCount","numShown","Math","floor","min","max","imageContianerWidth","marginPerImage","marginOffset","style","marginLeft","onTouchStart","ele","currentTarget","startX","touches","clientX","maxOffset","scrollSlop","scrollThreshold","deltaX","percentX","clientWidth","_touchMoveHandler","parentElement","abs","_touchEndHandler","stateChanged","offset","lastOffset","ceil","removeEventListener","onMouseDown","_mouseMoveHandler","_mouseUpHandler","_renderPageLeft","arrow","_this$props$navProps$","Msdyn365","assign","gridSettings","request","imageSettings","categoryImageSettings","loadFailureBehavior","role","_renderPageRight","_renderBubbleContainer","_onBubbleClick","bubble","items","selectedClass","binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","__bindings__","viewDictionary","cn","NavigationMenuView","currentLevel","_positionInSetOffset","escapeKey","categoryImageSrc","option","promotionalImage","ArrayExtensions","hasElements","imageSrc","promotionalItemImageSettings","additionalProperties","categoryImage","categoryImageAltText","_handleDropdownToggle","data","parentId","isMobileView","activeMenu","parentMenu","showCategoryImage","_resetFocus","setTimeout","menuNode","current","focus","_handleClickOutside","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","_getCategoryImage","categoryImageUrl","_ref","_categoryImage$imageS","ImageData","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","componentDidMount","MsDyn365","isBrowser","body","componentWillUnmount","_renderMobileMenu","_renderDesktopMenu","Navigation","Module","classnames","menuItem","posinset","_renderDrawerMenu","MenuList","Node","ref","tabIndex","_renderDisplay","setSize","_renderDrawer","_renderLinkMenuItem","toggleButtonText","keyValue","keys","isDrawerOpen","colProps","Drawer","toggleButtonProps","ariaLabel","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","_renderSpanMenuItem","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","_createMenuItemList","forEach","index","subMenus","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","error","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","round","_renderMenu","Button","onFocus","hoverEffect","isParent","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","shouldOpenNewTab","onMouseOver","onTelemetryClick","_renderPromotionalLink","Span","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","locale","nameTranslations","nameTranslation","find","Language","toLowerCase","Text","resizeThrottledEventHandler","addThrottledEvent","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","viewProps","xl","moduleProps","tag","ImageContainer","MobileDescriptionContainer","MobileBackButton","resources","backButtonAriaLabel","MobileDescriptionLabel","renderView","mergedData","categories","result","_constructMenuItemData","cmsNavItems","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","Name","_NavigationMenu$getFr","_NavigationMenu$getFr2","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","Retail","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","openInNewTab","category","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","_getViewport","__decorate","observable","computed","isBackTrack","mobileViewLabelText","_handleGoBack","_shouldAddFocusMenuRef","optionLinkText","menuItemRef","componentDidUpdate","_this$menuItemRef$cur","children","NavMenuConstants","getCategoryImage","alttext","_props$navProps$confi","imageData","NavigationMenuRootDisabled","supportedLevel","four","zero","_toggleNavBar","previousState","_bindDesktopCategoryClick","menuId","categoryImageSource","isOnlyMobile","_closeNavMenu","_this$menuNode$curren","_this$menuNode$curren2","_customUpdateViewport","variant","VariantType","Browser","customResizeThrottledEventHandler","title","hamburgerAriaLabel","_renderCollapseMenu","Collapse","StringExtensions","isNullOrWhitespace","entries","parentMenuId","one","subMenuArray","isSubMenu","_this$props$navProps$2","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","timeout","isHoverEffect","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","imagesContainerKey","join","_item$src","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","module","exports","ReactDOM","$TypeError","TypeError","it","isArray","lengthOfArrayLike","doesNotExceedSafeInteger","flattenIntoArray","original","source","sourceLen","start","depth","mapper","thisArg","element","elementLen","targetIndex","sourceIndex","mapFn","$","toObject","toIntegerOrInfinity","arraySpeciesCreate","proto","depthArg","O","A","addToUnscopables"],"sourceRoot":""}