{"version":3,"file":"static/js/72f197c0b09da7a675eb.bundle.js","mappings":"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","sources":["webpack://Bayer.Commerce.Online/./src/themes/bayerscustomtheme/views/navigation-menu.view.tsx?1665","webpack://Bayer.Commerce.Online/./lib/navigation-menu/module-registration.js?7039","webpack://Bayer.Commerce.Online/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://Bayer.Commerce.Online/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://Bayer.Commerce.Online/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://Bayer.Commerce.Online/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://Bayer.Commerce.Online/external var \"React\"?0d3b","webpack://Bayer.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n ICollapseProps,\r\n IDrawerState,\r\n IPayLoad,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: IImageData[] | null;\r\n categoryImageAltText: string;\r\n drawerKeyValue: IDictionary;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private currentLevel: number = 0;\r\n\r\n private readonly _positionInSetOffset: number = 1;\r\n\r\n private readonly escapeKey: number = 27;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._escFunction = this._escFunction.bind(this);\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n document.body.addEventListener('focusout', this._handleFocusOutside);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\r\n }\r\n\r\n /**\r\n * Method to render mobile menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderMobileMenu(): JSX.Element {\r\n const { isMobileView, menuItemData, Navigation } = this.props;\r\n return (\r\n \r\n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\r\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\r\n })}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render desktop menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { MenuList, Navigation } = this.props;\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render drawer menu.\r\n * @param menuItem -Menuitem data.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\r\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\r\n return this._renderDrawer(menuItem, setSize, posinset);\r\n }\r\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\r\n }\r\n\r\n /**\r\n * Method to render drawer component.\r\n * @param menuItem -Menuitem data.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\r\n const toggleButtonText = menuItem.linkText;\r\n const keyValue = this.state.drawerKeyValue;\r\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\r\n const keys = keyValue !== undefined ? keyValue : {};\r\n\r\n let isDrawerOpen = false;\r\n if (keys[buttonText]) {\r\n isDrawerOpen = true;\r\n }\r\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\r\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\r\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\r\n }\r\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render link.\r\n * @param linkText -Text on Menu link.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render drawer link.\r\n * @param item -Single Menuitem.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\r\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\r\n } else if (item && item.linkText && !item.linkURL) {\r\n return this._renderSpanMenuItem(item);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to generate menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (const menuItemDatum of menuItemData) {\r\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\r\n menuItem = menuItemDatum;\r\n this.setState({ parentMenu: undefined });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem &&\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}{' '}\r\n \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n /**\r\n * Method to get data for submenu.\r\n * @param item -Single Menuitem.\r\n * @returns IMenuItemData.\r\n */\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n this.setState({ parentMenu: item?.id });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to create item list.\r\n * @param menuItemData -Single Menuitem.\r\n * @returns Jsx element.\r\n */\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\r\n }\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\r\n const subMenuLevel = 3;\r\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\r\n\r\n // Const isParentMenu:boolean= false;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions =\r\n subMenus &&\r\n subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = option.subMenu && option.subMenu.length > 0;\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\r\n }\r\n let subMenu;\r\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\r\n if (haveSubmenu) {\r\n this.currentLevel++;\r\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\r\n }\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\r\n }\r\n\r\n /**\r\n * Method to render button menu item.\r\n * @param option -Single Menuitem.\r\n * @param activeMenu -Active menu number.\r\n * @param index -Active menu index.\r\n * @returns Jsx element.\r\n */\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render link menu item.\r\n * @param option -Single Menuitem.\r\n * @param index -Active menu index.\r\n * @param hoverEffect -Active menu effect.\r\n * @param isParent -Is parent menu.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderLinkMenuItem(\r\n option: IMenuItemData,\r\n index?: number,\r\n hoverEffect: boolean = true,\r\n isParent: boolean = false,\r\n setSize?: number,\r\n posinset?: number\r\n ): JSX.Element | null {\r\n const { Link, isMobileView } = this.props;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render promotional link.\r\n * @param linkText -Link text.\r\n * @param linkUrl -Link url.\r\n * @returns Jsx element.\r\n */\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to render span menu item.\r\n * @param option -Single Menu Item.\r\n * @param index -Index.\r\n * @param isParent -Is parent menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render menu.\r\n * @param level -Menu level.\r\n * @param menuOptions -Menu lists.\r\n * @param currentItem -Menu current.\r\n * @param submenu -Mneu has submenu or not.\r\n * @returns Jsx element.\r\n */\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\r\n const categoryImageDisplay =\r\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\r\n const promotionalContentDisplay =\r\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\r\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = 1;\r\n return (\r\n \r\n 2 &&\r\n 'navmenu-multi-level'\r\n )}\r\n >\r\n {menuOptions}\r\n \r\n
\r\n {categoryImageDisplay &&\r\n this.state.categoryImage &&\r\n this.state.categoryImage.map(item => (\r\n \r\n {this.state.categoryImage && this._getCategoryImage(item)}\r\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n \r\n ))}\r\n
\r\n \r\n );\r\n }\r\n\r\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\r\n const linkText = option && option.linkText ? option.linkText : '';\r\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n option.promotionalContent.map(item => {\r\n if (item && item.image) {\r\n const imageSrc = item.image.src;\r\n const promotionalItemImageSettings = item.image.imageSettings;\r\n promotionalImage.push({\r\n src: imageSrc,\r\n altText: item.text,\r\n imageSettings: promotionalItemImageSettings,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n });\r\n }\r\n this.setState({\r\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\r\n categoryImageAltText: linkText\r\n });\r\n };\r\n\r\n /**\r\n * Method to handle dropdwon change.\r\n * @param data -Menuitem data.\r\n * @param parentId -Menu parent.\r\n * @returns Jsx element.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n if (this.props.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n /**\r\n * Method to call when focus lost from menu.\r\n */\r\n private readonly _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\r\n this.setState({\r\n activeMenu: undefined,\r\n categoryImage: null\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleFocusOutside = (event: FocusEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\r\n this._closeSubmenu();\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle close submenu event.\r\n */\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined });\r\n }\r\n }\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param event -HTML event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey) {\r\n if (!this.props.isMobileView) {\r\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\r\n for (const item of navDrawerList) {\r\n const navDrawerButton = item.firstChild as HTMLButtonElement;\r\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\r\n navDrawerButton.focus();\r\n }\r\n }\r\n }\r\n this._closeSubmenu();\r\n }\r\n };\r\n\r\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\r\n if (!categoryImage || !categoryImage.src) {\r\n return null;\r\n }\r\n\r\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const ImageData: IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param drawerState -HTML event.\r\n */\r\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\r\n const { drawerKeyValue } = this.state;\r\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\r\n const newPair = { [drawerText]: drawerState.isOpen };\r\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\r\n };\r\n}\r\n\r\nexport default NavigationMenuView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu'),\n $type: 'contentModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'navigation-menu',\n p: 'navigation-menu',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|bayerscustomtheme|views|navigation-menu'] = {\n c: () => require('partner/themes/bayerscustomtheme/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 };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return this.viewport === 'xs' || this.viewport === 'sm';\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation'\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: this.isMobile ? 'listbox' : 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage ?? false,\n showPromotionalContent: this.props.config.displayPromotionalImage ?? false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer: {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer: {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) =>\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n );\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n );\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu ?? false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation ?? '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(\n retailItem?: CategoryHierarchy,\n cmsItem?: ICmsNavItemsData,\n isRetail?: boolean,\n idx?: number,\n addedAllMenu?: boolean\n ): IMenuItemData {\n const locale =\n this.props.context && this.props.context.request && this.props.context.request.locale\n ? this.props.context.request.locale\n : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n const cmsItemText = (cmsItem && cmsItem.linkText) || '';\n const { menuAriaLabel } = this.props.resources;\n\n // Filter category promotional data based on category name\n const promotionalData =\n retailItem &&\n categoryPromotionalContent?.filter(promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItemText,\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab,\n ariaLabel: `${cmsItemText} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({\n linkText: this.props.resources.allCategoryMenuText,\n imageSource: imageSourceUrl,\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\n });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}{' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","module.exports = React;","module.exports = ReactDOM;"],"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","_ref","_categoryImage$imageS","ImageData","Image","Object","assign","className","gridSettings","request","config","categoryImageSettings","loadFailureBehavior","role","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","_objectSpread","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","isDrawerOpen","colProps","Drawer","toggleButtonProps","key","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_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","arguments","isParent","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","shouldOpenNewTab","onMouseOver","href","onTelemetryClick","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","window","__bindings__","viewDictionary","cn","keys","ariaLabel","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","navigationMenuSource","isMobile","locale","nameTranslations","nameTranslation","find","Language","toLowerCase","Text","resizeThrottledEventHandler","addThrottledEvent","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","viewProps","xl","moduleProps","tag","displayCategoryImage","displayPromotionalImage","ImageContainer","MobileDescriptionContainer","MobileBackButton","resources","backButtonAriaLabel","MobileDescriptionLabel","renderView","mergedData","categories","result","_constructMenuItemData","cmsNavItems","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","filter","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","Name","_NavigationMenu$getFr","_NavigationMenu$getFr2","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","isBackTrack","mobileViewLabelText","_handleGoBack","_shouldAddFocusMenuRef","optionLinkText","menuItemRef","componentDidUpdate","_this$menuItemRef$cur","children","module","exports","ReactDOM"],"sourceRoot":""}