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