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