{"version":3,"file":"static/js/94b86865f6c8ed54d8db.bundle.js","mappings":"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","sources":["webpack://ahi-ecommerce/./src/themes/ahi/views/components/navigation-menu-utilities.tsx?a2ba","webpack://ahi-ecommerce/./src/themes/ahi/views/components/navigation-menu-root-disabled.tsx?ea66","webpack://ahi-ecommerce/./src/themes/ahi/views/components/navigation-menu-root-enabled.tsx?a623","webpack://ahi-ecommerce/./src/themes/ahi/views/navigation-menu.view.tsx?2f9b","webpack://ahi-ecommerce/./lib/navigation-menu/module-registration.js?7039","webpack://ahi-ecommerce/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://ahi-ecommerce/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://ahi-ecommerce/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://ahi-ecommerce/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://ahi-ecommerce/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://ahi-ecommerce/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://ahi-ecommerce/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://ahi-ecommerce/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://ahi-ecommerce/external var \"React\"?0d3b","webpack://ahi-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\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 Menu\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 // {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n //
\n // );\n // }\n\n menuItemList.push({this._renderSubMenu(menuItemData)});\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 Menu\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","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|ahi|views|navigation-menu'] = {\n c: () => require('partner/themes/ahi/views/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|navigation-menu|modules|navigation-menu|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-navigation-menu-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-navigation-menu'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return this.viewport === 'xs' || this.viewport === 'sm';\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation'\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: this.isMobile ? 'listbox' : 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage ?? false,\n showPromotionalContent: this.props.config.displayPromotionalImage ?? false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer: {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer: {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) =>\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n );\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n );\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu ?? false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation ?? '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(\n retailItem?: CategoryHierarchy,\n cmsItem?: ICmsNavItemsData,\n isRetail?: boolean,\n idx?: number,\n addedAllMenu?: boolean\n ): IMenuItemData {\n const locale =\n this.props.context && this.props.context.request && this.props.context.request.locale\n ? this.props.context.request.locale\n : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n const cmsItemText = (cmsItem && cmsItem.linkText) || '';\n const { menuAriaLabel } = this.props.resources;\n\n // Filter category promotional data based on category name\n const promotionalData =\n retailItem &&\n categoryPromotionalContent?.filter(promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItemText,\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab,\n ariaLabel: `${cmsItemText} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({\n linkText: this.props.resources.allCategoryMenuText,\n imageSource: imageSourceUrl,\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\n });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}{' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootEnabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n};\n\nexport default navigationMenuView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["NavMenuConstants","getCategoryImage","props","categoryImage","alttext","categoryImageUrl","generateImageUrl","navProps","context","actionContext","requestContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","undefined","_props$navProps$confi","imageData","src","React","Msdyn365","Object","assign","className","gridSettings","request","imageSettings","config","categoryImageSettings","loadFailureBehavior","role","altText","NavigationMenuRootDisabled","constructor","super","supportedLevel","four","currentLevel","zero","escapeKey","promotionalImage","_toggleNavBar","this","setState","previousState","activeMenu","isNavOpen","_bindDesktopCategoryClick","menuId","isDrawerOpen","drawerKeyValue","state","newPair","_objectSpread","_updateCategoryImage","categoryImageSource","option","linkText","ArrayExtensions","hasElements","promotionalContent","item","imageSource","image","push","text","additionalProperties","linkUrl","destinationUrl","_handleDropdownToggle","data","parentId","isOnlyMobile","isBackTrack","id","mobileViewLabelText","parentMenu","showCategoryImage","_handleGoBack","_handleClickOutside","event","menuNode","current","contains","target","_shouldAddFocusMenuRef","index","optionLinkText","_escFunction","_this$menuNode$curren","keyCode","children","focus","_customUpdateViewport","menuItemRef","menuItemData","subMenu","imagesource","map","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","attributes","getTelemetryAttributes","isMobile","variant","VariantType","Browser","componentDidMount","customResizeThrottledEventHandler","addThrottledEvent","window","document","addEventListener","body","componentDidUpdate","_this$menuItemRef$cur","isMobileView","componentWillUnmount","removeEventListener","render","Node","ref","_renderMobileMenu","Button","onClick","title","resources","hamburgerAriaLabel","_renderCollapseMenu","Collapse","isOpen","_renderDesktopMenu","MenuList","MobileBackButton","MobileDescriptionContainer","MobileDescriptionLabel","Navigation","Module","classnames","tabIndex","_renderDisplay","_renderDrawerLink","linkURL","StringExtensions","isNullOrWhitespace","_renderLinkMenuItem","_renderSpanMenuItem","ListItem","menuItemList","menuItem","_getFromSubMenu","key","_createMenuItemList","_renderSubMenu","parentMenuId","menu","length","one","Number","found","_renderButtonMenuItem","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","subMenus","rootMenu","filter","subMenuItem","MenuTypeIndexId","Retail","isEnableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","three","error","levelClassName","menuOptions","hasOptions","getMenuItem","isHavingSubmenu","Math","round","two","_renderSubMenuDrawer","toString","onMouseOver","_renderMenu","_renderLinkMenuItemLevelOne","_this$props$navProps$3","toggleButtonText","buttonText","keys","colProps","timeout","Drawer","collapseProps","openGlyph","closeGlyph","glyphPlacement","onToggle","menuSubItem","ariaLabel","Link","contentAction","etext","href","shouldOpenNewTab","onTelemetryClick","isHoverEffect","arguments","_renderPromotionalLink","Span","level","isSubmenu","_this$state$categoryI","DivContainer","ImageDivContainer","showPromotionalContent","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","_item$additionalPrope","__decorate","computed","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","allCategoryMenuText","menuSource","MenuSource","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","menuItemDatum","entries","enabletopMenu","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","_positionInSetOffset","categoryImageSrc","imageSrc","promotionalItemImageSettings","categoryImageAltText","_resetFocus","setTimeout","_handleFocusOutside","relatedTarget","_closeSubmenu","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_getCategoryImage","_ref","_categoryImage$imageS","ImageData","Image","_onDrawerChange","drawerState","bind","MsDyn365","isBrowser","posinset","_renderDrawerMenu","setSize","_renderDrawer","keyValue","toggleButtonProps","_renderLinkText","currentPos","_menuItem$subMenu2","_menuItem$subMenu","forEach","i","IsSubMenu","enableMultiSupportMenu","idx","haveSubmenu","onFocus","hoverEffect","isParent","currentItem","submenu","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","navigationMenuSource","locale","nameTranslations","nameTranslation","find","Language","toLowerCase","Text","resizeThrottledEventHandler","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","viewProps","xl","moduleProps","tag","displayCategoryImage","displayPromotionalImage","ImageContainer","backButtonAriaLabel","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","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","openInNewTab","category","imageSourceUrl","nestedChildren","Children","getCategoryUrl","_getViewport","innerWidth","observable","_closeNavMenu","_this$menuNode$curren2","module","exports","ReactDOM"],"sourceRoot":""}