{"version":3,"file":"static/js/7e16dd1aafe826eda0da.bundle.js","mappings":"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","sources":["webpack://bestseller.commerce.online/./src/components/common/Show/show.tsx?db40","webpack://bestseller.commerce.online/./src/themes/only/views/components/navigation-menu-utilities.tsx?9b19","webpack://bestseller.commerce.online/./src/components/common/Each/each.tsx?652f","webpack://bestseller.commerce.online/./src/themes/only/views/components/navigation-menu-root-disabled.tsx?b4c6","webpack://bestseller.commerce.online/./src/themes/only/views/components/navigation-menu-root-enabled.tsx?1340","webpack://bestseller.commerce.online/./src/themes/only/views/navigation-menu.view.tsx?506b","webpack://bestseller.commerce.online/./lib/navigation-menu/module-registration.js?7039","webpack://bestseller.commerce.online/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://bestseller.commerce.online/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://bestseller.commerce.online/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://bestseller.commerce.online/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://bestseller.commerce.online/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://bestseller.commerce.online/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://bestseller.commerce.online/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://bestseller.commerce.online/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://bestseller.commerce.online/external var \"React\"?0d3b","webpack://bestseller.commerce.online/external var \"ReactDOM\"?853b"],"sourcesContent":["import React, { FC, PropsWithChildren } from 'react';\r\n\r\ntype ShowProps = {\r\n condition: boolean;\r\n Otherwise?: FC | JSX.Element;\r\n};\r\nexport const Show = ({ children, condition, Otherwise }: PropsWithChildren): JSX.Element => (\r\n <>{condition ? children : Otherwise !== undefined ? Otherwise : <>}\r\n);\r\n\r\nexport default Show;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\r\n\r\n/**\r\n * INavigationMenuViewRootProps.\r\n */\r\nexport interface INavigationMenuViewRootProps {\r\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\r\n}\r\n\r\n/**\r\n * Represent navigation menu state interface.\r\n */\r\nexport interface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: Msdyn365.IImageData[] | null;\r\n mobileViewLabelText?: string;\r\n drawerKeyValue: Msdyn365.IDictionary;\r\n isOnlyMobile: boolean;\r\n isNavOpen: boolean;\r\n}\r\n\r\n/**\r\n * NavMenuConstants enum.\r\n */\r\nexport enum NavMenuConstants {\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n escapeKey = 27,\r\n rootMenu = 1\r\n}\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Get category image.\r\n * @param props - Navigation menu props.\r\n * @param categoryImage - Category Image.\r\n * @param alttext - AltText String.\r\n * @returns Returns Node.\r\n */\r\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\r\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n","import React, { Children, ReactNode } from 'react';\r\n\r\ntype EachProps = {\r\n items: T[];\r\n Render: (item: T, index: number) => ReactNode;\r\n};\r\n\r\nexport const Each = ({ Render, items }: EachProps): JSX.Element => (\r\n <>{Children.toArray(items.map((item, index) => Render(item, index)))}\r\n);\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n Collapse,\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n ICollapseProps,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\r\nimport Show from '../../../../components/common/Show/show';\r\nimport { Each } from '../../../../components/common/Each/each';\r\nimport {\r\n IGendersSpecificNavigationData,\r\n ISubMenuPromotialMenuItemsData\r\n} from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\r\nimport { NonEmptyArray } from '@msdyn365-commerce-modules/retail-actions/dist/types/utilities/extensions/array-extensions';\r\nimport { IDictionary } from '@msdyn365-commerce/retail-proxy';\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\r\n\r\n/**\r\n *\r\n * NavigationMenuRootDisabled component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuRootDisabled extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n\r\n private readonly supportedLevel: number = NavMenuConstants.four;\r\n\r\n private currentLevel: number = NavMenuConstants.zero;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private readonly attributes?: Msdyn365.IDictionary;\r\n\r\n private customResizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n public constructor(props: INavigationMenuViewRootProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n const { menuItemData } = this.props.navProps;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\r\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\r\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\r\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\r\n const imageSource = item.image.src;\r\n this.promotionalImage.push({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n return null;\r\n });\r\n }\r\n }\r\n\r\n this.state = {\r\n activeMenu: 1,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n drawerKeyValue: {},\r\n isOnlyMobile: this.isOnlyMobile,\r\n categoryImage: this.promotionalImage,\r\n isNavOpen: false\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.navProps.context.request.telemetryPageName!,\r\n this.props.navProps.friendlyName,\r\n this.props.navProps.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n this._customUpdateViewport();\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.currentLevel = 1;\r\n const navbarKey = 'header-nav-mobile';\r\n\r\n const { navProps } = this.props;\r\n const { config, MenuList } = navProps;\r\n const { enableGenderNav = false, gendersSpecificNavigation = [] } = config;\r\n\r\n return (\r\n \r\n {this.state.isOnlyMobile ? (\r\n this._renderMobileMenu()\r\n ) : (\r\n <>\r\n \r\n \r\n \r\n \r\n items={gendersSpecificNavigation}\r\n Render={item => {\r\n const { linkText = '' } = item;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n {\r\n onTelemetryClick(this.telemetryContent, this.payLoad, linkText);\r\n }}\r\n />\r\n );\r\n }}\r\n />\r\n \r\n \r\n {this._renderCollapseMenu()}\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to handle nav bar toggle.\r\n */\r\n private readonly _toggleNavBar = (): void => {\r\n this.setState(previousState => ({\r\n activeMenu: 1,\r\n isNavOpen: !previousState.isNavOpen\r\n }));\r\n };\r\n\r\n private _renderCollapseMenu(): JSX.Element | null {\r\n return (\r\n \r\n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n )}\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { MenuList, Navigation } = this.props.navProps;\r\n\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\r\n return this._renderLinkMenuItem(item);\r\n } else if (!item.linkURL) {\r\n return this._renderSpanMenuItem(item);\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props.navProps;\r\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (ArrayExtensions.hasElements(menuItemData)) {\r\n menuItemData[0].id = 1;\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(menuItem)}\r\n \r\n );\r\n }\r\n } else {\r\n for (const [index, item] of menuItemData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n
\r\n );\r\n }\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\r\n if (!menu) {\r\n return null;\r\n }\r\n\r\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\r\n const item: IMenuItemData = menu[Number(index)];\r\n\r\n if (item.id === this.state.activeMenu) {\r\n if (!NavigationMenuRootDisabled.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\r\n }\r\n return item;\r\n }\r\n const found = this._getFromSubMenu(item.id, item.subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData, shouldRenderSubMenu: boolean | undefined = true): JSX.Element | null {\r\n if (ArrayExtensions.hasElements(menuItemData.subMenu) && shouldRenderSubMenu) {\r\n const { config } = this.props.navProps;\r\n const { enablePromotionalItems = false, subMenuPromotialMenuItems = [] } = config;\r\n\r\n const subMenuData = enablePromotionalItems\r\n ? SortMenuItems(subMenuPromotialMenuItems, menuItemData.subMenu)\r\n : menuItemData.subMenu;\r\n\r\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(subMenuData, menuItemData.id, false);\r\n }\r\n\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(subMenuData, menuItemData.id)}\r\n \r\n );\r\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\r\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\r\n const { navProps } = this.props;\r\n const { config } = navProps;\r\n const { menuLevelSupport = 1, enablePromotionalItems = false, subMenuPromotialMenuItems = [] } = config;\r\n\r\n const shouldRenderSubMenus: boolean = this.currentLevel + 1 < menuLevelSupport;\r\n\r\n if (this.currentLevel > menuLevelSupport) return <>;\r\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\r\n if (activeMenu === NavMenuConstants.rootMenu) {\r\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\r\n }\r\n\r\n const { ListItem } = this.props.navProps;\r\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\r\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n const menuPromotionOptions = GetPromotionalItems(subMenus, subMenuPromotialMenuItems, enablePromotionalItems).map(\r\n (option: IMenuItemData, index: number) => {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = this.getMenuItem(option, index);\r\n } else {\r\n menuItem = null;\r\n }\r\n return (\r\n \r\n {menuItem}\r\n \r\n );\r\n }\r\n );\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = GetNonPromotionalItems(subMenus, subMenuPromotialMenuItems, enablePromotionalItems).map(\r\n (option: IMenuItemData, index: number) => {\r\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\r\n\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.isOnlyMobile && this.currentLevel < Math.round(multiLevelSupportedMenu)) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\r\n } else {\r\n menuItem = this.getMenuItem(option, index);\r\n }\r\n\r\n let subMenu;\r\n const isHavingSubmenu = hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\r\n\r\n if (hasOptions && !this.state.isOnlyMobile) {\r\n if (this.currentLevel >= NavMenuConstants.two) {\r\n subMenu = this._renderSubMenuDrawer(option);\r\n } else if (this.currentLevel <= this.supportedLevel) {\r\n this.currentLevel++;\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n }\r\n\r\n if (isHavingSubmenu && this.state.isOnlyMobile) {\r\n this.currentLevel++;\r\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\r\n }\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n }\r\n );\r\n return this._renderMenu(levelClassName, menuPromotionOptions, menuOptions, isSubMenu);\r\n }\r\n\r\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\r\n }\r\n return menuItem;\r\n }\r\n\r\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\r\n const levelClassName = `level-${this.currentLevel.toString()}`;\r\n const toggleButtonText = menuItem.linkText;\r\n const keyValue = this.state.drawerKeyValue;\r\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\r\n const keys = keyValue;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n let isDrawerOpen = false;\r\n if (keys[menuItem.id!]) {\r\n isDrawerOpen = true;\r\n }\r\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\r\n\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\r\n this.currentLevel++;\r\n if (this.currentLevel < multiLevelSupportedMenu) {\r\n return this._renderSubMenuDrawer(menuSubItem);\r\n }\r\n }\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param menuId -Number.\r\n * @param isDrawerOpen -Boolean.\r\n * @returns Void.\r\n */\r\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\r\n const { drawerKeyValue } = this.state;\r\n const newPair = { [menuId!]: !isDrawerOpen };\r\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\r\n };\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number, customClasses?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props.navProps;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(\r\n level: string,\r\n menuPromotionOptions: JSX.Element[],\r\n menuOptions: JSX.Element[],\r\n isSubmenu?: boolean\r\n ): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\r\n const isCategoryImageDisplay =\r\n !this.state.isOnlyMobile &&\r\n showCategoryImage &&\r\n this.state.categoryImage !== null &&\r\n this.state.categoryImage !== undefined &&\r\n !isSubmenu;\r\n const isPromotionalContentDisplay =\r\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\r\n const divContainerClass =\r\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = NavMenuConstants.one;\r\n const menuLevelSupportClassName =\r\n isCategoryImageDisplay &&\r\n this.props.navProps.config.menuLevelSupport &&\r\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\r\n 'navmenu-multi-level';\r\n\r\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\r\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\r\n return (\r\n \r\n {menuPromotionOptions.length > 0 && (\r\n \r\n {menuPromotionOptions}\r\n \r\n )}\r\n \r\n {menuOptions}\r\n \r\n
\r\n {isCategoryImageDisplay &&\r\n ArrayExtensions.hasElements(categoryImages) &&\r\n categoryImages.map(item => (\r\n \r\n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\r\n {isPromotionalContentDisplay &&\r\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n \r\n ))}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle Category image update.\r\n * @param categoryImageSource - Image source.\r\n * @param option - Menu Item data.\r\n * @returns Returns empty.\r\n */\r\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\r\n const linkText = option.linkText ? option.linkText : '';\r\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n for (const item of option.promotionalContent) {\r\n const imageSource = item.image.src;\r\n promotionalImage.push({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n }\r\n this.setState({\r\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\r\n });\r\n };\r\n\r\n /**\r\n * Handle dropdown toggle.\r\n * @param data - Menu Item data.\r\n * @param parentId - Number.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n if (this.props.navProps.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuRootDisabled.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuRootDisabled.isBackTrack = true;\r\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on click on body.\r\n * @param event - MouseEvent.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n /**\r\n * Function to handle nav menu close.\r\n */\r\n private readonly _closeNavMenu = (): void => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n (this.menuNode.current?.children[0] as HTMLElement).focus();\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on esc key.\r\n * @param event - Event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n (this.menuNode.current?.children[0] as HTMLElement).focus();\r\n }\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState({ isOnlyMobile: this.isOnlyMobile });\r\n };\r\n}\r\n\r\nexport default NavigationMenuRootDisabled;\r\n/**\r\n * Method to sort sub menu in navigation\r\n * @param customSortedArray The sort order of certain items in the navigation menu, items in this array, will be sorted first\r\n * @param unsortedArray Array of unsorted menu items that need sorting\r\n * @returns sorted Array of menuitems in sort order defined in CMS\r\n */\r\nconst SortMenuItems = (\r\n customSortedArray: ISubMenuPromotialMenuItemsData[],\r\n unsortedArray: NonEmptyArray\r\n): NonEmptyArray => {\r\n const sortedArray = unsortedArray.sort((first, second) => {\r\n const indexOfFirstItem: number = customSortedArray.findIndex(\r\n customSortItem => customSortItem.linkUrl.destinationUrl == first.linkURL\r\n );\r\n const indexOfSecondItem: number = customSortedArray.findIndex(\r\n customSortItem => customSortItem.linkUrl.destinationUrl == second.linkURL\r\n );\r\n\r\n const firstElementIsSpecialSorted: boolean = indexOfFirstItem >= 0;\r\n const secondElementIsSepcialSorted: boolean = indexOfSecondItem >= 0;\r\n\r\n if (firstElementIsSpecialSorted && !secondElementIsSepcialSorted) return -1;\r\n if (!firstElementIsSpecialSorted && secondElementIsSepcialSorted) return 1;\r\n if (!firstElementIsSpecialSorted && !secondElementIsSepcialSorted) return 0;\r\n\r\n return indexOfFirstItem - indexOfSecondItem;\r\n });\r\n const hasValues = ArrayExtensions.hasElements(sortedArray);\r\n if (hasValues) {\r\n return sortedArray;\r\n } else {\r\n return unsortedArray;\r\n }\r\n};\r\n\r\nconst IsPromotionalItem = (promotionalItems: ISubMenuPromotialMenuItemsData[], menuItem: IMenuItemData): boolean =>\r\n promotionalItems.some(promotionalItem => promotionalItem.linkUrl.destinationUrl == menuItem.linkURL);\r\n\r\nconst GetPromotionalItems = (subMenus: IMenuItemData[], subMenuPromotialMenuItems: any[], enablePromotionalItems: boolean = true) => {\r\n return enablePromotionalItems ? subMenus.filter(option => IsPromotionalItem(subMenuPromotialMenuItems, option)) : [];\r\n};\r\n\r\nconst GetNonPromotionalItems = (subMenus: IMenuItemData[], subMenuPromotialMenuItems: any[], enablePromotionalItems: boolean = true) => {\r\n return enablePromotionalItems ? subMenus.filter(option => !IsPromotionalItem(subMenuPromotialMenuItems, option)) : subMenus;\r\n};\r\n\r\ninterface GenderSpecificNavigationRenderProps {\r\n item: IGendersSpecificNavigationData;\r\n properties: INavigationMenuViewProps & INavigationMenuProps<{}>;\r\n telementryAttributes: IDictionary | undefined;\r\n telementryClick: () => void;\r\n}\r\n\r\nconst GenderSpecificNavigationRender = ({\r\n item,\r\n properties,\r\n telementryAttributes,\r\n telementryClick\r\n}: GenderSpecificNavigationRenderProps): JSX.Element => {\r\n const { Link } = properties;\r\n const { linkText = '', linkURL: MSLinkObj = { destinationUrl: '' } } = item;\r\n const { destinationUrl } = MSLinkObj;\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n Collapse,\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n ICollapseProps,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\r\n\r\n/**\r\n *\r\n * NavigationMenuRootEnabled component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuRootEnabled extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n\r\n private readonly supportedLevel: number = NavMenuConstants.four;\r\n\r\n private currentLevel: number = NavMenuConstants.zero;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\r\n\r\n private menuItemData: IMenuItemData[] = [];\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private readonly attributes?: Msdyn365.IDictionary;\r\n\r\n private customResizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n public constructor(props: INavigationMenuViewRootProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n const { menuItemData } = this.props.navProps;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\r\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\r\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\r\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\r\n const imageSource = item.image.src;\r\n this.promotionalImage.push({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n return null;\r\n });\r\n }\r\n }\r\n this.state = {\r\n activeMenu: NavMenuConstants.rootMenu,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n drawerKeyValue: {},\r\n isOnlyMobile: this.isOnlyMobile,\r\n categoryImage: this.promotionalImage,\r\n isNavOpen: false\r\n };\r\n\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.navProps.context.request.telemetryPageName!,\r\n this.props.navProps.friendlyName,\r\n this.props.navProps.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n this._customUpdateViewport();\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n this._addShopAllLink();\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.currentLevel = NavMenuConstants.one;\r\n const navbarKey = 'header-nav-mobile';\r\n return (\r\n \r\n {this.state.isOnlyMobile ? (\r\n this._renderMobileMenu()\r\n ) : (\r\n <>\r\n \r\n {this._renderCollapseMenu()}\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to handle nav bar toggle.\r\n */\r\n private readonly _toggleNavBar = (): void => {\r\n this.setState(previousState => ({\r\n activeMenu: NavMenuConstants.rootMenu,\r\n isNavOpen: !previousState.isNavOpen\r\n }));\r\n };\r\n\r\n private _renderCollapseMenu(): JSX.Element | null {\r\n return (\r\n \r\n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\r\n\r\n this.currentLevel = NavMenuConstants.one;\r\n return (\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n )}\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { Navigation } = this.props.navProps;\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\r\n return this._renderLinkMenuItem(item);\r\n } else if (!item.linkURL) {\r\n return this._renderSpanMenuItem(item);\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props.navProps;\r\n let menuItemData: IMenuItemData[] = [];\r\n if (this.state.isOnlyMobile) {\r\n menuItemData = this.menuItemData;\r\n } else {\r\n menuItemData = this.props.navProps.menuItemData;\r\n }\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n let cmsMenuData: IMenuItemData[] | undefined = [];\r\n let retailMenuItemData: IMenuItemData[] | undefined = [];\r\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\r\n\r\n for (const item of retailMenuData) {\r\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\r\n item.subMenu = retailMenuItemData;\r\n }\r\n\r\n for (const item of menuItemData) {\r\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n let menuItem: IMenuItemData | null = {};\r\n for (const menuItemDatum of menuItemData) {\r\n if (menuItemDatum.id === activeMenu) {\r\n menuItem = menuItemDatum;\r\n if (!NavigationMenuRootEnabled.isBackTrack) {\r\n this.setState({\r\n parentMenu: undefined\r\n });\r\n } else {\r\n this.setState({\r\n parentMenu: undefined,\r\n mobileViewLabelText: menuItemDatum.linkText\r\n });\r\n }\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemDatum);\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {` `}\r\n {this._createMenuItemList(menuItem)} {` `}\r\n \r\n );\r\n }\r\n } else {\r\n for (const [index, item] of retailMenuData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n
\r\n );\r\n }\r\n\r\n for (const [index, item] of cmsMenuData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n }\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item?.subMenu;\r\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\r\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\r\n const subMenu: IMenuItemData = subMenus[Number(index)];\r\n let parentMenuId = item?.id;\r\n\r\n if (subMenu.id === this.state.activeMenu) {\r\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\r\n parentMenuId = undefined;\r\n }\r\n\r\n if (!NavigationMenuRootEnabled.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\r\n }\r\n return subMenu;\r\n }\r\n const found = this._getFromSubMenu(subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\r\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\r\n }\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\r\n } else if (!menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\r\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\r\n if (activeMenu === NavMenuConstants.rootMenu) {\r\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\r\n }\r\n\r\n const { ListItem } = this.props.navProps;\r\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\r\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\r\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.isOnlyMobile) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\r\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\r\n menuItem = this.getMenuItem(option, index);\r\n } else {\r\n menuItem = null;\r\n }\r\n let subMenu;\r\n const isHavingSubmenu =\r\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\r\n\r\n if (hasOptions && !this.state.isOnlyMobile) {\r\n if (this.currentLevel >= NavMenuConstants.two) {\r\n subMenu = this._renderSubMenuDrawer(option);\r\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\r\n this.currentLevel++;\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n }\r\n if (isHavingSubmenu && this.state.isOnlyMobile) {\r\n this.currentLevel++;\r\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\r\n }\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\r\n }\r\n\r\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\r\n }\r\n return menuItem;\r\n }\r\n\r\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\r\n const levelClassName = `level-${this.currentLevel.toString()}`;\r\n const toggleButtonText = menuItem.linkText;\r\n const keyValue = this.state.drawerKeyValue;\r\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\r\n const keys = keyValue;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n let isDrawerOpen = false;\r\n if (keys[menuItem.id!]) {\r\n isDrawerOpen = true;\r\n }\r\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\r\n this.currentLevel++;\r\n if (this.currentLevel < multiLevelSupportedMenu) {\r\n return this._renderSubMenuDrawer(menuSubItem);\r\n }\r\n }\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param menuId -Number.\r\n * @param isDrawerOpen -Boolean.\r\n * @returns Void.\r\n */\r\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\r\n const { drawerKeyValue } = this.state;\r\n const newPair = { [menuId!]: !isDrawerOpen };\r\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\r\n };\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props.navProps;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\r\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\r\n const isCategoryImageDisplay =\r\n !this.state.isOnlyMobile &&\r\n showCategoryImage &&\r\n this.state.categoryImage !== null &&\r\n this.state.categoryImage !== undefined &&\r\n !isSubmenu;\r\n const isPromotionalContentDisplay =\r\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\r\n const divContainerClass =\r\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = NavMenuConstants.one;\r\n const menuLevelSupportClassName =\r\n isCategoryImageDisplay &&\r\n this.props.navProps.config.menuLevelSupport &&\r\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\r\n 'navmenu-multi-level';\r\n\r\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\r\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n
\r\n {isCategoryImageDisplay &&\r\n ArrayExtensions.hasElements(categoryImages) &&\r\n categoryImages.map(item => (\r\n \r\n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\r\n {isPromotionalContentDisplay &&\r\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n \r\n ))}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle Category image update.\r\n * @param categoryImageSource - Image source.\r\n * @param option - Menu Item data.\r\n * @returns Returns empty.\r\n */\r\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\r\n const linkText = option.linkText ? option.linkText : '';\r\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n for (const item of option.promotionalContent) {\r\n const imageSource = item.image.src;\r\n promotionalImage.push({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n }\r\n this.setState({\r\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\r\n });\r\n };\r\n\r\n /**\r\n * Handle dropdown toggle.\r\n * @param data - Menu Item data.\r\n * @param parentId - Number.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n if (this.props.navProps.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuRootEnabled.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuRootEnabled.isBackTrack = true;\r\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on click on body.\r\n * @param event - MouseEvent.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Add shop all link for Mobile submenu.\r\n */\r\n private readonly _addShopAllLink = (): void => {\r\n const { menuItemData } = this.props.navProps;\r\n this.menuItemData = menuItemData;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n this.menuItemData[0].subMenu?.map(item => {\r\n const shopAllObject = {};\r\n Object.assign(shopAllObject, { imageSource: item.imageSource });\r\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\r\n Object.assign(shopAllObject, { linkURL: item.linkURL });\r\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\r\n item.subMenu.unshift(shopAllObject);\r\n }\r\n return item;\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n /**\r\n * Function to handle nav menu close.\r\n */\r\n private readonly _closeNavMenu = (): void => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on esc key.\r\n * @param event - Event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState({ isOnlyMobile: this.isOnlyMobile });\r\n };\r\n}\r\n\r\nexport default NavigationMenuRootEnabled;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\r\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\r\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\r\n\r\n/**\r\n * Render the Navigation menu.\r\n * @param props - The navigation menu view props.\r\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\r\n */\r\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\r\n if (props.config.enabletopMenu) {\r\n return ;\r\n }\r\n\r\n return ;\r\n};\r\n\r\nexport default navigationMenuView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu'),\n $type: 'contentModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'navigation-menu',\n p: 'navigation-menu',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|only|views|navigation-menu'] = {\n c: () => require('partner/themes/only/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":["_ref","children","condition","Otherwise","React","undefined","NavMenuConstants","getCategoryImage","props","categoryImage","alttext","categoryImageUrl","generateImageUrl","navProps","context","actionContext","requestContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","_props$navProps$confi","imageData","src","Msdyn365","Object","assign","className","gridSettings","request","imageSettings","config","categoryImageSettings","loadFailureBehavior","role","altText","Each","Render","items","Children","toArray","map","item","index","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","imageSource","image","push","text","additionalProperties","linkUrl","destinationUrl","_handleDropdownToggle","data","parentId","isOnlyMobile","isBackTrack","id","mobileViewLabelText","parentMenu","showCategoryImage","_handleGoBack","_handleClickOutside","event","menuNode","current","contains","target","_shouldAddFocusMenuRef","optionLinkText","_closeNavMenu","_this$menuNode$curren","focus","_escFunction","_this$menuNode$curren2","keyCode","_customUpdateViewport","menuItemRef","menuItemData","subMenu","imagesource","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","MenuList","enableGenderNav","gendersSpecificNavigation","Node","ref","_renderMobileMenu","Button","onClick","title","resources","hamburgerAriaLabel","Show","contentAction","etext","GenderSpecificNavigationRender","properties","telementryAttributes","telementryClick","onTelemetryClick","_renderCollapseMenu","Collapse","isOpen","_renderDesktopMenu","MobileBackButton","MobileDescriptionContainer","MobileDescriptionLabel","Navigation","Module","classnames","tabIndex","_renderDisplay","_renderDrawerLink","linkURL","StringExtensions","isNullOrWhitespace","_renderLinkMenuItem","_renderSpanMenuItem","ListItem","menuItemList","menuItem","_getFromSubMenu","key","_createMenuItemList","entries","parentMenuId","menu","length","one","Number","found","shouldRenderSubMenu","arguments","enablePromotionalItems","subMenuPromotialMenuItems","subMenuData","SortMenuItems","_renderSubMenu","_renderButtonMenuItem","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","menuLevelSupport","shouldRenderSubMenus","subMenus","rootMenu","filter","subMenuItem","MenuTypeIndexId","Retail","isEnableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","three","error","menuPromotionOptions","GetPromotionalItems","getMenuItem","levelClassName","menuOptions","GetNonPromotionalItems","hasOptions","Math","round","isHavingSubmenu","two","_renderSubMenuDrawer","toString","onMouseOver","_renderMenu","_renderLinkMenuItemLevelOne","_this$props$navProps$3","toggleButtonText","buttonText","keys","colProps","timeout","Drawer","collapseProps","openGlyph","closeGlyph","glyphPlacement","onToggle","menuSubItem","ariaLabel","customClasses","Link","href","shouldOpenNewTab","isHoverEffect","_renderPromotionalLink","Span","level","isSubmenu","_this$state$categoryI","DivContainer","ImageDivContainer","showPromotionalContent","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","_item$additionalPrope","__decorate","computed","customSortedArray","unsortedArray","sortedArray","sort","first","second","indexOfFirstItem","findIndex","customSortItem","indexOfSecondItem","firstElementIsSpecialSorted","secondElementIsSepcialSorted","IsPromotionalItem","promotionalItems","some","promotionalItem","MSLinkObj","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","allCategoryMenuText","menuSource","MenuSource","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","menuItemDatum","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","_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","getCategoryUrl","_getViewport","innerWidth","observable","module","exports","ReactDOM"],"sourceRoot":""}