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