{"version":3,"sources":["webpack:///src/index.ts?c6ae","webpack:///src/modules/fabrikam/views/navigation-menu.view.tsx?5991","webpack:///src/modules/navigation-menu/navigation-menu.data.ts?a9f0","webpack:///src/modules/navigation-menu/navigation-menu.tsx?390c","webpack:///external \"React\"?c481","webpack:///./lib/navigation-menu/module-registration.js?7039","webpack:///external \"ReactDOM\"?4b2d","webpack:///src/modules/navigation-menu/navigation-menu.view.tsx?df40"],"names":["NavigationMenuView","React","constructor","props","super","currentLevel","_positionInSetOffset","escapeKey","_updateCategoryImage","categoryImageSrc","option","linkText","promotionalImage","src","altText","ArrayExtensions","hasElements","promotionalContent","map","item","image","imageSrc","promotionalItemImageSettings","imageSettings","push","text","additionalProperties","linkUrl","destinationUrl","this","setState","categoryImage","length","categoryImageAltText","_handleDropdownToggle","data","parentId","isMobileView","activeMenu","id","parentMenu","state","undefined","showCategoryImage","imageSource","_resetFocus","setTimeout","menuNode","current","focus","_handleClickOutside","event","contains","target","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_getCategoryImage","categoryImageUrl","generateImageUrl","context","actionContext","requestContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","ImageData","Image","className","gridSettings","request","config","categoryImageSettings","loadFailureBehavior","role","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","componentDidMount","MsDyn365","isBrowser","document","body","addEventListener","componentWillUnmount","removeEventListener","render","_renderMobileMenu","_renderDesktopMenu","menuItemData","Navigation","Module","classnames","menuItem","posinset","_renderDrawerMenu","MenuList","Node","ref","tabIndex","_renderDisplay","setSize","subMenu","_renderDrawer","_renderLinkMenuItem","toggleButtonText","keyValue","keys","isDrawerOpen","colProps","Drawer","toggleButtonProps","ariaLabel","key","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_renderDrawerLink","linkURL","_renderSpanMenuItem","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","_createMenuItemList","forEach","index","subMenus","i","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","error","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","toString","_renderMenu","Button","onClick","onFocus","hoverEffect","isParent","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","shouldOpenNewTab","onMouseOver","href","onTelemetryClick","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","navigationMenuSource","isMobile","locale","nameTranslations","nameTranslation","find","Language","toLowerCase","Text","resizeThrottledEventHandler","addThrottledEvent","window","_mapData","isEmptyOrNullObject","viewProps","xl","moduleProps","tag","displayCategoryImage","displayPromotionalImage","ImageContainer","MobileDescriptionContainer","MobileBackButton","resources","backButtonAriaLabel","MobileDescriptionLabel","renderView","mergedData","categories","result","_constructMenuItemData","cmsNavItems","_constructTopMenuItemData","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","filter","promoItem","categoryName","Name","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","menuSource","Retail","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","openInNewTab","category","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","_getViewport","innerWidth","__decorate","observable","computed","module","exports","binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","registerSanitizedActionPath","__bindings__","viewDictionary","cn","ReactDOM","isBackTrack","mobileViewLabelText","_handleGoBack","_shouldAddFocusMenuRef","optionLinkText","menuItemRef","componentDidUpdate","children"],"mappings":"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","file":"static/js/105.fed154d68f46793c12d7.chunk.js","sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport NavigationMenu from './modules/navigation-menu/navigation-menu';\nimport NavigationMenuView from './modules/navigation-menu/navigation-menu.view';\n\nexport * from './modules/navigation-menu/navigation-menu';\nexport * from './modules/navigation-menu/navigation-menu.data';\nexport * from './modules/navigation-menu/navigation-menu.props.autogenerated';\nexport * from './modules/navigation-menu/navigation-menu.view';\n\nexport {\n NavigationMenu,\n NavigationMenuView\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 } 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(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\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\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 (\n <>\n {isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\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 /**\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 (\n this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset)\n );\n } else if (item && item.linkText && !item.linkURL) {\n return (\n this._renderSpanMenuItem(item)\n );\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 && 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\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 = subMenus && 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 /**\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(option: IMenuItemData, index?: number, hoverEffect: boolean = true, isParent: boolean = false,\n setSize?: number, posinset?: number): 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 /**\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\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay = !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay = !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 && 'navmenu-multi-level')}>\n { menuOptions }\n \n
\n {\n categoryImageDisplay && this.state.categoryImage && 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({ src: imageSrc, altText: item.text, imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\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 {\n activeMenu: undefined,\n categoryImage: null\n }\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\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\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = 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: '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 {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer:\n {\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(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number, addedAllMenu?: boolean): IMenuItemData {\n const locale = this.props.context && this.props.context.request && this.props.context.request.locale ? this.props.context.request.locale : '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 = retailItem && categoryPromotionalContent?.filter(\n 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\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({ linkText: this.props.resources.allCategoryMenuText, imageSource: imageSourceUrl, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\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\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","module.exports = React;","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu'),\n $type: 'contentModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'navigation-menu',\n p: 'navigation-menu',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['@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 };","module.exports = ReactDOM;","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IPayLoad, ITelemetryContent, Module, Node, onTelemetryClick } 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(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\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\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 \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 ? this.setState({ parentMenu: undefined }) : 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 && 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 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 ? this.setState(\n { parentMenu: item?.id }\n ) : this.setState(\n { parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText }\n );\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\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 = subMenus && 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(option: IMenuItemData, index?: number, hoverEffect: boolean = true, isParent: boolean = false): 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\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\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay = !isMobileView && (showCategoryImage || showPromotionalContent) && !ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const promotionalContentDisplay = !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 && 'navmenu-multi-level')}>\n { menuOptions }\n \n {\n categoryImageDisplay && this.state.categoryImage && 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({ src: imageSrc, altText: item.text, imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\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 {\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n }\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\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"],"sourceRoot":""}