{"version":3,"file":"static/js/08333847abfab6d768c2.bundle.js","mappings":"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","sources":["webpack://@msdyn365-commerce-partners/fabrikam/./src/themes/b2b/views/navigation-menu.view.tsx?abe4","webpack://@msdyn365-commerce-partners/fabrikam/./src/themes/britax-romers/views/navigation-menu.view.tsx?87c5","webpack://@msdyn365-commerce-partners/fabrikam/./lib/navigation-menu/module-registration.js?7039","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://@msdyn365-commerce-partners/fabrikam/external var \"React\"?0d3b","webpack://@msdyn365-commerce-partners/fabrikam/external var \"ReactDOM\"?853b"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport {\r\n IMenuItemData,\r\n INavigationMenuViewProps,\r\n} from \"@msdyn365-commerce-modules/navigation-menu\";\r\nimport {\r\n ArrayExtensions,\r\n generateImageUrl,\r\n} from \"@msdyn365-commerce-modules/retail-actions\";\r\nimport {\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n} from \"@msdyn365-commerce-modules/utilities\";\r\nimport { IImageData, IImageSettings, Image } from \"@msdyn365-commerce/core\";\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 mobileViewLabelText?: string;\r\n categoryImageAltText: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent<\r\n INavigationMenuViewProps,\r\n INavigationState\r\n> {\r\n private currentLevel: number = 0;\r\n private escapeKey: number = 27;\r\n private menuNode: React.RefObject;\r\n private telemetryContent: ITelemetryContent;\r\n private payLoad: IPayLoad;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = {\r\n activeMenu: undefined,\r\n mobileViewLabelText: \"\",\r\n parentMenu: undefined,\r\n categoryImageAltText: \"\",\r\n };\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 document.body &&\r\n document.addEventListener(\r\n \"keydown\",\r\n this._escFunction as unknown as EventListener,\r\n false\r\n );\r\n document.body &&\r\n document.body.addEventListener(\"mousedown\", this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body &&\r\n document.removeEventListener(\r\n \"keydown\",\r\n this._escFunction as unknown as EventListener,\r\n false\r\n );\r\n document.body &&\r\n document.body.removeEventListener(\r\n \"mousedown\",\r\n this._handleClickOutside,\r\n 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 (\r\n \r\n {isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\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) => {\r\n return this._renderDrawerMenu(menuItem);\r\n })}\r\n \r\n );\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 private _renderDrawerMenu(menuItem: IMenuItemData): JSX.Element | null {\r\n if (menuItem && menuItem.subMenu && menuItem.subMenu.length > 0) {\r\n return this._renderDrawer(menuItem);\r\n } else {\r\n return this._renderLinkMenuItem(menuItem);\r\n }\r\n }\r\n\r\n private _renderDrawer(menuItem: IMenuItemData): JSX.Element | null {\r\n const toggleButtonText = menuItem.linkText;\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n private _renderLinkText(linkText: string | undefined): JSX.Element {\r\n return {linkText};\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(item);\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 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 (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n this.setState({\r\n parentMenu: undefined,\r\n mobileViewLabelText: menuItemData[i].linkText,\r\n });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem &&\r\n menuItemList.push(\r\n \r\n {\" \"}\r\n {this._createMenuItemList(menuItem)}{\" \"}\r\n \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n this.setState({\r\n parentMenu: item && item.id,\r\n mobileViewLabelText: subMenus[i].linkText,\r\n });\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 private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (\r\n menuItemData &&\r\n menuItemData.subMenu &&\r\n menuItemData.subMenu.length > 0\r\n ) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (\r\n menuItemData &&\r\n menuItemData.linkText &&\r\n menuItemData.linkURL &&\r\n menuItemData.linkURL.length > 0\r\n ) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false);\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(\r\n subMenus?: IMenuItemData[],\r\n activeMenu?: number,\r\n IsSubMenu?: boolean\r\n ): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n const enableMultiSupportMenu =\r\n this.props.config.enableMultilevelMenu || false;\r\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\r\n // const isParentMenu:boolean= false;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.context.telemetry.error(\r\n \"Navigation Active menu content is empty, module wont render.\"\r\n );\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n this.props.context.telemetry.error(\r\n \"Navigation Submenu content is empty, module wont render.\"\r\n );\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\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option);\r\n }\r\n let subMenu;\r\n const haveSubmenu =\r\n hasOptions &&\r\n enableMultiSupportMenu &&\r\n this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\r\n if (haveSubmenu) {\r\n this.currentLevel++;\r\n levelClassName = enableMultiSupportMenu\r\n ? `level-${this.currentLevel.toString()}`\r\n : \"\";\r\n subMenu = this._renderSubMenu(\r\n option.subMenu,\r\n isMobileView ? option.id : undefined,\r\n true\r\n );\r\n }\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\r\n }\r\n\r\n private _renderButtonMenuItem(\r\n option: IMenuItemData,\r\n activeMenu?: number,\r\n index?: number\r\n ): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(\r\n option: IMenuItemData,\r\n index?: number,\r\n hoverEffect: boolean = true\r\n ): JSX.Element | null {\r\n const { Link } = this.props;\r\n const linkText = option.linkText ? option.linkText : \"\";\r\n const imagesource = option.imageSource ? option.imageSource : \"\";\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(\r\n this.telemetryContent,\r\n this.payLoad\r\n );\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n private _renderPromotionalLink(\r\n linkText?: string,\r\n linkUrl?: string\r\n ): JSX.Element | null {\r\n const { Link } = this.props;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(\r\n this.telemetryContent,\r\n this.payLoad\r\n );\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n private _renderSpanMenuItem(\r\n option: IMenuItemData,\r\n index?: number\r\n ): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(\r\n level: string,\r\n menuOptions: JSX.Element[],\r\n currentItem?: number,\r\n submenu?: boolean\r\n ): JSX.Element | null {\r\n const {\r\n DivContainer,\r\n MenuList,\r\n ImageDivContainer,\r\n showCategoryImage,\r\n isMobileView,\r\n showPromotionalContent,\r\n } = this.props;\r\n const categoryImageDisplay =\r\n !isMobileView &&\r\n showCategoryImage &&\r\n this.state.categoryImage !== null &&\r\n this.state.categoryImage !== undefined &&\r\n !submenu;\r\n const promotionalContentDisplay =\r\n !isMobileView &&\r\n showPromotionalContent &&\r\n ArrayExtensions.hasElements(this.state.categoryImage) &&\r\n !submenu;\r\n const DivContainerClass =\r\n this.currentLevel > 2 || categoryImageDisplay\r\n ? DivContainer!.className\r\n : \"ms-nav__deafult\";\r\n this.currentLevel = 1;\r\n return (\r\n \r\n 2 &&\r\n \"navmenu-multi-level\"\r\n )}\r\n >\r\n {menuOptions}\r\n \r\n {categoryImageDisplay &&\r\n this.state.categoryImage &&\r\n this.state.categoryImage.map((item) => (\r\n \r\n {this.state.categoryImage &&\r\n this._getCategoryImage(item.src!, item.altText!.toString())}\r\n {promotionalContentDisplay &&\r\n this._renderPromotionalLink(\r\n item.altText,\r\n item.additionalProperties!.linkUrl\r\n )}\r\n \r\n ))}\r\n \r\n );\r\n }\r\n private _updateCategoryImage =\r\n (categoryImageSrc: string, option: IMenuItemData) => () => {\r\n const linkText = option && option.linkText ? option.linkText : \"\";\r\n const promotionalImage: IImageData[] = [\r\n { 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 promotionalImage.push({\r\n src: imageSrc,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl },\r\n });\r\n }\r\n });\r\n }\r\n this.setState({\r\n categoryImage:\r\n promotionalImage.length > 0 ? promotionalImage : [{ src: \"empty\" }],\r\n categoryImageAltText: linkText,\r\n });\r\n };\r\n private _handleDropdownToggle =\r\n (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu:\r\n this.state.activeMenu && this.state.activeMenu === data.id!\r\n ? undefined\r\n : 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 mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId,\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _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 // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (\r\n this.menuNode.current &&\r\n !this.menuNode.current.contains(event.target)\r\n ) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: \"\" });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: \"\" });\r\n }\r\n }\r\n private _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey) {\r\n this._closeSubmenu();\r\n }\r\n };\r\n private _getCategoryImage = (\r\n categoryImage: string,\r\n alttext: string\r\n ): React.ReactNode | null => {\r\n const categoryImageUrl = generateImageUrl(\r\n `${categoryImage}`,\r\n this.props.context.actionContext.requestContext.apiSettings\r\n );\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\nexport default NavigationMenuView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport {\r\n ArrayExtensions,\r\n generateImageUrl,\r\n} from \"@msdyn365-commerce-modules/retail-actions\";\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n} from \"@msdyn365-commerce-modules/utilities\";\r\nimport {\r\n IImageData,\r\n IImageSettings,\r\n Image,\r\n ICoreContext,\r\n} from \"@msdyn365-commerce/core\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { INavigationMenuViewProps } from \"@msdyn365-commerce-modules/navigation-menu/src/modules/navigation-menu/./navigation-menu\";\r\nimport { IMenuItemData } from \"@msdyn365-commerce-modules/navigation-menu/src/modules/navigation-menu/./navigation-menu.data\";\r\nimport { INavigationMenuResources } from \"@msdyn365-commerce-modules/navigation-menu/src/modules/navigation-menu/navigation-menu.props.autogenerated\";\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: IImageData[] | null;\r\n mobileViewLabelText?: string;\r\n categoryImageAltText: string;\r\n}\r\ninterface INavigationMenuResourcesClone extends INavigationMenuResources {\r\n navigationActive: string;\r\n navigationSubmenu: string;\r\n navigationContent: string;\r\n submenuContent: string;\r\n}\r\n\r\ninterface INavigationMenuViewPropsClone extends INavigationMenuViewProps {\r\n resources: INavigationMenuResourcesClone;\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 INavigationMenuViewPropsClone,\r\n INavigationState\r\n> {\r\n private static isBackTrack: boolean = false;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private telemetryContent: ITelemetryContent;\r\n private payLoad: IPayLoad;\r\n constructor(props: INavigationMenuViewPropsClone) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = {\r\n activeMenu: undefined,\r\n mobileViewLabelText: \"\",\r\n parentMenu: undefined,\r\n categoryImageAltText: \"\",\r\n };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.payLoad = getPayloadObject(\"click\", this.telemetryContent, \"\", \"\");\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body &&\r\n document.body.addEventListener(\"mousedown\", this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body &&\r\n document.body.removeEventListener(\r\n \"mousedown\",\r\n this._handleClickOutside,\r\n false\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n isMobileView,\r\n MenuList,\r\n MobileBackButton,\r\n MobileDescriptionContainer,\r\n MobileDescriptionLabel,\r\n Navigation,\r\n } = this.props;\r\n //this.props.context\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined && (\r\n \r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n \r\n )}\r\n {this._renderDisplay(this.props.context)}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDisplay(\r\n context: ICoreContext<{\r\n [x: string]: any;\r\n }>\r\n ): JSX.Element[] {\r\n const { ListItem, menuItemData, isMobileView } = this.props;\r\n\r\n typeof localStorage !== \"undefined\"\r\n ? localStorage.setItem(\"menu\", JSON.stringify(menuItemData))\r\n : null;\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 (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: undefined })\r\n : this.setState({\r\n parentMenu: undefined,\r\n mobileViewLabelText: menuItemData[i].linkText,\r\n });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) 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, context)}{\" \"}\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, context)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: item && item.id })\r\n : this.setState({\r\n parentMenu: item && item.id,\r\n mobileViewLabelText: subMenus[i].linkText,\r\n });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n this.props.context.telemetry.error(\r\n this.props.resources.submenuContent\r\n // \"Submenu content is empty, module wont render.\"\r\n );\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(\r\n menuItemData: IMenuItemData,\r\n context: ICoreContext<{\r\n [x: string]: any;\r\n }>\r\n ): JSX.Element | null {\r\n if (\r\n menuItemData &&\r\n menuItemData.subMenu &&\r\n menuItemData.subMenu.length > 0\r\n ) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(\r\n menuItemData.subMenu,\r\n menuItemData.id,\r\n false,\r\n context\r\n );\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(\r\n menuItemData.subMenu,\r\n menuItemData.id,\r\n false,\r\n context\r\n )}\r\n \r\n );\r\n }\r\n } else if (\r\n menuItemData &&\r\n menuItemData.linkText &&\r\n menuItemData.linkURL &&\r\n menuItemData.linkURL.length > 0\r\n ) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false);\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n this.props.context.telemetry.error(\r\n this.props.resources.navigationContent\r\n // \"Navigation menu content is empty, module wont render.\"\r\n );\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(\r\n subMenus?: IMenuItemData[],\r\n activeMenu?: number,\r\n IsSubMenu?: boolean,\r\n context?: ICoreContext<{\r\n [x: string]: any;\r\n }>\r\n ): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n const enableMultiSupportMenu =\r\n this.props.config.enableMultilevelMenu || false;\r\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\r\n // const isParentMenu:boolean= false;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.context.telemetry.error(\r\n this.props.resources.navigationActive\r\n // \"Navigation Active menu content is empty, module wont render.\"\r\n );\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n this.props.context.telemetry.error(\r\n this.props.resources.navigationSubmenu\r\n // \"Navigation Submenu content is empty, module wont render.\"\r\n );\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\r\n ? this._renderLinkMenuItem(option, idx, true, context)\r\n : this._renderSpanMenuItem(option);\r\n }\r\n\r\n let subMenu;\r\n const haveSubmenu =\r\n hasOptions &&\r\n enableMultiSupportMenu &&\r\n this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\r\n if (haveSubmenu) {\r\n this.currentLevel++;\r\n levelClassName = enableMultiSupportMenu\r\n ? `level-${this.currentLevel.toString()}`\r\n : \"\";\r\n subMenu = this._renderSubMenu(\r\n option.subMenu,\r\n isMobileView ? option.id : undefined,\r\n true\r\n );\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 private _renderButtonMenuItem(\r\n option: IMenuItemData,\r\n activeMenu?: number,\r\n index?: number\r\n ): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(\r\n option: IMenuItemData,\r\n index?: number,\r\n hoverEffect: boolean = true,\r\n context?: ICoreContext<{\r\n [x: string]: any;\r\n }>\r\n ): JSX.Element | null {\r\n const { Link } = this.props;\r\n const linkText = option.linkText ? option.linkText : \"\";\r\n const imagesource = option.imageSource ? option.imageSource : \"\";\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(\r\n this.telemetryContent,\r\n this.payLoad\r\n );\r\n\r\n const baseImageURL = context?.request.apiSettings.baseImageUrl.slice(0, -1); //url comes with / in the end which we don't need, so we remove it\r\n const imageSource = `${baseImageURL}${linkText}_000_001.jpg`;\r\n\r\n return (\r\n \r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(\r\n linkText?: string,\r\n linkUrl?: string\r\n ): JSX.Element | null {\r\n const { Link } = this.props;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(\r\n this.telemetryContent,\r\n this.payLoad\r\n );\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n private _renderSpanMenuItem(\r\n option: IMenuItemData,\r\n index?: number\r\n ): 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 // tslint:disable-next-line: cyclomatic-complexity\r\n private _renderMenu(\r\n level: string,\r\n menuOptions: JSX.Element[],\r\n currentItem?: number,\r\n submenu?: boolean\r\n ): JSX.Element | null {\r\n const {\r\n DivContainer,\r\n MenuList,\r\n ImageDivContainer,\r\n showCategoryImage,\r\n showPromotionalContent,\r\n isMobileView,\r\n } = this.props;\r\n const categoryImageDisplay =\r\n !isMobileView &&\r\n (showCategoryImage || showPromotionalContent) &&\r\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\r\n !submenu;\r\n const promotionalContentDisplay =\r\n !isMobileView &&\r\n showPromotionalContent &&\r\n ArrayExtensions.hasElements(this.state.categoryImage) &&\r\n !submenu;\r\n const DivContainerClass =\r\n this.currentLevel > 2 || categoryImageDisplay\r\n ? DivContainer!.className\r\n : \"ms-nav__deafult\";\r\n this.currentLevel = 1;\r\n return (\r\n \r\n 2 &&\r\n \"navmenu-multi-level\"\r\n )}\r\n >\r\n {menuOptions}\r\n \r\n {categoryImageDisplay &&\r\n this.state.categoryImage &&\r\n this.state.categoryImage.map((item: IImageData) => (\r\n \r\n {this.state.categoryImage &&\r\n this._getCategoryImage(item.src, item.altText?.toString())}\r\n {promotionalContentDisplay &&\r\n this._renderPromotionalLink(\r\n item.altText,\r\n item.additionalProperties?.linkUrl\r\n )}\r\n \r\n ))}\r\n \r\n );\r\n }\r\n private _updateCategoryImage =\r\n (categoryImageSrc: string, option: IMenuItemData) => () => {\r\n const linkText = option && option.linkText ? option.linkText : \"\";\r\n const promotionalImage: IImageData[] = [\r\n { 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 promotionalImage.push({\r\n src: imageSrc,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl },\r\n });\r\n }\r\n });\r\n }\r\n this.setState({\r\n categoryImage:\r\n promotionalImage.length > 0 ? promotionalImage : [{ src: \"empty\" }],\r\n categoryImageAltText: linkText,\r\n });\r\n };\r\n private _handleDropdownToggle =\r\n (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu:\r\n this.state.activeMenu && this.state.activeMenu === data.id!\r\n ? undefined\r\n : data.id!,\r\n parentMenu: parentId,\r\n });\r\n if (this.props.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId,\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _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 // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (\r\n this.menuNode.current &&\r\n !this.menuNode.current.contains(event.target)\r\n ) {\r\n this.setState({\r\n activeMenu: undefined,\r\n mobileViewLabelText: \"\",\r\n categoryImage: null,\r\n });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: undefined,\r\n categoryImage: null,\r\n mobileViewLabelText: \"\",\r\n });\r\n }\r\n }\r\n private _getCategoryImage = (\r\n categoryImage: string | undefined,\r\n alttext: string | undefined\r\n ): React.ReactNode | null => {\r\n const categoryImageUrl = generateImageUrl(\r\n `${categoryImage}`,\r\n this.props.context.actionContext.requestContext.apiSettings\r\n );\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\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|b2b|views|navigation-menu'] = {\n c: () => require('partner/themes/b2b/views/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['__local__|__local__|themes|britax-romers|views|navigation-menu'] = {\n c: () => require('partner/themes/britax-romers/views/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|navigation-menu|modules|navigation-menu|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-navigation-menu-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-navigation-menu'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return this.viewport === 'xs' || this.viewport === 'sm';\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation'\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: this.isMobile ? 'listbox' : 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage ?? false,\n showPromotionalContent: this.props.config.displayPromotionalImage ?? false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer: {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer: {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) =>\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n );\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n );\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu ?? false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation ?? '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(\n retailItem?: CategoryHierarchy,\n cmsItem?: ICmsNavItemsData,\n isRetail?: boolean,\n idx?: number,\n addedAllMenu?: boolean\n ): IMenuItemData {\n const locale =\n this.props.context && this.props.context.request && this.props.context.request.locale\n ? this.props.context.request.locale\n : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n const cmsItemText = (cmsItem && cmsItem.linkText) || '';\n const { menuAriaLabel } = this.props.resources;\n\n // Filter category promotional data based on category name\n const promotionalData =\n retailItem &&\n categoryPromotionalContent?.filter(promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItemText,\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab,\n ariaLabel: `${cmsItemText} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({\n linkText: this.props.resources.allCategoryMenuText,\n imageSource: imageSourceUrl,\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\n });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}{' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootEnabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n};\n\nexport default navigationMenuView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["NavigationMenuView","React","constructor","props","super","currentLevel","escapeKey","_updateCategoryImage","categoryImageSrc","option","linkText","promotionalImage","src","altText","ArrayExtensions","hasElements","promotionalContent","map","item","image","imageSrc","push","text","additionalProperties","linkUrl","destinationUrl","this","setState","categoryImage","length","categoryImageAltText","_handleDropdownToggle","data","parentId","isMobileView","activeMenu","id","mobileViewLabelText","parentMenu","state","undefined","showCategoryImage","imageSource","_resetFocus","setTimeout","menuNode","current","focus","_handleClickOutside","event","contains","target","_escFunction","keyCode","_closeSubmenu","_getCategoryImage","alttext","categoryImageUrl","generateImageUrl","context","actionContext","requestContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","ImageData","Image","Object","assign","className","gridSettings","request","imageSettings","config","categoryImageSettings","loadFailureBehavior","role","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","componentDidMount","document","body","addEventListener","componentWillUnmount","removeEventListener","render","_renderMobileMenu","_renderDesktopMenu","menuItemData","Navigation","Module","classnames","menuItem","_renderDrawerMenu","MenuList","Node","ref","tabIndex","_renderDisplay","subMenu","_renderDrawer","_renderLinkMenuItem","toggleButtonText","Drawer","key","openGlyph","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","_renderDrawerLink","linkURL","_renderSpanMenuItem","ListItem","menuItemList","i","_getFromSubMenu","_createMenuItemList","forEach","index","subMenus","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","error","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","toString","_renderMenu","Button","onClick","onFocus","hoverEffect","arguments","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","onMouseOver","href","onTelemetryClick","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","isBackTrack","_handleGoBack","MobileBackButton","MobileDescriptionContainer","MobileDescriptionLabel","localStorage","setItem","JSON","stringify","resources","submenuContent","navigationContent","navigationActive","navigationSubmenu","baseImageUrl","slice","_item$altText","_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__","_objectSpread","viewDictionary","cn","_positionInSetOffset","promotionalItemImageSettings","_handleFocusOutside","relatedTarget","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_ref","_categoryImage$imageS","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","MsDyn365","isBrowser","posinset","setSize","keyValue","keys","isDrawerOpen","colProps","toggleButtonProps","ariaLabel","onToggle","collapseProps","currentPos","_menuItem$subMenu2","_menuItem$subMenu","menuItemDatum","isParent","shouldOpenNewTab","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","backButtonAriaLabel","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","_shouldAddFocusMenuRef","optionLinkText","menuItemRef","componentDidUpdate","_this$menuItemRef$cur","children","NavMenuConstants","getCategoryImage","navProps","_props$navProps$confi","imageData","Msdyn365","NavigationMenuRootDisabled","supportedLevel","four","zero","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","categoryImageSource","isOnlyMobile","_closeNavMenu","_this$menuNode$curren","_this$menuNode$curren2","_customUpdateViewport","variant","VariantType","Browser","customResizeThrottledEventHandler","title","hamburgerAriaLabel","_renderCollapseMenu","Collapse","StringExtensions","isNullOrWhitespace","entries","parentMenuId","menu","one","Number","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","timeout","isHoverEffect","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","unshift","cmsMenuData","retailMenuItemData","retailMenuData","parse","module","exports","ReactDOM"],"sourceRoot":""}