{"version":3,"file":"static/js/ea111b081ac39d2d93af.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/eve-navigation-menu/eve-navigation-menu.data.ts?2329","webpack://Msdyn365.Commerce.Online/./src/modules/eve-navigation-menu/eve-navigation-menu.props.autogenerated.ts?914c","webpack://Msdyn365.Commerce.Online/./src/modules/eve-navigation-menu/eve-navigation-menu.tsx?a686","webpack://Msdyn365.Commerce.Online/./src/modules/eve-navigation-menu/eve-navigation-menu.view.tsx?8061","webpack://Msdyn365.Commerce.Online/./src/themes/copper/views/components/eve-navigation-menu-utilities.tsx?6550","webpack://Msdyn365.Commerce.Online/./src/themes/copper/views/components/eve-navigation-menu-root-disabled.tsx?b3a6","webpack://Msdyn365.Commerce.Online/./src/themes/copper/views/eve-navigation-menu.view.tsx?2f8c","webpack://Msdyn365.Commerce.Online/./lib/eve-navigation-menu/module-registration.js?7f23","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/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 './eve-navigation-menu.props.autogenerated';\r\n\r\nexport interface IEveNavigationMenuData {\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 ariaLabel?: string;\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 * IEveNavigationMenu containerModule 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\nimport * as React from 'react';\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 IEveNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n orderRFQRedirect?: IOrderRFQRedirectData;\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 clientRender?: boolean;\r\n}\r\n\r\nexport interface IEveNavigationMenuResources {\r\n menuAriaLabel: string;\r\n backButtonAriaLabel: string;\r\n allCategoryMenuText: string;\r\n}\r\n\r\nexport interface IOrderRFQRedirectData {\r\n redirect?: boolean;\r\n link?: Msdyn365.ILinkData;\r\n newTab?: boolean;\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 IEveNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IEveNavigationMenuResources;\r\n config: IEveNavigationMenuConfig;\r\n slots: {\r\n quickOrder: React.ReactNode[];\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\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, IEveNavigationMenuData, MenuSource, MenuTypeIndexId } from './eve-navigation-menu.data';\r\nimport { ICmsNavItemsData, IEveNavigationMenuProps, ISubMenusData, navigationMenuSource } from './eve-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IEveNavigationMenuProps {\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: IEveNavigationMenuProps) {\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 },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag: 'ul',\r\n role: this.isMobile ? 'listbox' : '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 const cmsItemText = (cmsItem && cmsItem.linkText) || '';\r\n const { menuAriaLabel } = this.props.resources;\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 ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\r\n } as IMenuItemData;\r\n }\r\n return {\r\n id: NavigationMenu.CMSItemIdInit++,\r\n linkText: cmsItemText,\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 ariaLabel: `${cmsItemText} ${menuAriaLabel}`\r\n } as IMenuItemData;\r\n }\r\n\r\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || category.Children.length === 0) {\r\n return [];\r\n }\r\n if (!this.props.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 category.Children.map((item: CategoryHierarchy, index) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\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.\r\n * All rights reserved. See LICENSE 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 './eve-navigation-menu';\r\nimport { IMenuItemData } from './eve-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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\n\r\nimport { IEveNavigationMenuProps } from '../../definition-extensions/eve-navigation-menu.ext.props.autogenerated';\r\nimport { INavigationMenuViewProps } from '../../../../modules/eve-navigation-menu/eve-navigation-menu';\r\n\r\n/**\r\n * INavigationMenuViewRootProps.\r\n */\r\nexport interface INavigationMenuViewRootProps {\r\n navProps: INavigationMenuViewProps & IEveNavigationMenuProps<{}>;\r\n}\r\n\r\n/**\r\n * Represent navigation menu state interface.\r\n */\r\nexport interface INavigationState {\r\n showQuickOrder: boolean;\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n showMenu: boolean;\r\n activeMenuId: number;\r\n categoryImage?: Msdyn365.IImageData[] | null;\r\n mobileViewLabelText?: string;\r\n drawerKeyValue: Msdyn365.IDictionary;\r\n isOnlyMobile: boolean;\r\n isNavOpen: boolean;\r\n}\r\n\r\n/**\r\n * NavMenuConstants enum.\r\n */\r\nexport enum NavMenuConstants {\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n escapeKey = 27,\r\n rootMenu = 1\r\n}\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Get category image.\r\n * @param props - Navigation menu props.\r\n * @param categoryImage - Category Image.\r\n * @param alttext - AltText String.\r\n * @returns Returns Node.\r\n */\r\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\r\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n Collapse,\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n ICollapseProps,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './eve-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({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n return null;\r\n });\r\n }\r\n }\r\n\r\n this.state = {\r\n showQuickOrder: false,\r\n activeMenu: 1,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n activeMenuId: -1,\r\n drawerKeyValue: {},\r\n isOnlyMobile: this.isOnlyMobile,\r\n categoryImage: this.promotionalImage,\r\n isNavOpen: false,\r\n showMenu: false\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.navProps.context.request.telemetryPageName!,\r\n this.props.navProps.friendlyName,\r\n this.props.navProps.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n this._customUpdateViewport();\r\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n window.onresize = () => {\r\n if (this.state.showQuickOrder && innerWidth <= 992) this.setState({ showQuickOrder: false });\r\n };\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 {/* This script is here to be loaded along with html */}\r\n {var l;let e=!0;const t=document.querySelector(\"#subheader\"),o=document.querySelector(\"ul.cps-subfooter\"),{y:u,height:n}=null!==(l=null==t?void 0:t.getBoundingClientRect())&&void 0!==l?l:{};e&&(null!=u?u:0)<0&&((null==t?void 0:t.style)&&(t.style.boxShadow=\"0px 1px 5px #999\"),(null==t?void 0:t.style)&&(t.style.top=\"0\"),(null==o?void 0:o.style)&&(o.style.right=\"0\"),e=!1),e&&(null!=u?u:0)>0&&((null==t?void 0:t.style)&&(t.style.boxShadow=\"unset\"),(null==t?void 0:t.style)&&(t.style.top=`-${n}px`),(null==o?void 0:o.style)&&(o.style.right=\"-90px\"))};'\r\n }}\r\n />\r\n {this.state.isOnlyMobile ? (\r\n this._renderMobileMenu()\r\n ) : (\r\n <>\r\n \r\n {this._renderCollapseMenu()}\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n // If need to change this snippet, uncomment, develop only the part inside brackets, compile manually\r\n // then copy the compiled javascript to __html in the script tag inside render method\r\n\r\n // document.body.onscroll = () => {\r\n // let navFlag = true;\r\n // const subheader = document.querySelector('#subheader');\r\n // const subfooter = document.querySelector('ul.cps-subfooter');\r\n // const { y, height } = subheader?.getBoundingClientRect() ?? {};\r\n // if (navFlag && (y ?? 0) < 0) {\r\n // if (subheader?.style) subheader.style.boxShadow = '0px 1px 5px #999';\r\n // if (subheader?.style) subheader.style.top = '0';\r\n // if (subfooter?.style) subfooter.style.right = '0';\r\n // navFlag = false;\r\n // }\r\n // if (navFlag && (y ?? 0) > 0) {\r\n // if (subheader?.style) subheader.style.boxShadow = 'unset';\r\n // if (subheader?.style) subheader.style.top = `-${height}px`;\r\n // if (subfooter?.style) subfooter.style.right = '-90px';\r\n // }\r\n // }\r\n\r\n /**\r\n * Function to handle nav bar toggle.\r\n */\r\n private readonly _toggleNavBar = (): void => {\r\n this.setState(previousState => ({\r\n activeMenu: 1,\r\n isNavOpen: !previousState.isNavOpen\r\n }));\r\n };\r\n\r\n private _renderCollapseMenu(): JSX.Element | null {\r\n return (\r\n \r\n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n )}\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { MenuList, Navigation } = this.props.navProps;\r\n\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\r\n return this._renderLinkMenuItem(item);\r\n } else if (!item.linkURL) {\r\n return this._renderSpanMenuItem(item);\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props.navProps;\r\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (ArrayExtensions.hasElements(menuItemData)) {\r\n menuItemData[0].id = 1;\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {` `}\r\n {this._createMenuItemList(menuItem, false)} {` `}\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, index * 1 === menuItemData.length - 1)}\r\n
\r\n );\r\n }\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\r\n if (!menu) {\r\n return null;\r\n }\r\n\r\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\r\n const item: IMenuItemData = menu[Number(index)];\r\n\r\n if (item.id === this.state.activeMenu) {\r\n if (!NavigationMenuRootDisabled.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\r\n }\r\n return item;\r\n }\r\n const found = this._getFromSubMenu(item.id, item.subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData, containQuickOrder: boolean): 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, undefined, undefined, containQuickOrder)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, undefined, containQuickOrder)}\r\n {this.state.showQuickOrder && containQuickOrder ? this._renderQuickOrder() : null}\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(\r\n subMenuArray?: IMenuItemData[],\r\n activeMenu?: number,\r\n isSubMenu?: boolean,\r\n containQuickOrder?: boolean\r\n ): 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 return null;\r\n }\r\n\r\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\r\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.isOnlyMobile) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\r\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\r\n menuItem = this.getMenuItem(option, index);\r\n } else {\r\n menuItem = null;\r\n }\r\n let subMenu;\r\n const isHavingSubmenu =\r\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\r\n\r\n if (hasOptions && !this.state.isOnlyMobile) {\r\n if (this.currentLevel >= NavMenuConstants.two) {\r\n subMenu = this._renderSubMenuDrawer(option);\r\n } else if (this.currentLevel <= this.supportedLevel) {\r\n this.currentLevel++;\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n }\r\n\r\n if (isHavingSubmenu && this.state.isOnlyMobile) {\r\n this.currentLevel++;\r\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\r\n }\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n return this._renderMenu(levelClassName, menuOptions, isSubMenu, containQuickOrder);\r\n }\r\n\r\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\r\n }\r\n return menuItem;\r\n }\r\n\r\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\r\n const levelClassName = `level-${this.currentLevel.toString()}`;\r\n const toggleButtonText = menuItem.linkText;\r\n const keyValue = this.state.drawerKeyValue;\r\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\r\n const keys = keyValue;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n let isDrawerOpen = false;\r\n if (keys[menuItem.id!]) {\r\n isDrawerOpen = true;\r\n }\r\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\r\n\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\r\n this.currentLevel++;\r\n if (this.currentLevel < multiLevelSupportedMenu) {\r\n return this._renderSubMenuDrawer(menuSubItem);\r\n }\r\n }\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param menuId -Number.\r\n * @param isDrawerOpen -Boolean.\r\n * @returns Void.\r\n */\r\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\r\n const { drawerKeyValue } = this.state;\r\n const newPair = { [menuId!]: !isDrawerOpen };\r\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\r\n };\r\n\r\n private _renderButtonMenuItem(\r\n option: IMenuItemData,\r\n activeMenu?: number,\r\n index?: number,\r\n containQuickOrder?: boolean\r\n ): JSX.Element | null {\r\n const { Link, config } = this.props.navProps;\r\n const { orderRFQRedirect } = config;\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\r\n if (orderRFQRedirect?.redirect && containQuickOrder) {\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n return (\r\n {\r\n this.setState(state => ({\r\n ...state,\r\n activeMenuId: option.id ?? -1,\r\n showQuickOrder: !!containQuickOrder && !state.showQuickOrder,\r\n showMenu: state.activeMenuId !== option.id ? true : !state.showMenu\r\n }));\r\n this._handleDropdownToggle(option, activeMenu)();\r\n onTelemetryClick(this.telemetryContent, this.payLoad, linkText)();\r\n }}\r\n onMouseEnter={() => {\r\n if (window.innerWidth > 992 && !containQuickOrder) {\r\n this.setState(state => ({ ...state, activeMenuId: option.id ?? -1, showMenu: true }));\r\n this._handleDropdownToggle(option, activeMenu)();\r\n }\r\n }}\r\n onMouseLeave={() => {\r\n if (window.innerWidth > 992 && !containQuickOrder) {\r\n this.setState(state => ({ ...state, activeMenuId: -1, showMenu: false }));\r\n this._handleDropdownToggle(option, activeMenu)();\r\n }\r\n }}\r\n aria-haspopup={\r\n (!containQuickOrder && this.state.showMenu && this.state.activeMenu === option.id) ||\r\n (containQuickOrder && this.state.showQuickOrder)\r\n }\r\n aria-expanded={\r\n (!containQuickOrder && this.state.showMenu && this.state.activeMenu === option.id) ||\r\n (containQuickOrder && this.state.showQuickOrder)\r\n }\r\n data-parent={activeMenu}\r\n aria-label={this.state.isOnlyMobile ? option.ariaLabel : undefined}\r\n target={option.shouldOpenNewTab ? '_blank' : undefined}\r\n >\r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props.navProps;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderQuickOrder(): JSX.Element | null {\r\n const { MenuList } = this.props.navProps;\r\n const [QuickOrder] = this.props.navProps.slots?.quickOrder ?? [];\r\n const isDesktop = window.innerWidth > 992;\r\n const suffixClassname = isDesktop ? 'desktop' : 'mobile';\r\n return (\r\n \r\n {QuickOrder\r\n ? React.cloneElement(QuickOrder as React.ReactElement, {\r\n closeQuickOrder: () => this.setState(state => ({ ...state, showQuickOrder: false, showMenu: false }))\r\n })\r\n : null}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean, containQuickOrder?: boolean): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\r\n const isCategoryImageDisplay =\r\n !this.state.isOnlyMobile &&\r\n showCategoryImage &&\r\n this.state.categoryImage !== null &&\r\n this.state.categoryImage !== undefined &&\r\n !isSubmenu;\r\n const isPromotionalContentDisplay =\r\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\r\n const divContainerClass =\r\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = NavMenuConstants.one;\r\n const menuLevelSupportClassName =\r\n isCategoryImageDisplay &&\r\n this.props.navProps.config.menuLevelSupport &&\r\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\r\n 'navmenu-multi-level';\r\n\r\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\r\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\r\n // const [QuickOrder] = this.props.navProps.slots?.quickOrder ?? [];\r\n // if (containQuickOrder) {\r\n // const isDesktop = window.innerWidth > 992;\r\n // const suffixClassname = isDesktop ? 'desktop' : 'mobile';\r\n // return this.state.showQuickOrder ? (\r\n // {\r\n // if (isDesktop) {\r\n // this.setState(state => ({ ...state, showMenu: true }));\r\n // }\r\n // }}\r\n // onMouseLeave={() => {\r\n // if (isDesktop) {\r\n // this.setState(state => ({ ...state, showMenu: true }));\r\n // }\r\n // }}\r\n // className={classnames(\r\n // `cps-navigation-menu__quick-order--${suffixClassname}`,\r\n // MenuList.className,\r\n // level,\r\n // isCategoryImageDisplay && 'havecateImage',\r\n // menuLevelSupportClassName\r\n // )}\r\n // data-ignore-parent-css\r\n // >\r\n // {QuickOrder\r\n // ? React.cloneElement(QuickOrder as React.ReactElement, {\r\n // closeQuickOrder: () => this.setState(state => ({ ...state, showQuickOrder: false, showMenu: false }))\r\n // })\r\n // : null}\r\n // \r\n // ) : null;\r\n // }\r\n if (!this.state.showMenu || containQuickOrder) return null;\r\n return (\r\n {\r\n if (window.innerWidth > 992) {\r\n this.setState(state => ({ ...state, showMenu: true }));\r\n }\r\n }}\r\n onMouseLeave={() => {\r\n if (window.innerWidth > 992) {\r\n this.setState(state => ({ ...state, showMenu: false }));\r\n }\r\n }}\r\n >\r\n \r\n {menuOptions}\r\n \r\n
\r\n {isCategoryImageDisplay &&\r\n ArrayExtensions.hasElements(categoryImages) &&\r\n categoryImages.map(item => (\r\n \r\n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\r\n {isPromotionalContentDisplay &&\r\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n \r\n ))}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle Category image update.\r\n * @param categoryImageSource - Image source.\r\n * @param option - Menu Item data.\r\n * @returns Returns empty.\r\n */\r\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\r\n const linkText = option.linkText ? option.linkText : '';\r\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n for (const item of option.promotionalContent) {\r\n const imageSource = item.image.src;\r\n promotionalImage.push({\r\n src: imageSource,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n }\r\n this.setState({\r\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\r\n });\r\n };\r\n\r\n /**\r\n * Handle dropdown toggle.\r\n * @param data - Menu Item data.\r\n * @param parentId - Number.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number, containQuickOrder?: boolean) => () => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState(state => ({\r\n ...state,\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n }));\r\n if (this.props.navProps.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuRootDisabled.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuRootDisabled.isBackTrack = true;\r\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on click on body.\r\n * @param event - MouseEvent.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ showMenu: false, showQuickOrder: false, activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ showMenu: false, showQuickOrder: false, activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n /**\r\n * Function to handle nav menu close.\r\n */\r\n private readonly _closeNavMenu = (): void => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n (this.menuNode.current?.children[0] as HTMLElement).focus();\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on esc key.\r\n * @param event - Event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n (this.menuNode.current?.children[0] as HTMLElement).focus();\r\n }\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState(state => ({ ...state, isOnlyMobile: false }));\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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport * as React from 'react';\r\n\r\nimport { IEveNavigationMenuProps } from '../definition-extensions/eve-navigation-menu.ext.props.autogenerated';\r\nimport NavigationMenuRootDisabled from './components/eve-navigation-menu-root-disabled';\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 & IEveNavigationMenuProps<{}>): JSX.Element => {\r\n return ;\r\n};\r\n\r\nexport default navigationMenuView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['eve-navigation-menu'] = {\n c: () => require('partner/modules/eve-navigation-menu/eve-navigation-menu.tsx'),\n $type: 'containerModule',\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: 'eve-navigation-menu',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/eve-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|eve-navigation-menu|eve-navigation-menu'] = {\n c: () => require('partner/modules/eve-navigation-menu/eve-navigation-menu.view.tsx'),\n cn: '__local__-__local__-eve-navigation-menu'\n };\nviewDictionary['__local__|__local__|themes|copper|views|eve-navigation-menu'] = {\n c: () => require('partner/themes/copper/views/eve-navigation-menu.view.tsx'),\n cn: '__local__-__local__-eve-navigation-menu'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\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","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","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","data","telemetry","error","viewProps","_objectSpread","imageSettings","viewports","xs","q","w","h","xl","lazyload","gridSettings","Navigation","moduleProps","className","classnames","tag","role","MenuList","ListItem","showCategoryImage","displayCategoryImage","showPromotionalContent","displayPromotionalImage","Link","DivContainer","ImageDivContainer","Button","onClick","ImageContainer","Span","MobileDescriptionContainer","MobileBackButton","resources","backButtonAriaLabel","MobileDescriptionLabel","isMobileView","menuItemData","renderView","mergedData","categories","result","map","index","push","_constructMenuItemData","undefined","cmsNavItems","idx","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","enabletopMenu","mergedRootMenuData","topMenu","id","linkText","rootMenuNavigation","linkURL","imageSource","subMenu","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","filter","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","Name","_NavigationMenu$getFr","_NavigationMenu$getFr2","ArrayExtensions","hasElements","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","promotionalContent","menuSource","Retail","ariaLabel","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","NavigationMenuRootDisabled","supportedLevel","four","zero","escapeKey","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","isDrawerOpen","drawerKeyValue","newPair","categoryImageSource","containQuickOrder","isOnlyMobile","navProps","showMenu","showQuickOrder","_closeNavMenu","_this$menuNode$curren","_escFunction","_this$menuNode$curren2","keyCode","_customUpdateViewport","activeMenuId","variant","VariantType","Browser","customResizeThrottledEventHandler","onresize","dangerouslySetInnerHTML","__html","_renderMobileMenu","title","hamburgerAriaLabel","_renderCollapseMenu","Collapse","isOpen","_renderDesktopMenu","_renderDrawerLink","StringExtensions","isNullOrWhitespace","entries","parentMenuId","menu","one","Number","_renderQuickOrder","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","toggleButtonText","buttonText","keys","colProps","timeout","Drawer","collapseProps","openGlyph","closeGlyph","glyphPlacement","onToggle","menuSubItem","orderRFQRedirect","_orderRFQRedirect$lin","_orderRFQRedirect$lin2","redirect","link","newTab","_option$id","onMouseEnter","_option$id2","onMouseLeave","isHoverEffect","_this$props$navProps$4","_this$props$navProps$5","QuickOrder","slots","quickOrder","suffixClassname","closeQuickOrder","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","getCategoryImage","alttext","categoryImageUrl","_props$navProps$confi","imageData","Msdyn365","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","module","exports","ReactDOM"],"sourceRoot":""}