{"version":3,"file":"static/js/1aa54a231b34bbaaf898.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.data.ts?a484","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.props.autogenerated.ts?edf6","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.tsx?3e73","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.view.tsx?ae29","webpack://Msdyn365.Commerce.Online/./src/themes/localy-theme/views/navigation-menu.view.tsx?5393","webpack://Msdyn365.Commerce.Online/./lib/navigation-menu/module-registration.js?7039","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","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/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\n/* eslint-disable no-duplicate-imports */\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","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * INavigationMenu contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum navigationMenuSource {\r\n all = 'all',\r\n retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly'\r\n}\r\n\r\nexport interface INavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n enableMultilevelMenu?: boolean;\r\n enabletopMenu?: boolean;\r\n menuLevelSupport?: number;\r\n rootMenuNavigation?: string;\r\n displayCategoryImage?: boolean;\r\n displayPromotionalImage?: boolean;\r\n categoryPromotionalContent?: ICategoryPromotionalContentData[];\r\n categoryImageSettings?: Msdyn365.IImageSettings;\r\n className?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface INavigationMenuResources {\r\n menuAriaLabel: string;\r\n backButtonAriaLabel: string;\r\n allCategoryMenuText: string;\r\n}\r\n\r\nexport interface ICmsNavItemsData {\r\n linkText?: string;\r\n linkUrl?: Msdyn365.ILinkData;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface ICategoryPromotionalContentData {\r\n categoryName?: string;\r\n image: Msdyn365.IImageData;\r\n text?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface INavigationMenuProps extends Msdyn365.IModule {\r\n resources: INavigationMenuResources;\r\n config: INavigationMenuConfig;\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IGridSettings, IImageSettings, isEmptyOrNullObject, IActionContext } 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 private readonly localyOnlineRecordId = '5637144702';\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 const localyMenuItems =\n this.menuItemList.length > 0\n ? this.menuItemList.filter(obj => obj?.linkURL && obj?.linkURL.includes(this.localyOnlineRecordId))\n : [];\n\n const newMenu = [\n {\n ariaLabel: 'All categories',\n id: 5000,\n imageSource: 'Categories/Menswear.png',\n linkText: 'All Categories',\n linkURL: '/localydemo/fabrikam-fashion/menswear/68719478037.c',\n menuSource: 'Retail',\n promotionalContent: undefined,\n subMenu: localyMenuItems?.length > 0 && localyMenuItems[0]?.subMenu ? localyMenuItems[0]?.subMenu : []\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: newMenu,\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 const displayOrder = retailItem?.DisplayOrder;\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 const allSubmenus = this._getNestedChildren(retailItem, imageSource, addedAllMenu);\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n // linkURL: allSubmenus.length > 0 ? '' : retailItem?.Url,\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: allSubmenus,\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n displayOrder: displayOrder,\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\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n } else {\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n console.log('cccc', this.props.id);\n if (this.viewport === 'xs' || this.viewport === 'sm') {\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 }\n category.Children.map((item: CategoryHierarchy, index) => {\n if (this.viewport === 'xs' || this.viewport === 'sm') {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, true));\n } else {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n }\n });\n }\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\n/* eslint-disable no-duplicate-imports */\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport MsDyn365, { IDictionary, IImageData/*, IImageSettings/*, Image*/ } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n showDownloadAppModal: boolean;\n\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {}, showDownloadAppModal: false };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.toggleDownloadAppModal = this.toggleDownloadAppModal.bind(this);\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n private toggleDownloadAppModal(): void {\n this.setState({ showDownloadAppModal: !this.state.showDownloadAppModal });\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n\n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n const { activeMenu } = this.state;\n // return this.newRenderMenu(MenuList);\n return (\n \n \n { this._renderDisplay()}\n \n \n {this.renderStaticFilters()}\n \n {this.state.showDownloadAppModal && (\n \n
\n \n\n \n\n \n \n
\n
\n
\n

Download Localy app

\n

Find exclusive deals, track order and improve your shopping experience

\n
\n
\n \n
\n
\n
\n
\n \n
\n

Scan to Download

\n
\n
\n\n
\n \n \n
\n
\n )}\n {/* \n {this.renderDownloadApp()}\n */}\n
\n );\n }\n\n // private renderDesktopMenuNew(): JSX.Element[] {\n // const menuItemList: JSX.Element[] = [];\n // // const {ListItem} = this.props;\n // // console.log(\"merged \", ListItem);\n // const ListItem = [\n // {'linkText' : 'link1', subMenu : [\n // {'linkText': 'sublink1'},\n // {'linkText': 'sublink2'},\n // {'linkText': 'sublink3'}\n // ]},\n // {'linkText' : 'link2', subMenu : [\n // {'linkText': 'sublink4'},\n // {'linkText': 'sublink5'},\n // {'linkText': 'sublink6'}\n // ]},\n // {'linkText' : 'link3',subMenu : [\n\n // ]}\n // ]\n // ListItem.forEach((item :any, index: number) => {\n // menuItemList.push(\n // <>\n // \n //
    \n //
  • \n // {item.linkText}\n // {item.subMenu.length > 0 && (\n //
      \n // {item.subMenu.forEach((sub :any, index: number) => {\n //
    • {sub.linkText}
    • \n // })}\n\n //
    \n // )}\n //
  • \n //
\n //
\n // \n\n // );\n // });\n\n // return menuItemList;\n // }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n const customClassName ='category-submenu custom-position-'+posinset;\n return (\n <>\n\n \n\n
\n {/*
Categories
*/}\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n <>\n \n {this._createMenuItemList(item)}\n \n \n\n );\n });\n }\n\n return menuItemList;\n }\n\n // private renderDownloadApp(){\n // return (\n //
\n // \n // Download the app\n //
\n // )\n // }\n\n private renderStaticFilters(){\n return (\n <>\n \n \n )\n }\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return (\n <>\n {/* {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)} */}\n {this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true)}\n );\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n activeMenu?: number,\n setSize?: number,\n posinset?: number\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 \n {option.linkText}\n \n \n );\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem,ImageDivContainer,showPromotionalContent } = this.props;\n //const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage);\n const enableMultiSupportMenu = true;\n const subMenuLevel = 5;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n // Const isParentMenu:boolean= false;\n\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 if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n // @ts-ignore\n let classname='';\n // @ts-ignore\n // this.state.categoryImage.map(item => {\n // if(item.altText===option.linkText){\n // classname='category-image-container active';\n // }else{\n // classname='category-image-container';\n // }\n // });\n\n return (\n\n \n {menuItem}\n {subMenu}\n
\n {\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n
\n\n );\n });\n return this._renderMenu(levelClassName, menuOptions, 5018, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n // private _renderLinkMenuItem(\n // option: IMenuItemData,\n // index?: number,\n // hoverEffect: boolean = true,\n // isParent: boolean = false,\n // setSize?: number,\n // posinset?: number\n // ): JSX.Element | null {\n // const { Link, isMobileView } = this.props;\n // const linkText = option.linkText ? option.linkText : '';\n // const imagesource = option.imageSource ? option.imageSource : '';\n // this.payLoad.contentAction.etext = linkText;\n // const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n // console.log(\"merged option\", option.subMenu && option.subMenu.length > 0);\n\n // return (\n // \n // {option.linkText}\n // {(option.subMenu && option.subMenu) && (\n // <>\n // \n // \n // )}\n // \n // );\n // }\n\n // private renderSecondlevelItems(\n // option: IMenuItemData,\n // index?: number,\n // hoverEffect: boolean = true,\n // isParent: boolean = false,\n // setSize?: number,\n // posinset?: number\n // ): JSX.Element[] {\n // console.log(\"merged options \", option);\n\n // const menuItemList: JSX.Element[] = [];\n // const {isMobileView, 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\n // option.subMenu && option.subMenu.forEach((item, index: number) => {\n // menuItemList.push(\n // <>\n // \n // third---{option.linkText}\n // \n // \n\n // );\n // });\n\n // return menuItemList;\n // }\n\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n // @ts-ignore\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n // @ts-ignore\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n // @ts-ignore\n const subMenu=this.props.menuItemData[0].subMenu.linkText;\n\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n // @ts-ignore\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n let customPromoSrc: any = '';\n let customPromoLink: any = '';\n if (!isMobileView && this.props.config.categoryPromotionalContent) {\n\n customPromoSrc = this.props.config.categoryPromotionalContent[0] ? this.props.config.categoryPromotionalContent[0].image.src : ''\n customPromoLink =this.props.config.categoryPromotionalContent[0] ? this.props.config.categoryPromotionalContent[0].linkUrl.destinationUrl : ''\n }\n\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className :`ms-nav__deafult ms-nav__deafult local-menu-level-${this.currentLevel.toString()}`;\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n
\n
\n {customPromoLink ? (\n \n ) : (\n \n )}\n
\n
\n {menuOptions}\n
\n {/* \n
\n \n
\n
*/}\n\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n let 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\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n return false;\n // this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n // private readonly _resetFocus = () => {\n // if (this.props.isMobileView) {\n // setTimeout(() => {\n // this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n // }, 0);\n // }\n // };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n // if (!this.props.isMobileView) {\n // this.setState({ activeMenu: undefined });\n // }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n // @ts-ignore\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n /* const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };*/\n if (categoryImageUrl !== undefined) {\n // const ImageData: IImageData = { src: categoryImageUrl };\n // if(categoryImage.altText === 'Hair Care'){\n // return \n // }if(categoryImage.altText === 'Beverages'){\n // return \n // }\n return null;\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['navigation-menu'] = {\n c: () => require('partner/modules/navigation-menu/navigation-menu.tsx'),\n $type: 'contentModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'navigation-menu',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/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|navigation-menu|navigation-menu'] = {\n c: () => require('partner/modules/navigation-menu/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['__local__|__local__|themes|localy-theme|views|navigation-menu'] = {\n c: () => require('partner/themes/localy-theme/views/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|navigation-menu|modules|navigation-menu|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-navigation-menu-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-navigation-menu'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}{' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. 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 * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootEnabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n};\n\nexport default navigationMenuView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["MenuTypeIndexId","MenuSource","navigationMenuSource","NavigationMenu","React","constructor","props","super","isRetail","isCMS","localyOnlineRecordId","_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","_localyMenuItems$","_localyMenuItems$2","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","data","telemetry","error","localyMenuItems","filter","obj","linkURL","includes","newMenu","ariaLabel","id","imageSource","linkText","menuSource","promotionalContent","undefined","subMenu","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","cmsNavItems","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","idx","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","displayOrder","DisplayOrder","promotionalData","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","Name","ArrayExtensions","hasElements","Images","Uri","allSubmenus","_getNestedChildren","_NavigationMenu$getFr","_NavigationMenu$getFr2","RSItemIdInit","getFriendlyName","NameTranslations","Url","Retail","CMSItemIdInit","linkUrl","destinationUrl","imageDestinationURL","imageLink","image","src","_getCMSNestedChildren","Cms","shouldOpenNewTab","openInNewTab","category","imageSourceUrl","arguments","nestedChildren","Children","console","log","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","_positionInSetOffset","escapeKey","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","showDownloadAppModal","toggleDownloadAppModal","_renderMobileMenu","_renderDesktopMenu","posinset","_renderDrawerMenu","renderStaticFilters","Modal","toggle","modalClassName","ModalHeader","xmlns","width","height","viewBox","fill","d","stroke","strokeLinecap","strokeLinejoin","ModalBody","ModalFooter","setSize","_renderDrawer","toggleButtonText","keyValue","keys","isDrawerOpen","colProps","customClassName","Drawer","toggleButtonProps","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","customPromoSrc","customPromoLink","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","_resetFocus","setTimeout","categoryImageUrl","ImageData","NavMenuConstants","getCategoryImage","alttext","navProps","_props$navProps$confi","imageData","Msdyn365","NavigationMenuRootDisabled","supportedLevel","four","zero","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","categoryImageSource","isOnlyMobile","_closeNavMenu","_this$menuNode$curren","_this$menuNode$curren2","_customUpdateViewport","variant","VariantType","Browser","customResizeThrottledEventHandler","title","hamburgerAriaLabel","_renderCollapseMenu","Collapse","StringExtensions","isNullOrWhitespace","entries","parentMenuId","menu","one","Number","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","timeout","isHoverEffect","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","module","exports","ReactDOM"],"sourceRoot":""}