{"version":3,"file":"static/js/7.8a33625c07949daede04.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/toysrus/definition-extensions/navigation-menu.ext.props.autogenerated.ts?8883","webpack://Msdyn365.Commerce.Online/./src/themes/toysrus/views/navigation-menu.view.tsx?d09e","webpack://Msdyn365.Commerce.Online/./src/modules/business-partners/components/search-bar.tsx?63c1","webpack://Msdyn365.Commerce.Online/./src/modules/business-partners/components/data-grid.tsx?ddec","webpack://Msdyn365.Commerce.Online/./src/modules/business-partners/components/business-partner-users-table.tsx?c677","webpack://Msdyn365.Commerce.Online/./src/modules/business-partners/components/business-partners-table.tsx?8b1d","webpack://Msdyn365.Commerce.Online/./src/modules/business-partners/business-partners.tsx?57a6","webpack://Msdyn365.Commerce.Online/./src/modules/business-partners/business-partners.view.tsx?b34e","webpack://Msdyn365.Commerce.Online/./src/modules/country-picker/country-picker.tsx?4fcb","webpack://Msdyn365.Commerce.Online/./src/modules/country-picker/country-picker.view.tsx?0036","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/header.view.tsx?6d84","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/search-result-container.view.tsx?89df","webpack://Msdyn365.Commerce.Online/./src/modules/iframe/iframe.tsx?65fe","webpack://Msdyn365.Commerce.Online/./src/modules/iframe/iframe.view.tsx?a7d6","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://Msdyn365.Commerce.Online/./src/modules/subscribe/subscribe.tsx?9fea","webpack://Msdyn365.Commerce.Online/./src/modules/subscribe/subscribe.view.tsx?19c8","webpack://Msdyn365.Commerce.Online/./src/modules/tab-item/tab-item.tsx?b1b8","webpack://Msdyn365.Commerce.Online/./src/modules/tab-item/tab-item.view.tsx?ee3b","webpack://Msdyn365.Commerce.Online/./src/modules/tab/tab.tsx?9ac6","webpack://Msdyn365.Commerce.Online/./src/modules/tab/tab.view.tsx?a99d","webpack://Msdyn365.Commerce.Online/./src/modules/tile-list-item/components/links.tsx?c969","webpack://Msdyn365.Commerce.Online/./src/modules/tile-list-item/tile-list-item.tsx?114a","webpack://Msdyn365.Commerce.Online/./src/modules/tile-list-item/tile-list-item.view.tsx?19a8","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/carticon.component.tsx?3c7c","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/promocode.component.tsx?c06b","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/content-block.view.tsx?0db4","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/write-review.view.tsx?c67c"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * INavigationMenu contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum navigationMenuSource {\r\n all = 'all',\r\n retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly'\r\n}\r\n\r\nexport interface INavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n enableMultilevelMenu?: boolean;\r\n enabletopMenu?: boolean;\r\n menuLevelSupport?: number;\r\n rootMenuNavigation?: string;\r\n displayCategoryImage?: boolean;\r\n displayPromotionalImage?: boolean;\r\n categoryPromotionalContent?: ICategoryPromotionalContentData[];\r\n categoryImageSettings?: Msdyn365.IImageSettings;\r\n className?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface INavigationMenuResources {\r\n menuAriaLabel: string;\r\n backButtonAriaLabel: string;\r\n allCategoryMenuText: string;\r\n}\r\n\r\nexport interface ICmsNavItemsData {\r\n linkText?: string;\r\n linkUrl?: Msdyn365.ILinkData;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface ICategoryPromotionalContentData {\r\n categoryName?: string;\r\n image: Msdyn365.IImageData;\r\n text?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface INavigationMenuProps extends Msdyn365.IModule {\r\n resources: INavigationMenuResources;\r\n config: INavigationMenuConfig;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport MsDyn365, { IImageData, Image, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IPayLoad, ITelemetryContent, Module, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\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 { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport { ICmsNavItemsData, ISubMenusData, navigationMenuSource } from '../definition-extensions/navigation-menu.ext.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 mobileViewLabelLink?: string;\r\n categoryImageAltText: string;\r\n scrollClass: boolean;\r\n /* Uptail Customization - START\r\n when mouse moves on any submneu item, currentcategory shows its option at ID if at level 2 and previous category ID (which is actually its parent ID) if at level 3 */\r\n currentCategory?: number | undefined;\r\n // checks whether back button is clicked or not on mobile menu\r\n isBackBtnClicked?: boolean;\r\n categoryImageLink?: string;\r\n /* Uptail Customization - END */\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private currentLevel: number = 0;\r\n\r\n /* Uptail Customization - START*/\r\n private supportedLevel: number = 3;\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private currentLevelMobile: number = 0;\r\n private menuItemData: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n private documentRef: Document | undefined;\r\n /* Uptail Customization - END */\r\n\r\n private readonly menuNode: React.RefObject;\r\n private readonly menuButtonsNode: React.RefObject;\r\n private readonly telemetryContent: ITelemetryContent;\r\n private readonly payLoad: IPayLoad;\r\n\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuButtonsNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', mobileViewLabelLink: '', parentMenu: undefined, scrollClass: false, categoryImageAltText: '' };\r\n\r\n this.menuItemData = this._mapData(); // Uptail Customization\r\n this._setNavigationSource(props.config.navigationMenuSource as (navigationMenuSource | undefined)); // Uptail Customization\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 this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public componentDidMount(): void {\r\n\r\n this.documentRef = document;\r\n\r\n if (MsDyn365.isBrowser) {\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n document.body.addEventListener('focusout', this._handleFocusOutside);\r\n\r\n /* Uptail Customization - START - Setting mousehover to false to not display submenu by defualt */\r\n document.body.addEventListener('mousedown', this._handleMouseHover(undefined));\r\n document.body.addEventListener('mousedown', this._handleLinkClick(undefined));\r\n /* Uptail Customization - END */\r\n }\r\n\r\n /* Uptail Customization - START*/\r\n /* Sticky Navigation */\r\n //window.addEventListener('scroll', () => {\r\n // this._mainMenuScroll(this.state.scrollClass);\r\n //});\r\n /* Uptail Customization - END*/\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\r\n\r\n /* Uptail Customization - START - Setting mousehover to false to not display submenu while unmounting component */\r\n document.body.removeEventListener('mousedown', this._handleMouseHover(undefined));\r\n document.body.removeEventListener('mousedown', this._handleLinkClick(undefined));\r\n /* Uptail Customization - END */\r\n }\r\n\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation, resources: { backButtonAriaLabel } } = this.props;\r\n this.currentLevel = 1;\r\n\r\n return (\r\n \r\n {\r\n isMobileView && this.state.activeMenu &&\r\n \r\n \r\n \r\n \r\n {backButtonAriaLabel}\r\n \r\n \r\n \r\n }\r\n \r\n {isMobileView && this.state.activeMenu !== undefined && this.state.mobileViewLabelText &&\r\n \r\n { (this.state.mobileViewLabelLink && this.state.mobileViewLabelLink != '') ?\r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n : \r\n {this.state.mobileViewLabelText}\r\n \r\n }\r\n }\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const { menuItemData } = this;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (const menuItemDatum of menuItemData) {\r\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\r\n menuItem = menuItemDatum;\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText, mobileViewLabelLink: menuItemDatum.linkURL });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n if (menuItem) {\r\n //(this.currentLevelMobile < this.supportedLevel && this.state.isBackBtnClicked === false) && this.currentLevelMobile++; //Uptail Customization\r\n (this.currentLevelMobile < this.supportedLevel && this.state.isBackBtnClicked === false && this.currentLevelMobile == 0) && this.currentLevelMobile++; //Uptail Customization\r\n menuItem && menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}\r\n {' '}\r\n \r\n );\r\n }\r\n } else {\r\n this.currentLevelMobile = 0; //Uptail Customization\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState(\r\n { parentMenu: item?.id }\r\n ) : this.setState(\r\n { parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText, mobileViewLabelLink: subMenus[i].linkURL }\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('Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n private _renderMobileSubMenu(menuItemData: IMenuItemData): JSX.Element | null {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, undefined, menuItemData.linkText)}\r\n \r\n );\r\n }\r\n\r\n /* Uptail Customization - START - Display all option on 3rd level */\r\n private _mapData(): IMenuItemData[] {\r\n const { data, config } = this.props;\r\n const mergedData: IMenuItemData[] = [];\r\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\r\n data.categories.result.map((item: CategoryHierarchy, index) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\r\n ));\r\n }\r\n\r\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\r\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) => (\r\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\r\n ));\r\n }\r\n return this._constructTopMenuItemData(mergedData);\r\n }\r\n\r\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\r\n const enableTopLevelMenu = this.props.config.enabletopMenu || false;\r\n if (!enableTopLevelMenu) {\r\n return mergedData;\r\n }\r\n const mergedRootMenuData: IMenuItemData[] = [];\r\n const topMenu = {\r\n id: 1,\r\n linkText: this.props.config.rootMenuNavigation || '...',\r\n linkURL: '#',\r\n imageSource: undefined,\r\n subMenu: mergedData\r\n } as IMenuItemData;\r\n mergedRootMenuData.push(topMenu);\r\n\r\n return mergedRootMenuData;\r\n }\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number, addedAllMenu?: boolean): IMenuItemData {\r\n const locale = this.props.context && this.props.context.request && this.props.context.request.locale ? this.props.context.request.locale : 'en-us';\r\n const imageSouce = retailItem && retailItem.Images && retailItem.Images[0].Uri ? retailItem.Images[0].Uri : 'empty';\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenuView.RSItemIdInit++,\r\n linkText: NavigationMenuView.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n imageSource: imageSouce,\r\n subMenu: this._getNestedChildren(retailItem, imageSouce, addedAllMenu)\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenuView.CMSItemIdInit++,\r\n linkText: cmsItem && cmsItem.linkText || '',\r\n linkURL: cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl || '',\r\n imageDestinationURL: cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl || '',\r\n imageSource: cmsItem && cmsItem.image && cmsItem.image.src || '',\r\n subMenu: this._getCMSNestedChildren(cmsItem)\r\n } as IMenuItemData;\r\n }\r\n }\r\n\r\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n if (!this.props.config.enabletopMenu && addedAllMenu) {\r\n nestedChildren.push({ linkText: this.props.resources.allCategoryMenuText, imageSource: imageSourceUrl, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n }\r\n category.Children.map((item: CategoryHierarchy, index) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, true));\r\n });\r\n return nestedChildren;\r\n }\r\n\r\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n\r\n if (!category || !category.subMenus || !category.subMenus.length) {\r\n return [];\r\n }\r\n\r\n category.subMenus.map((item: ISubMenusData, idx: number) => {\r\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\r\n });\r\n return nestedChildren;\r\n }\r\n\r\n private _setNavigationSource = (sourceType?: navigationMenuSource | undefined): void => {\r\n switch (sourceType) {\r\n case navigationMenuSource.retailServerOnly:\r\n this.isRetail = true;\r\n this.isCMS = false;\r\n break;\r\n case navigationMenuSource.cmsOnly:\r\n this.isRetail = false;\r\n this.isCMS = true;\r\n break;\r\n case navigationMenuSource.all:\r\n this.isRetail = true;\r\n this.isCMS = true;\r\n break;\r\n default:\r\n }\r\n }\r\n /* UT Customization - END*/\r\n\r\n /* Uptail Customization - START*/\r\n private _getSubMenuLength = (menuItemId: number | undefined) => {\r\n const menuItem = menuItemId && menuItemId.toString();\r\n const htmlElement = menuItem && this.documentRef && this.documentRef.getElementById(menuItem);\r\n const menuItemHeight = htmlElement && htmlElement.offsetHeight;\r\n return menuItemHeight === 0 ? undefined : menuItemHeight;\r\n }\r\n /* Uptail Customization - END */\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n const { isMobileView } = this.props;\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false, menuItemData.linkText));\r\n } else {\r\n /* Uptail Customization - START */\r\n if (isMobileView) {\r\n return this._renderMobileSubMenu(menuItemData);\r\n }\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, undefined)}\r\n \r\n \r\n \r\n );\r\n }\r\n /* Uptail Customization - END */\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n let updatedMenuItemData: IMenuItemData = menuItemData;\r\n /* Displayed static menu items as buttons in desktop view and as link menu items in mobile/iPad view */\r\n if (isMobileView) {\r\n return (this._renderLinkMenuItem(updatedMenuItemData));\r\n }\r\n return (this._renderButtonMenuItem(updatedMenuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData, menuItemData.id, true));\r\n }\r\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean, parentName?: string): JSX.Element | null {\r\n var showOptionAll = undefined;\r\n var isChild = IsSubMenu;\r\n const { isMobileView, ListItem, MenuList } = this.props;\r\n /* Uptail Customization - START */\r\n /* Added isMobileView condition to check this condition just for mobile to fill submenu by default in case of desktop */\r\n if (isMobileView && activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n /* Uptail Customization - END */\r\n if (!subMenus || subMenus.length === 0) {\r\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n /* Uptail Customization - START - 02/11/20 */\r\n let _subMenus: IMenuItemData[];\r\n if (isChild === undefined && !showOptionAll) {\r\n if (!isMobileView) {\r\n // Second level menu will not include option 'All' on desktop\r\n _subMenus = subMenus && subMenus.filter(subItem => {\r\n return subItem.linkText && subItem.linkText.toLowerCase() !== 'all';\r\n });\r\n } else {\r\n // display parentName instead of all in third level on desktop\r\n let allOptionFound = false;\r\n _subMenus = subMenus;\r\n _subMenus && _subMenus.map(submenu => {\r\n if (!allOptionFound && submenu.linkText && submenu.linkText.toLowerCase() === 'all') {\r\n submenu.linkText = `${submenu.linkText} ${parentName}`;\r\n allOptionFound = true;\r\n }\r\n });\r\n }\r\n } else {\r\n // Third level menu\r\n // on desktop, do not show the all category menu on the third level\r\n _subMenus = subMenus;\r\n _subMenus = subMenus && subMenus.filter(subItem => {\r\n return subItem.linkText && subItem.linkText.toLowerCase() !== 'all';\r\n });\r\n }\r\n /* Uptail Customization - END */\r\n let levelClassName: string = '';\r\n const menuOptions = _subMenus && _subMenus.map((option: IMenuItemData, idx: number) => {\r\n let isActiveOption = option.id !== undefined && this.state.currentCategory === option.id;\r\n isActiveOption = isActiveOption && ('id' in option); // if any option doesn't have id value, its submenu will not be created\r\n const hasOptions = option.subMenu && option.subMenu.length > 0 || false;\r\n const renderChildMenu = isMobileView ? hasOptions : isActiveOption;\r\n\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView && this.currentLevelMobile < this.supportedLevel - 1) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx, activeMenu, isChild, parentName)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n let subMenu;\r\n if (renderChildMenu === true) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n /* Last parameter indicated if it is child or not */\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true, option.linkText);\r\n }\r\n }\r\n return (\r\n <>\r\n \r\n {menuItem}\r\n {/* Uptail Customization - START */}\r\n {isMobileView && subMenu}\r\n {/* Following node displays submenu against a menu item when user moves mouse on it on desktop*/}\r\n {!isMobileView &&\r\n \r\n \r\n {subMenu}\r\n \r\n \r\n }\r\n {/* Uptails Customization - END */}\r\n \r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n /* Uptail Customization - end */\r\n\r\n /* UT Customization */\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n\r\n let showCannedSearches = false;\r\n const { Button, isMobileView } = this.props;\r\n\r\n if (this.props.context.request.query && this.props.context.request.query.showCannedSearches === 'true') {\r\n showCannedSearches = true;\r\n }\r\n\r\n if (isMobileView) {\r\n return (\r\n \r\n
\r\n {option.linkText}\r\n
\r\n \r\n );\r\n } else {\r\n /* Mouse Hover on menuitem displays its submenu till level 3 */\r\n /* Mouse Click on menuitem will navigate to its category page */\r\n return (\r\n\r\n \r\n
\r\n {option.linkText}\r\n
\r\n \r\n );\r\n }\r\n\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number,\r\n activeMenu?: number | undefined, _isChild?: boolean | undefined, parentName?: string): JSX.Element | null {\r\n const { isMobileView } = this.props;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n const optionLinkText = (_isChild && linkText === parentName) ? {linkText} : linkText;\r\n /* Uptail Customization - START*/\r\n if (isMobileView) {\r\n return (\r\n \r\n {optionLinkText}\r\n \r\n );\r\n } else {\r\n /* onClick navigates to category page if clicked item is child item (level 3) */\r\n const onClick = _isChild ? { onClick: this._handleLinkClick(option.linkText) } : undefined;\r\n return (\r\n \r\n {optionLinkText}\r\n {(!_isChild && option.subMenu && option.subMenu.length > 0) ? : undefined}\r\n \r\n );\r\n }\r\n /* Uptail Customization - END*/\r\n }\r\n\r\n /* Uptail Customization - Following function sets value of previous current category in case of level 3 and option.id in case of level 2 */\r\n private _handleMouseHover = (optionID: number | undefined, _isChild?: boolean | undefined) => () => {\r\n const _activeItem = _isChild ? this.state.currentCategory : optionID;\r\n _activeItem !== undefined && this.setState({ currentCategory: _activeItem });\r\n }\r\n\r\n /* Uptail Customization - onClick navigates to category page if clicked item is child item */\r\n private _handleLinkClick = (linkURL: string | undefined) => () => {\r\n this._gotoCategoryPage(linkURL);\r\n }\r\n\r\n /* Uptail Customization - Following function navigate to category page */\r\n private _gotoCategoryPage = (categoryPageURL: string | undefined) => () => {\r\n if (categoryPageURL) {\r\n window.location.href = categoryPageURL;\r\n }\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n // Uptail Customization - categoryImageLink has been added\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView } = this.props;\r\n const categoryImageDisplay = !isMobileView && (showCategoryImage ) && ArrayExtensions.hasElements(this.state.categoryImage) ;\r\n //const { categoryImage, categoryImageLink } = this.state;\r\n this.currentLevel = 1;\r\n if (showCategoryImage) {\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n {\r\n categoryImageDisplay && this.state.categoryImage && this.state.categoryImage.map(item => (\r\n \r\n { this.state.categoryImage && this._getCategoryImage(item) }\r\n ))\r\n }\r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n \r\n );\r\n }\r\n\r\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\r\n const linkText = option && option.linkText ? option.linkText : '';\r\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n option.promotionalContent.map(item => {\r\n if (item && item.image) {\r\n const imageSrc = item.image.src;\r\n const promotionalItemImageSettings = item.image.imageSettings;\r\n promotionalImage.push({\r\n src: imageSrc, altText: item.text, imageSettings: promotionalItemImageSettings,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n });\r\n }\r\n this.setState({\r\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\r\n categoryImageAltText: linkText\r\n });\r\n };\r\n\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId,\r\n currentCategory: undefined // Uptail Customization parent of third menu to render third level menu\r\n });\r\n if (this.props.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n (this.currentLevelMobile < this.supportedLevel && this.state.isBackBtnClicked === false) && this.currentLevelMobile++;\r\n\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n mobileViewLabelLink: data.linkURL,\r\n parentMenu: parentId,\r\n isBackBtnClicked: false // Uptail Customization \r\n });\r\n\r\n window.scrollTo({\r\n top: 0,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n /* Uptail Customization - STRAT */\r\n this.setState({ activeMenu: this.state.parentMenu, isBackBtnClicked: true });\r\n this.currentLevelMobile--;\r\n /* Uptail Customization - END */\r\n this._resetFocus();\r\n };\r\n\r\n private readonly _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n if (this.menuNode && this.menuNode.current) {\r\n this.menuNode.current.focus();\r\n }\r\n }, 0);\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if ((this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) && (this.menuButtonsNode.current && !this.menuButtonsNode.current.contains(event.target as Node)) ) {\r\n this.setState(\r\n {\r\n activeMenu: undefined,\r\n mobileViewLabelText: '',\r\n mobileViewLabelLink: '',\r\n categoryImage: null\r\n }\r\n );\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleFocusOutside = (event: FocusEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\r\n this._closeSubmenu();\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '', mobileViewLabelLink: '' });\r\n }\r\n }\r\n\r\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\r\n let nameTranslation: TextValueTranslation | undefined;\r\n if (locale && nameTranslations && nameTranslations.length > 0) {\r\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\r\n }\r\n\r\n return nameTranslation && nameTranslation.Text;\r\n }\r\n\r\n /*private _getCategoryImage = (categoryImage: string): React.ReactNode | null => {\r\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, this.props.context.actionContext.requestContext.apiSettings);\r\n if (categoryImageUrl !== undefined) {\r\n const ImageData: IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n */ \r\n\r\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\r\n\r\n if (!categoryImage || !categoryImage.src) {\r\n return null;\r\n }\r\n\r\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport default NavigationMenuView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\nimport { KeyCodes } from '@msdyn365-commerce-modules/utilities';\n\nexport interface ISearchBarProps {\n className: string;\n searchPlaceholderLabel: string;\n onSearch(searchText: string): void;\n}\n\nexport interface ISearchBarState {\n searchText: string;\n}\n\nexport class SearchBar extends React.Component {\n constructor(props: ISearchBarProps) {\n super(props);\n this.state = {\n searchText: ''\n };\n }\n\n public render(): JSX.Element {\n const { className, searchPlaceholderLabel } = this.props;\n return (\n
\n \n
\n );\n }\n\n private readonly onSearchTextChange = (ev: React.ChangeEvent): void => {\n this.setState({\n searchText: ev.target.value\n });\n };\n\n private readonly onSearch = (): void => {\n this.props.onSearch(this.state.searchText);\n };\n\n private readonly handleKeyUp = (event: React.KeyboardEvent): void => {\n if (event.keyCode === KeyCodes.Enter) {\n this.onSearch();\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport { CommerceException } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { moduleClassName } from '../business-partners';\nimport { IBusinessPartnersResources } from '../business-partners.props.autogenerated';\nimport { SearchBar } from './search-bar';\n\n/**\n * Props of DataGrid component.\n */\nexport interface IDataGridProps extends IComponentProps {\n className: string;\n pageSize?: number;\n searchPlaceholderLabel: string;\n defaultSorting?: ISortingInfo;\n resources: IBusinessPartnersResources;\n columns: IDataGridColumn[];\n loadData(): Promise;\n}\n\n/**\n * State of DataGrid component.\n */\nexport interface IDataGridState {\n data: Tdata[];\n paging: IPagingInfo;\n filter: IFilterInfo;\n sorting?: ISortingInfo;\n isLoading: boolean;\n errorMessage: string;\n}\n\nexport interface IPagingInfo {\n index: number;\n}\n\nexport interface IFilterInfo {\n searchText: string;\n}\n\nexport interface ISortingInfo {\n fieldName: string;\n ascending: boolean;\n}\n\n/**\n * Column definition of DataGrid component.\n */\nexport interface IDataGridColumn {\n /**\n * A unique key for identifying the column.\n */\n reactKey: string;\n\n /**\n * Name to render on the column header.\n */\n name: string;\n\n /**\n * Class name added to table cell.\n */\n className?: string;\n\n /**\n * The field to pull the text value from for the column.Can be unset if a custom `onRender` method is provided.\n */\n fieldName?: string;\n\n /**\n * Whether the user can search this column by text.\n */\n isSearchable?: boolean;\n\n /**\n * Custom renderer for cell content, instead of the default text rendering.\n */\n onRender?(item: Tdata): JSX.Element;\n\n /**\n * Event when the table cell is clicked.\n */\n onClick?(item: Tdata): void;\n}\n\nconst defaultPageSize = 10;\n\n/**\n * DataGrid component encapsulates common table functionalities.\n */\nexport class DataGrid extends React.Component, IDataGridState> {\n constructor(props: IDataGridProps) {\n super(props);\n this.state = {\n data: [],\n sorting: props.defaultSorting,\n paging: { index: 0 },\n filter: { searchText: '' },\n isLoading: true,\n errorMessage: ''\n };\n }\n\n public componentDidMount(): void {\n this.loadDataInternal();\n }\n\n public shouldComponentUpdate(nextProps: Readonly>, nextState: Readonly>): boolean {\n return (\n this.props.id !== nextProps.id ||\n this.props.columns !== nextProps.columns ||\n this.state.data !== nextState.data ||\n this.state.paging !== nextState.paging ||\n this.state.filter !== nextState.filter ||\n this.state.isLoading !== nextState.isLoading ||\n this.state.errorMessage !== nextState.errorMessage\n );\n }\n\n public render(): JSX.Element | null {\n const data = this.getDataToDisplay();\n const hasMore = this.hasMore();\n if (this.state.errorMessage) {\n return {this.state.errorMessage};\n }\n if (this.state.isLoading) {\n return {this.props.resources.loadingLabel};\n }\n if (!ArrayExtensions.hasElements(data)) {\n return (\n <>\n \n

{this.props.resources.noDataMessage}

\n \n );\n }\n return (\n <>\n \n \n {this.renderGridHeader()}\n {data.map((item, index) => this.renderGridRow(item, index))}\n
\n {hasMore && (\n
\n \n
\n )}\n \n );\n }\n\n /**\n * Renders the TH header in the table.\n * @returns - Header react node.\n */\n private readonly renderGridHeader = () => {\n const className = `${this.props.className}__header`;\n const rowClassName = `${className}__row`;\n return (\n \n \n {this.props.columns.map(column => (\n \n {column.name}\n \n ))}\n \n \n );\n };\n\n /**\n * Renders table row.\n * @param item - Data item for this row.\n * @param index - Index of the row.\n * @returns - Row react node.\n */\n private readonly renderGridRow = (item: Tdata, index: number) => {\n const rowClassName = `${this.props.className}__row`;\n return (\n \n {this.props.columns.map(column => {\n if (column.fieldName) {\n return (\n column.onClick?.(item)}>\n {((item as unknown) as { [key: string]: string })[column.fieldName]}\n \n );\n }\n return {column.onRender?.(item)};\n })}\n \n );\n };\n\n /**\n * Load data for the table.\n * @returns Promise.\n */\n private readonly loadDataInternal = async () => {\n if (!this.props.context.actionContext.requestContext.user.isAuthenticated) {\n this.setState({\n isLoading: false\n });\n return;\n }\n try {\n const result = await this.props.loadData();\n this.setState({\n isLoading: false,\n data: result\n });\n } catch (e) {\n this.setState({\n isLoading: false,\n errorMessage: (e as { data: CommerceException })?.data?.LocalizedMessage || this.props.resources.genericErrorMessage\n });\n }\n };\n\n private readonly onSearch = (searchText: string): void => {\n this.setState({\n paging: { index: 0 },\n filter: { searchText }\n });\n };\n\n private readonly loadMore = (): void => {\n this.setState({\n paging: { index: this.state.paging.index + 1 }\n });\n };\n\n private readonly sortData = (): Tdata[] => {\n const sorting = this.state.sorting;\n if (!sorting) {\n return this.state.data;\n }\n const { fieldName, ascending } = sorting;\n return this.state.data.sort((item1: Tdata, item2: Tdata) => {\n let value1 = ((item1 as unknown) as { [key: string]: string })[fieldName];\n let value2 = ((item2 as unknown) as { [key: string]: string })[fieldName];\n if (typeof value1 === 'string' && typeof value2 === 'string') {\n value1 = value1.toLowerCase();\n value2 = value2.toLowerCase();\n }\n const compareResult = value1 > value2 ? 1 : value1 < value2 ? -1 : 0;\n return ascending ? compareResult : compareResult * -1;\n });\n };\n\n private readonly filterData = (): Tdata[] => {\n const column = this.props.columns.find(c => c.isSearchable);\n const searchText = this.state.filter.searchText;\n return this.sortData().filter(item => {\n if (!column?.fieldName || !searchText) {\n return true;\n }\n const columnValue = ((item as unknown) as { [key: string]: string })[column.fieldName];\n return columnValue && columnValue.toLowerCase().indexOf(searchText.trim().toLowerCase()) >= 0;\n });\n };\n\n private readonly getDataToDisplay = (): Tdata[] => {\n const itemsCount = (this.props.pageSize || defaultPageSize) * (this.state.paging.index + 1);\n const filteredItems = this.filterData();\n return filteredItems.slice(0, itemsCount);\n };\n\n private readonly hasMore = (): boolean => {\n const itemsCount = (this.props.pageSize || defaultPageSize) * (this.state.paging.index + 1);\n const filteredItems = this.filterData();\n return filteredItems.length > itemsCount;\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\nimport { BusinessPartner, BusinessPartnerUser, BusinessPartnersDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { IBusinessPartnersResources } from '../business-partners.props.autogenerated';\nimport { DataGrid, IDataGridColumn } from './data-grid';\n\n/**\n * View model of business partner user, used to display.\n */\nexport interface IBusinessPartnerUserViewModel extends BusinessPartnerUser {\n name: string;\n spendingLimitStr: string;\n}\n\n/**\n * Props of BusinessPartnerUsersTable.\n */\nexport interface IBusinessPartnerUsersTableProps extends IComponentProps {\n className: string;\n pageSize?: number;\n businessPartner: BusinessPartner;\n resources: IBusinessPartnersResources;\n onSelect(businessPartnerUser: BusinessPartnerUser): void;\n}\n\n/**\n * BusinessPartnerUsersTable component.\n */\nexport class BusinessPartnerUsersTable extends React.Component {\n public shouldComponentUpdate(nextProps: Readonly): boolean {\n return this.props.id !== nextProps.id;\n }\n\n public render(): JSX.Element {\n return (\n \n );\n }\n\n /**\n * Get column definition of the table.\n * @returns - Columns.\n */\n private readonly getColumns = (): IDataGridColumn[] => {\n return [\n {\n reactKey: 'name',\n name: this.props.resources.businessUserTableNameHeadingText,\n fieldName: 'name',\n isSearchable: true,\n onClick: this.props.onSelect\n },\n {\n reactKey: 'email',\n name: this.props.resources.businessUserTableEmailHeadingText,\n fieldName: 'Email',\n onClick: this.props.onSelect\n },\n {\n reactKey: 'spendingLimit',\n name: this.props.resources.businessUserTableSpendingLimitHeadingText,\n className: `${this.props.className}__row__column-with-number`,\n fieldName: 'spendingLimitStr',\n onClick: this.props.onSelect\n }\n ];\n };\n\n /**\n * Call retail proxy to get business partner users.\n * @returns - Business partner users view model.\n */\n private readonly getBusinessPartnerUsers = async (): Promise => {\n const businessPartners = await BusinessPartnersDataActions.getUsersAsync(\n {\n callerContext: this.props.context.actionContext,\n bypassCache: 'get',\n queryResultSettings: {}\n },\n this.props.businessPartner.BusinessPartnerId\n );\n return businessPartners\n .filter(user => user.StatusValue === 1)\n .map(user => ({\n ...user,\n name: `${user.FirstName} ${user.LastName}`,\n spendingLimitStr: !ObjectExtensions.isNullOrUndefined(user.SpendingLimit)\n ? this.props.context.cultureFormatter.formatCurrency(user.SpendingLimit.toString())\n : ''\n }));\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React from 'react';\n\nimport { BusinessPartner, BusinessPartnersDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { IBusinessPartnersResources } from '../business-partners.props.autogenerated';\nimport { DataGrid, IDataGridColumn } from './data-grid';\n\n/**\n * Props of IBusinessPartnersTable.\n */\nexport interface IBusinessPartnersTableProps extends IComponentProps {\n className: string;\n pageSize?: number;\n resources: IBusinessPartnersResources;\n onSelect(businessPartner: BusinessPartner): void;\n}\n\n/**\n * BusinessPartnersTable component.\n */\nexport class BusinessPartnersTable extends React.Component {\n public shouldComponentUpdate(nextProps: Readonly): boolean {\n return this.props.id !== nextProps.id;\n }\n\n public render(): JSX.Element {\n return (\n \n );\n }\n\n /**\n * Get column definition of the table.\n * @returns - Columns.\n */\n private readonly getColumns = (): IDataGridColumn[] => {\n return [\n {\n reactKey: 'name',\n name: this.props.resources.businessPartnerName,\n fieldName: 'Name',\n isSearchable: true,\n onClick: this.props.onSelect\n }\n ];\n };\n\n /**\n * Call retail proxy to get business partners.\n * @returns - Business partners.\n */\n private readonly getBusinessPartners = async () => {\n const businessPartners = await BusinessPartnersDataActions.getManagedBusinessPartnersAsync({\n callerContext: this.props.context.actionContext,\n bypassCache: 'get',\n queryResultSettings: {}\n });\n return businessPartners;\n };\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 { Alert, IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { BusinessPartner, BusinessPartnerUser, CatalogsDataActions, CommerceException } from '@msdyn365-commerce/retail-proxy';\nimport { IBusinessPartnersData } from './business-partners.data';\nimport { IBusinessPartnersProps } from './business-partners.props.autogenerated';\nimport { BusinessPartnerUsersTable } from './components/business-partner-users-table';\nimport { BusinessPartnersTable } from './components/business-partners-table';\n\n/**\n * Props for the module view.\n */\nexport interface IBusinessPartnersViewProps extends IBusinessPartnersProps {\n businessPartnersProps: IModuleProps;\n businessPartnersHeading?: React.ReactNode;\n businessPartnersTable?: React.ReactNode;\n businessPartnerUsersTable?: React.ReactNode;\n backToBusinessPartnersLink?: React.ReactNode;\n catalogLoadingIndicator?: React.ReactNode;\n catalogLoadingErrorMessage?: React.ReactNode;\n selectedBusinessPartnerUser?: BusinessPartnerUser;\n cookieConsentNotGivenErrorMessage?: React.ReactNode;\n}\n\n/**\n * State of BusinessPartners component.\n */\nexport interface IBusinessPartnersState {\n selectedBusinessPartner?: BusinessPartner;\n selectedBusinessPartnerUser?: BusinessPartnerUser;\n isLoadingCatalog?: boolean;\n loadCatalogErrorMessage?: string;\n}\n\n/**\n * The class name root for the module.\n */\nexport const moduleClassName: string = 'ms-business-partners';\n\n/**\n * BusinessPartners component.\n */\nclass BusinessPartners extends React.Component, IBusinessPartnersState> {\n constructor(props: IBusinessPartnersProps) {\n super(props);\n this.state = {};\n }\n\n public componentDidMount() {\n this.props.context.request.cookies.removeAccountSelectionCookie();\n }\n\n public shouldComponentUpdate(nextProps: IBusinessPartnersProps, nextState: IBusinessPartnersState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, pageSize, businessPartnersHeading }\n } = this.props;\n const viewProps: IBusinessPartnersViewProps = {\n ...this.props,\n selectedBusinessPartnerUser: this.state.selectedBusinessPartnerUser,\n businessPartnersProps: {\n moduleProps: this.props,\n className: classname(moduleClassName, className)\n },\n businessPartnersHeading: businessPartnersHeading && businessPartnersHeading.text && (\n \n ),\n businessPartnersTable: !this.state.selectedBusinessPartner ? (\n \n ) : (\n undefined\n ),\n businessPartnerUsersTable: this.state.selectedBusinessPartner ? (\n \n ) : (\n undefined\n ),\n backToBusinessPartnersLink: this.state.selectedBusinessPartner ? (\n {\n this.onSelectBusinessPartner();\n }}\n >\n {this.props.resources.backToBusinessPartnersLink}\n \n ) : (\n undefined\n ),\n catalogLoadingIndicator: this.state.isLoadingCatalog ? (\n {this.props.resources.loadingLabel}\n ) : (\n undefined\n ),\n catalogLoadingErrorMessage: this.state.loadCatalogErrorMessage ? (\n {this.state.loadCatalogErrorMessage}\n ) : (\n undefined\n ),\n cookieConsentNotGivenErrorMessage: !this.props.context.request.cookies.isConsentGiven() ? (\n {this.props.resources.cookieConsentRequiredMessage}\n ) : (\n undefined\n )\n };\n return this.props.renderView(viewProps);\n }\n\n /**\n * Event handler of business partner selection.\n * @param businessPartner - Selected business partner.\n */\n private readonly onSelectBusinessPartner = (businessPartner?: BusinessPartner) => {\n this.setState({\n selectedBusinessPartner: businessPartner\n });\n };\n\n /**\n * Event handler of business partner user selection.\n * @param businessPartnerUser - Selected business partner user.\n */\n private readonly onSelectBusinessPartnerUser = async (businessPartnerUser: BusinessPartnerUser) => {\n if (businessPartnerUser.AccountNumber) {\n this.setState({\n selectedBusinessPartnerUser: businessPartnerUser\n });\n\n this.props.context.request.cookies.setAccountSelectionCookie(true, businessPartnerUser.AccountNumber);\n const catalogId = await this.getCustomerDefaultCatalogId();\n const homeUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext);\n if (homeUrl && Msdyn365.msdyn365Commerce.isBrowser && catalogId !== undefined) {\n const fullUrl = new URL(homeUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${catalogId}`);\n window.location.href = fullUrl.href;\n } else {\n this.props.context.request.cookies.removeAccountSelectionCookie();\n }\n }\n };\n\n /**\n * Get the first catalog ID of the selected customer. Customer account number is passed in CAN header.\n */\n private readonly getCustomerDefaultCatalogId = async (): Promise => {\n this.setState({\n isLoadingCatalog: true\n });\n\n const requestContext = this.props.context.request;\n const channelId = requestContext.apiSettings.channelId ? Number(requestContext.apiSettings.channelId) : 0;\n\n try {\n const productCatalogs = await CatalogsDataActions.getCatalogsAsync(\n { callerContext: this.props.context.actionContext },\n channelId,\n true\n );\n this.setState({\n isLoadingCatalog: false\n });\n return productCatalogs[0]?.RecordId || 0;\n } catch (e) {\n this.setState({\n isLoadingCatalog: false,\n loadCatalogErrorMessage:\n (e as { data: CommerceException })?.data?.LocalizedMessage || this.props.resources.genericErrorMessage\n });\n return undefined;\n }\n };\n}\n\nexport default BusinessPartners;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBusinessPartnersViewProps } from './business-partners';\n\n/**\n * View layout of business partner module.\n * @param props - React props of the component.\n * @returns Functional component.\n */\nconst businessPartnersView: React.FC = props => {\n if (props.selectedBusinessPartnerUser) {\n return (\n \n {props.businessPartnersHeading}\n {props.catalogLoadingIndicator}\n {props.catalogLoadingErrorMessage}\n \n );\n }\n\n if (props.cookieConsentNotGivenErrorMessage) {\n return (\n \n {props.businessPartnersHeading}\n {props.cookieConsentNotGivenErrorMessage}\n \n );\n }\n\n return (\n \n {props.backToBusinessPartnersLink}\n {props.businessPartnersHeading}\n {props.businessPartnersTable}\n {props.businessPartnerUsersTable}\n \n );\n};\n\nexport default businessPartnersView;\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 { ICookieSetOptions, IImageDimension, ILocaleItems } from '@msdyn365-commerce/core-internal';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICountryPickerData } from './country-picker.data';\nimport { IActionLinkData, ICountryPickerProps } from './country-picker.props.autogenerated';\n\n/**\n * CountryPicker view props interface.\n */\nexport interface ICountryPickerViewProps extends ICountryPickerProps {\n modalContainer: IModuleProps;\n modalHeaderContainer: INodeProps;\n modalFooterContainer: INodeProps;\n modalBodyContainer: INodeProps;\n heading?: React.ReactNode;\n subheading?: React.ReactNode;\n link?: React.ReactNode;\n countryList?: React.ReactNode[];\n isModalOpen?: boolean;\n state?: ICountryPickerState;\n stayOnCurrentSiteButton?: React.ReactNode;\n}\n\n/**\n * ICountryPickerState: Interface for Country picker State.\n */\nexport interface ICountryPickerState {\n isModalOpen: boolean;\n}\n\n/**\n *\n * CountryPicker component.\n * @extends {React.PureComponent>}\n */\nexport class CountryPicker extends React.PureComponent, ICountryPickerState> {\n private readonly _telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n private readonly _preferredSiteStorageKey: string = '_msdyn365___site_';\n\n private readonly _cookieExpirationTime = 5_184_000;\n\n public constructor(props: ICountryPickerProps) {\n super(props);\n let isCookieValueSet: boolean = false;\n if (props.context.request.cookies.get(this._preferredSiteStorageKey).value) {\n isCookieValueSet = true;\n }\n this.state = {\n isModalOpen: !isCookieValueSet && this.props.context.request.marketSettings !== undefined\n };\n }\n\n public render(): JSX.Element | null {\n const { heading, subheading, countryList, actionLink } = this.props.config;\n\n const isConsentGiven = this.props.context.request.cookies.isConsentGiven();\n\n if (!isConsentGiven) {\n return null;\n }\n\n const countryPickerHeading = heading && (\n \n );\n\n const countryPickerSubHeading = subheading && (\n \n );\n\n const countryPickerActionLink = actionLink && this.createLink(actionLink);\n const currentSiteButton = (\n \n );\n\n const viewprops: ICountryPickerViewProps = {\n ...this.props,\n state: this.state,\n isModalOpen: this.state.isModalOpen,\n modalContainer: {\n moduleProps: this.props,\n tag: Modal,\n className: 'ms-country-picker__dialog',\n isOpen: true,\n 'aria-label': 'country-picker',\n toggle: this.closeModal,\n modalTransition: { timeout: 0 },\n shouldUpdateFocusToFirstElement: true\n },\n modalHeaderContainer: {\n tag: ModalHeader,\n className: 'ms-country-picker__modal-header',\n toggle: this.closeModal,\n closeButtonTabIndex: 1\n },\n modalFooterContainer: {\n tag: ModalFooter,\n className: 'ms-countryPicker__modal-footer'\n },\n modalBodyContainer: {\n tag: ModalBody,\n className: 'ms-counrtyPicker__modal-body'\n },\n heading: countryPickerHeading,\n subheading: countryPickerSubHeading,\n link: countryPickerActionLink,\n countryList: countryList && this.renderCountryList(),\n stayOnCurrentSiteButton: currentSiteButton\n };\n\n return this.props.renderView(viewprops);\n }\n\n /**\n * Initiate close modal.\n */\n public readonly closeModal = (): void => {\n this.setState({\n isModalOpen: false\n });\n };\n\n public handleParagraphChange(event: MsDyn365.ContentEditableEvent): void {\n this.props.config.subheading = event.target.value;\n }\n\n public handleTextChange(event: MsDyn365.ContentEditableEvent): void {\n this.props.config.heading!.text = event.target.value;\n }\n\n public handleLinkTextChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.actionLink?.linkText) {\n this.props.config.actionLink.linkText = event.target.value;\n }\n }\n\n public createLink(link?: IActionLinkData): React.ReactNode | null {\n if (!StringExtensions.isNullOrEmpty(link?.linkUrl.destinationUrl)) {\n const linkText = link?.linkText ?? '';\n const payLoad = getPayloadObject('click', this._telemetryContent, '', '');\n const attributes = getTelemetryAttributes(this._telemetryContent, payLoad);\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: link?.ariaLabel,\n className: 'ms-countryPicker__link',\n linkText,\n linkUrl: link?.linkUrl.destinationUrl,\n openInNewTab: link?.openInNewTab,\n role: 'link',\n additionalProperties: attributes!,\n onClick: onTelemetryClick(this._telemetryContent, payLoad, linkText)\n };\n return (\n \n );\n }\n return null;\n }\n\n public renderCountryList(): React.ReactNode[] | undefined {\n const marketSettings = this.props.context.request.marketSettings;\n if (!marketSettings) {\n return undefined;\n }\n const localeItems = marketSettings.localeItems;\n const countryLinks = localeItems.map((value: ILocaleItems) => {\n return this.renderCountry(value);\n });\n\n return countryLinks;\n }\n\n public renderCountry(localeItem: ILocaleItems): React.ReactNode | null {\n const countryList = this.props.config.countryList;\n let baseUrl = localeItem.localeBaseUrl;\n baseUrl = this._appendProtocolToUrl(baseUrl);\n const matchedCountryItem = countryList?.find(item => item.url === baseUrl);\n if (!matchedCountryItem) {\n return null;\n }\n const imageSize: IImageDimension = { q: 'w=48&h=48&m=6', w: 0, h: 0 };\n const defaultImageSettings: MsDyn365.IImageSettings = {\n viewports: {\n xs: imageSize,\n lg: imageSize,\n xl: imageSize\n },\n lazyload: true\n };\n const image = matchedCountryItem.image;\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings!,\n imageSettings: image?.imageSettings ?? defaultImageSettings\n };\n return (\n \n {image && (\n \n )}\n
\n {matchedCountryItem.displayString}\n {matchedCountryItem.displaySubString}\n
\n \n );\n }\n\n /**\n * Writes the current site base url to cookie and closes the country picker modal dialog.\n */\n private readonly _handleStayOnSiteButtonClick = (): void => {\n const currentBaseUrl = this.props.context.request.marketSettings?.currentBaseUrl;\n if (currentBaseUrl) {\n const urlToStore = this._appendProtocolToUrl(currentBaseUrl);\n this._writeToCookie(this._preferredSiteStorageKey, urlToStore);\n }\n this.closeModal();\n };\n\n /**\n * Handles click event of country selection.\n * @param storageKey - Cookie storage key.\n * @param storageValue - Preffered site url.\n * @returns - This method just writes the cookie to the browser.\n */\n private readonly _handleClick = (storageKey?: string, storageValue?: string) => () => {\n this._writeToCookie(storageKey, storageValue);\n };\n\n /**\n * Handles click event of country selection.\n * @param storageKey - Cookie storage key.\n * @param storageValue - Preffered site url.\n */\n private readonly _writeToCookie = (storageKey?: string, storageValue?: string): void => {\n if (!storageKey || !storageValue) {\n return;\n }\n const cookieOptions: ICookieSetOptions = { secure: true, sameSite: 'none' };\n cookieOptions.maxAge = this._cookieExpirationTime;\n this.props.context.request.cookies.set(storageKey, storageValue, cookieOptions);\n };\n\n /**\n * Appends protocol to an url.\n * @param baseUrl - Url to be formatted.\n * @returns - URL after appending protocol.\n */\n private readonly _appendProtocolToUrl = (baseUrl: string): string => {\n return !baseUrl.includes('https://') ? `https://${baseUrl}` : baseUrl;\n };\n}\n\nexport default CountryPicker;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICountryPickerViewProps } from './country-picker';\n\n/**\n * Functional component which renders country picker module.\n * @param props - Configuration for the country picker component.\n * @returns React.FC - Functional component of the country picker module.\n */\nexport const countryPickerView: React.FC = (props: ICountryPickerViewProps) => {\n const {\n isModalOpen,\n modalContainer,\n modalHeaderContainer,\n modalBodyContainer,\n heading,\n modalFooterContainer,\n subheading,\n link,\n countryList,\n stayOnCurrentSiteButton\n } = props;\n return isModalOpen && countryList ? (\n \n \n {heading}\n {subheading}\n \n \n {countryList.map(country => (\n <>{country}\n ))}\n \n \n {stayOnCurrentSiteButton}\n {link}\n \n \n ) : null;\n};\n\nexport default countryPickerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { IHeaderViewProps } from '@msdyn365-commerce-modules/header';\nimport { Collapse, Drawer, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nconst headerView: React.FC = props => {\n const { HeaderTag, HeaderContainer, HeaderTopBarContainer, Divider } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {_renderAccountBlock(props, false)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n {_renderCollapseMenu(props)}\n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderCollapseMenu(props: IHeaderViewProps): JSX.Element | null {\n const { Divider, MobileMenuLinksContainer, mobileMenuCollapsed } = props;\n return (\n \n \n {_renderReactFragment(props.search)}\n {_renderMobileAccountBlock(props, true)}\n {props.wishListIconMobile}\n {props.siteOptions}\n \n \n {_renderReactFragment(props.menuBar)}\n \n );\n}\n\nconst renderCustomerName = (accountInformation: AsyncResult): React.ReactChild => {\n const customer = accountInformation && accountInformation.result;\n return <>{customer ? customer.FirstName || customer.Name : ''};\n};\n\nfunction _renderMobileAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\n const { AccountInfoDropdownParentContainer, signOutLink, signInLink, data, accountLinks } = props;\n\n if (AccountInfoDropdownParentContainer) {\n const accountClassName = classnames(\n 'ms-header__drawer',\n AccountInfoDropdownParentContainer.className,\n renderForMobile ? 'account-mobile' : 'account-desktop'\n );\n\n if (accountLinks) {\n return (\n \n
\n {accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false}\n {signOutLink}\n
\n \n );\n } else if (signInLink) {\n return (\n \n {signInLink}\n \n );\n }\n }\n return null;\n}\n\nfunction _renderAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n const accountClassName = classnames(\n AccountInfoDropdownParentContainer.className,\n renderForMobile ? 'account-mobile' : 'account-desktop'\n );\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n {accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false}\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return (\n \n {signInLink}\n \n );\n }\n }\n\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst SearchResultContainerView: React.FC = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n \n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n {similarLookProduct}\n \n {errorMessage}\n {products}\n \n {pagination}\n \n );\n }\n return (\n \n {categoryHierarchy && {renderCategoryHierarchy(categoryHierarchy)}}\n \n {refineMenu && renderRefiner(refineMenu)}\n \n {similarLookProduct}\n
\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n
\n
\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n
\n \n {errorMessage}\n {products}\n \n {pagination}\n
\n
\n
\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return {sortByDropDown};\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n \n {categoryHierarchyList.map((category, index) => (\n \n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n \n ))}\n \n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n \n

\n {title.titlePrefix}\n {title.titleText}({title.titleCount})\n

\n
\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Heading, IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IHeadingData, IIframeConfig, IIframeProps } from './iframe.props.autogenerated';\n\nexport interface IIframeViewProps extends IIframeProps {\n Heading: React.ReactNode;\n IframeContainer: IModuleProps;\n IFrame: React.ReactNode;\n alert?: React.ReactNode;\n cookieConsentAccepted?: boolean;\n}\n\n/**\n *\n * Iframe component.\n * @extends {React.PureComponent}\n */\nclass Iframe extends React.PureComponent> {\n private readonly iframeRef: React.RefObject;\n\n constructor(props: IIframeProps) {\n super(props);\n this.iframeRef = React.createRef();\n }\n\n public render(): JSX.Element | null {\n const { config, resources } = this.props;\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n if (!(config && config.target && config.target.destinationUrl)) {\n return null;\n }\n\n let srcURL;\n try {\n srcURL = new URL(config.target.destinationUrl);\n } catch (error) {\n this.props.telemetry.exception(error);\n return null;\n }\n\n if (srcURL && srcURL.protocol && srcURL.protocol.toLocaleLowerCase() !== 'https:') {\n return null;\n }\n const iframeClassName = classnames('ms-iframe', config.className);\n\n let viewProps: IIframeViewProps = {\n ...(this.props as IIframeProps),\n Heading: this._createHeading(config.heading!),\n IframeContainer: {\n moduleProps: this.props,\n className: iframeClassName\n },\n IFrame: this._createIframe()\n };\n\n if (!isConsentGiven) {\n viewProps = {\n ...viewProps,\n alert: this._renderAlert(resources.cookieConsentRequiredMessage)\n };\n } else {\n viewProps = {\n ...viewProps,\n cookieConsentAccepted: true\n };\n }\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\n if (!heading || !heading.text || heading.text.length === 0) {\n return null;\n }\n\n return ;\n }\n\n private _renderAlert(message: string): React.ReactNode | null {\n return (\n

\n {message}\n

\n );\n }\n\n private _createIframe(): React.ReactNode | null {\n const { config } = this.props;\n const targetURL = config.target.destinationUrl;\n\n return (\n \n );\n }\n}\n\nexport default Iframe;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IIframeViewProps } from './iframe';\n\n/**\n *\n * IFrameView component.\n * @extends {React.PureComponent}\n */\nexport class IFrameView extends React.PureComponent {\n public render(): JSX.Element | null {\n const { Heading, IframeContainer, IFrame, alert, cookieConsentAccepted } = this.props;\n\n return (\n \n {alert}\n {cookieConsentAccepted && cookieConsentAccepted ? (\n <>\n {Heading}\n {IFrame}\n \n ) : null}\n \n );\n }\n}\nexport default IFrameView;\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 { Button, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISubscribeConfig, ISubscribeProps } from './subscribe.props.autogenerated';\n\n/**\n * Subscribe view props.\n */\nexport interface ISubscribeViewProps extends ISubscribeProps {\n subscribe: IModuleProps;\n subscribeContainer: INodeProps;\n heading: React.ReactNode;\n text: React.ReactNode;\n submitButton?: INodeProps;\n submitButtonLabelText?: string;\n subscribeForm?: INodeProps;\n emailInput?: INodeProps;\n handleText(): void;\n}\n\n/**\n * Subscribe component.\n * @extends {React.PureComponent>}\n */\nexport class Subscribe extends React.PureComponent> {\n private readonly _emailAddressInputRef: React.RefObject;\n\n public constructor(props: ISubscribeViewProps) {\n super(props);\n this._emailAddressInputRef = React.createRef();\n }\n\n public render(): JSX.Element | null {\n const { heading, paragraph } = this.props.config;\n\n const moduleClassName = 'ms-subscribe';\n\n const subscribeParagraph = paragraph && (\n \n );\n\n const subscribeHeading = heading && (\n \n );\n const viewProps = {\n ...this.props,\n handleText: this.handleTextChange,\n subscribe: {\n moduleProps: this.props,\n className: moduleClassName\n },\n subscribeContainer: {\n className: 'ms-subscribe__details'\n },\n heading: subscribeHeading,\n text: subscribeParagraph,\n subscribeForm: {\n className: 'ms-subscribe__details__form',\n tag: 'form',\n 'aria-label': this.props.resources.subscribeFormAriaLabel,\n name: 'subscribeForm',\n role: 'form',\n autoComplete: 'off'\n },\n emailInput: {\n className: 'ms-subscribe__details__form__email',\n tag: 'input',\n ref: this._emailAddressInputRef,\n type: 'email',\n 'aria-label': this.props.resources.subscribeFormEmailAriaLabel,\n placeholder: this.props.resources.subscribeEmailPlaceholderText\n },\n submitButton: {\n className: 'ms-subscribe__details__form__submit',\n tag: Button,\n 'aria-label': this.props.resources.subscribeFormSubmitAriaLabel,\n type: 'submit',\n title: this.props.resources.subscribeButtonLabel\n },\n submitButtonLabelText: this.props.resources.subscribeButtonLabel\n };\n\n return this.props.renderView(viewProps);\n }\n\n /**\n * Handle text change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * Handle paragraph change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n}\n\nexport default Subscribe;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISubscribeViewProps } from './subscribe';\n\n/**\n * Override form action and button action below.\n * @param event - The form event.\n */\nconst onSubmit = (event: React.FormEvent): void => {\n event.preventDefault();\n};\n\n/**\n * View component.\n * @param props - The view properties.\n * @returns - Returns nothing.\n */\nexport const subscribeView: React.FC = props => {\n const { subscribe, subscribeContainer, heading, text, subscribeForm, emailInput, submitButton } = props;\n return (\n \n \n {heading}\n {text}\n \n \n \n {props.submitButtonLabelText}\n \n \n \n \n );\n};\n\nexport default subscribeView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ITabItemData } from './tab-item.data';\nimport { ITabItemProps } from './tab-item.props.autogenerated';\n\nexport interface ITabItemViewProps {\n TabContentContainer: IModuleProps;\n TabHeaderContainer: IModuleProps;\n tabSlots: INodeProps;\n TabItemContent: INodeProps;\n tabItemType?: TabItemType;\n tabHeader: React.ReactNode;\n}\n\nexport interface ITabItemExtentedProps extends ITabItemProps {\n tabItemType?: TabItemType;\n isSelected?: boolean;\n itemIndex?: number;\n tabId?: string;\n}\n\nexport enum TabItemType {\n TabHeader,\n TabContent\n}\n\n/**\n *\n * TabItem component.\n * @extends {React.Component}\n */\n@observer\nclass TabItem extends React.PureComponent {\n private readonly moduleContentClassName: string = 'ms-tab-item-content';\n\n private readonly moduleHeaderClassName: string = 'ms-tab-item-header';\n\n constructor(props: ITabItemProps) {\n super(props);\n this._renderTabHeader = this._renderTabHeader.bind(this);\n }\n\n public render(): JSX.Element {\n const { slots, renderView, config, data, isSelected, itemIndex } = this.props;\n const index = itemIndex || 0;\n const contentID = getContentID(index, this.props.tabId || '');\n const activeContentIDResult = data && data.activeTabState && data.activeTabState.result;\n const shown =\n activeContentIDResult &&\n activeContentIDResult.tabId === this.props.tabId &&\n activeContentIDResult.activeContentIndex !== undefined\n ? activeContentIDResult.activeContentIndex === index\n : isSelected || false;\n const viewProps = {\n ...this.props,\n TabContentContainer: {\n moduleProps: this.props,\n className: classnames(this.moduleContentClassName, config.className)\n },\n TabHeaderContainer: {\n moduleProps: this.props,\n className: classnames(this.moduleHeaderClassName, config.className)\n },\n TabItemContent: {\n className: 'ms-tab-item-content__content',\n tag: 'section' as NodeTag,\n 'aria-hidden': !shown,\n role: 'tabpanel',\n tabIndex: shown ? 0 : -1,\n id: contentID\n },\n tabHeader: this._renderTabHeader(),\n tabSlots: slots\n };\n return renderView(viewProps) as React.ReactElement;\n }\n\n private _renderTabHeader(): React.ReactNode {\n return <>{this.props.config.tabItemTitle};\n }\n}\n\nexport const getContentID = (index: number, id: string) => {\n return `tab-item-content-${id}-${index}`;\n};\n\nexport default TabItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ITabItemViewProps, TabItemType } from './tab-item';\n\nconst TabItemView: React.FC = props => {\n const { tabItemType, tabSlots, TabContentContainer, TabHeaderContainer, TabItemContent, tabHeader } = props;\n\n switch (tabItemType) {\n case TabItemType.TabContent:\n return (\n \n \n {tabSlots &&\n tabSlots.tabItemContent &&\n tabSlots.tabItemContent.length &&\n _renderTabItemContent(tabSlots.tabItemContent)}\n \n \n );\n case TabItemType.TabHeader:\n return {tabHeader};\n default:\n return null;\n }\n};\n\nconst _renderTabItemContent = (items: React.ReactNode[]): JSX.Element | null => {\n return (\n <>\n {items && items.length > 0\n ? items.map((item: React.ReactNode, index: number) => {\n return {item};\n })\n : null}\n \n );\n};\nexport default TabItemView;\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 { IModuleProps, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createTabStateInput, getContentID, TabItemType } from '../..';\nimport { ITabData } from './tab.data';\nimport { ITabProps } from './tab.props.autogenerated';\n\n/**\n *\n * Tab component.\n * @extends {React.PureComponent>}\n */\n\nexport interface ICallToActionProps {\n link: INodeProps[];\n}\n\nexport interface ITabViewProps extends ITabProps<{}> {\n heading?: React.ReactNode;\n TabContainer: IModuleProps;\n headerSection: INodeProps;\n tabHeaderSection: INodeProps;\n tabsSection: INodeProps;\n tabItemContainer: INodeProps;\n tabHeaders: React.ReactNode;\n tabContents: React.ReactNode;\n}\n\nexport interface ITabViewStates {\n currentTabIndex: number;\n}\n\n/**\n *\n * Tab component.\n * @extends {React.Component>}\n */\n@observer\nclass Tab extends React.Component, ITabViewStates> {\n public readonly tabIndexQuery: string = 'activeTab';\n\n private activeLink: HTMLLIElement | null;\n\n constructor(props: ITabProps) {\n super(props);\n const { defaultTabIndex } = this.props.config;\n const { slots } = this.props;\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n let initialIndex = defaultTabIndex && defaultTabIndex <= slotLength && defaultTabIndex > 0 ? defaultTabIndex - 1 : 0;\n const queryString: string =\n (this.props.context &&\n this.props.context.request &&\n this.props.context.request.query &&\n this.props.context.request.query.activeTab) ||\n '';\n let queryTabIndex: number = 0;\n if (queryString.indexOf(':') > 0) {\n const arr = queryString.split(':');\n const moduleId = arr[0];\n if (moduleId === this.props.id) {\n queryTabIndex = Number.parseInt(arr[1], 10);\n }\n }\n initialIndex = queryTabIndex > 0 && queryTabIndex <= slotLength ? queryTabIndex - 1 : initialIndex;\n this.state = { currentTabIndex: initialIndex };\n\n this._getTabHeader = this._getTabHeader.bind(this);\n this._getTabContent = this._getTabContent.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onKeyDown = this._onKeyDown.bind(this);\n this._setGetParameter = this._setGetParameter.bind(this);\n this.activeLink = null;\n }\n\n public shouldComponentUpdate(nextProps: ITabProps, nextState: ITabViewStates): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { slots } = this.props;\n const { heading, className } = this.props.config;\n\n const headingComponent = heading && (\n \n );\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n\n // Const queryTabIndex = this.props.context && this.props.context.request && this.props.context.request.query && +this.props.context.request.query.activeTabIndex || 0;\n // let activeIndex = defaultTabIndex && defaultTabIndex <= slotLength && defaultTabIndex > 0 ? defaultTabIndex - 1 : 0;\n // activeIndex = queryTabIndex > 0 && queryTabIndex <= slotLength ? queryTabIndex - 1 : activeIndex;\n\n const tabViewProps = {\n ...this.props,\n TabContainer: {\n moduleProps: this.props,\n className: classnames('ms-tab', className)\n },\n headerSection: { className: 'ms-tab-header-section' },\n tabsSection: { className: 'ms-tab-tabs-section', tag: 'ul' as NodeTag, role: 'tablist' },\n heading: headingComponent,\n config: this.props && this.props.config,\n tabItemContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-tab-content-section'\n },\n tabContents: slotLength > 0 && slots.tabItems.map((item: React.ReactNode, index: number) => this._getTabContent(item, index)),\n tabHeaders: slotLength > 0 && slots.tabItems.map((item: React.ReactNode, index: number) => this._getTabHeader(item, index))\n };\n return this.props.renderView(tabViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: MsDyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public componentDidUpdate(): void {\n const { data } = this.props;\n if (!this.props.context.request.params.isEditor) {\n const dataActionTabId = data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.tabId;\n if (dataActionTabId) {\n if (this.props.id === dataActionTabId) {\n this.activeLink && this.activeLink.focus();\n }\n } else {\n const queryString: string =\n (this.props.context &&\n this.props.context.request &&\n this.props.context.request.query &&\n this.props.context.request.query.activeTab) ||\n '';\n if (queryString.indexOf(':') > 0) {\n const arr = queryString.split(':');\n const moduleId = arr[0];\n if (moduleId === this.props.id) {\n this.activeLink && this.activeLink.focus();\n }\n }\n }\n }\n }\n\n /**\n *Set the activate link value on tab click.\n * @param link -Ref link value.\n */\n private readonly _refHandler = (link: HTMLLIElement | null) => {\n this.activeLink = link;\n };\n\n private _getTabHeader(item: React.ReactNode, index: number): React.ReactNode {\n const { data } = this.props;\n const activeContentIndex =\n data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.activeContentIndex;\n const dataActionTabId = data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.tabId;\n const selected =\n activeContentIndex !== undefined && dataActionTabId === this.props.id\n ? activeContentIndex === index\n : this.state.currentTabIndex === index;\n const contentID = getContentID(index, this.props.id);\n\n return (\n \n \n {React.cloneElement(item as React.ReactElement, {\n tabItemType: TabItemType.TabHeader,\n isSelected: index === this.state.currentTabIndex,\n itemIndex: index,\n tabId: this.props.id\n })}\n \n \n );\n }\n\n private readonly _onClick = (index: number, id: string) => (e: React.MouseEvent) => {\n const activeTabState = { activeContentIndex: index, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 1)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n };\n\n private readonly _onKeyDown = (index: number, id: string) => (e: React.KeyboardEvent) => {\n if (e.keyCode === 13) {\n const activeTabState = { activeContentIndex: index, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 1)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n }\n\n if (e.keyCode === 39 || e.keyCode === 37) {\n const { slots } = this.props;\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n\n if (e.keyCode === 39) {\n // If we're at the end, go to the start\n if (index + 1 === slotLength) {\n index = -1;\n }\n const activeTabState = { activeContentIndex: index + 1, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index + 1 });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 2)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n\n // Move left\n } else if (e.keyCode === 37) {\n // If we're at the start, move to the end\n if (index === 0) {\n index = slotLength;\n }\n const activeTabState = { activeContentIndex: index - 1, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index - 1 });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n }\n }\n };\n\n private _getTabContent(item: React.ReactNode, index: number): React.ReactNode {\n return (\n \n {React.cloneElement(item as React.ReactElement, {\n tabItemType: TabItemType.TabContent,\n isSelected: index === this.state.currentTabIndex,\n itemIndex: index,\n tabId: this.props.id\n })}\n \n );\n }\n\n private _setGetParameter(requestContext: MsDyn365.IRequestContext, paramName: string, paramValue: string): string {\n let url;\n\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n url = new URL(window.location.href);\n } else {\n url = new URL(requestContext.url.requestUrl.href);\n }\n\n const params = new window.URLSearchParams(url.search);\n params.set(paramName, paramValue);\n url.search = decodeURIComponent(params.toString());\n return url.toString();\n }\n}\n\nexport default Tab;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ITabViewProps } from './tab';\n\nconst tabView: React.FC = props => {\n const { heading, TabContainer, tabHeaders, tabContents } = props;\n if (!props.heading && !props.tabHeaders && !props.tabContents) {\n props.context.telemetry.error('Tab content is empty, module wont render');\n return null;\n }\n return (\n \n {heading}\n {tabHeaders}\n {tabContents}\n \n );\n};\n\nexport default tabView;\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../tile-list-item.props.autogenerated';\n\n/**\n * Tile List links.\n */\nexport interface ITileListLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ITileListLinks component.\n * @extends {React.PureComponent}\n */\nexport class TileListLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n
\n {editableLinks && ArrayExtensions.hasElements(editableLinks) ? (\n \n ) : null}\n
\n );\n }\n\n /**\n * ITileListLinks component.\n * @param linkdata - Link data.\n * @returns Editable links.\n */\n private readonly _mapEditableLinks = (linkdata: ILinksData[]): Msdyn365.ILinksData[] | null => {\n if (!ArrayExtensions.hasElements(linkdata)) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n for (const link of linkdata) {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-tile-list__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'button',\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n }\n\n return editableLinks;\n };\n}\nexport default TileListLinks;\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 { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { TileListLinks } from './components';\nimport { IHeadingData, ITileListItemProps } from './tile-list-item.props.autogenerated';\n\n/**\n * Tile-list-item view props.\n */\nexport interface ITileListItemViewProps extends ITileListItemProps<{}> {\n heading?: React.ReactNode;\n paragraph?: React.ReactNode;\n links?: React.ReactNode;\n backgroundImage?: React.ReactNode;\n thumbnailImage?: React.ReactNode;\n tileListItem: IModuleProps;\n tileListContainer: INodeProps;\n tileListImageContainer: INodeProps;\n tileListThumbnailImageContainer: INodeProps;\n tileListHeadingContainer: INodeProps;\n}\n\n/**\n *\n * TileListItem component.\n * @extends {React.PureComponent>}\n */\nexport class TileListItem extends React.PureComponent> {\n private readonly _telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public constructor(props: ITileListItemProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { heading, paragraph, backgroundImage, thumbnailImage, redirectionUrl, links } = this.props.config;\n const tileListLinks = links && ArrayExtensions.hasElements(links) && (\n \n );\n const tileListLinkContainer = {\n tag: 'a' as NodeTag,\n className: 'ms-tile-list-container',\n role: 'link',\n href: redirectionUrl?.linkUrl.destinationUrl,\n 'aria-label': redirectionUrl?.ariaLabel\n };\n\n const tileListButtonContainer = {\n tag: 'button' as NodeTag,\n className: 'ms-tile-list-container'\n };\n const viewProps: ITileListItemViewProps = {\n ...this.props,\n heading: this._createHeading(heading),\n paragraph: this._createParagraph(paragraph),\n backgroundImage: this._renderBackgroundImage(backgroundImage),\n thumbnailImage: this._renderThumbnailImage(thumbnailImage),\n links: tileListLinks,\n tileListItem: {\n moduleProps: this.props,\n className: ''\n },\n tileListContainer: redirectionUrl ? tileListLinkContainer : tileListButtonContainer,\n tileListImageContainer: {\n className: 'ms-tile-list__image'\n },\n tileListThumbnailImageContainer: {\n className: 'ms-tile-list__thumbnail_image',\n 'aria-hidden': 'true'\n },\n tileListHeadingContainer: {\n className: 'ms-tile-list__heading'\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles heading content change event.\n * @param event - Content editable event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * Handles paragraph content change event.\n * @param event - Content editable event.\n */\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n /**\n * Handles paragraph content change event.\n * @param linkIndex - Index of link in linkarray.\n * @returns Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.links?.[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n };\n\n private _createParagraph(text?: Msdyn365.RichText): React.ReactNode | null {\n if (!text) {\n return null;\n }\n return (\n \n );\n }\n\n private _createHeading(heading?: IHeadingData): React.ReactNode | null {\n if (!heading) {\n return null;\n }\n if (StringExtensions.isNullOrWhitespace(heading.text)) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _renderBackgroundImage(item?: Msdyn365.IImageData, isAriaHiddenAttribute?: boolean): React.ReactNode | null {\n // If image is null, we want to render the placeholder SVG - by passing image data with empty src\n\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=328&h=412&m=6', w: 328, h: 412 },\n sm: { q: 'w=328&h=412&m=6', w: 328, h: 412 },\n md: { q: 'w=315&h=412&m=6', w: 315, h: 412 },\n lg: { q: 'w=315&h=412&m=6', w: 315, h: 412 },\n xl: { q: 'w=315&h=412&m=6', w: 315, h: 412 }\n },\n lazyload: true\n };\n const verifiedImageSettings = item?.imageSettings?.viewports ? item.imageSettings : defaultImageSettings;\n\n return (\n \n );\n }\n\n private _renderThumbnailImage(\n item?: Msdyn365.IImageData,\n itemImageSettings?: Msdyn365.IImageSettings,\n isAriaHiddenAttribute?: boolean\n ): React.ReactNode | null {\n if (!item) {\n return null;\n }\n if (StringExtensions.isNullOrWhitespace(item.src)) {\n return null;\n }\n\n return (\n \n );\n }\n}\n\nexport default TileListItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ITileListItemViewProps } from './tile-list-item';\n\n/**\n *\n * ITileListItemViewProps component.\n * @param props - Component props.\n * @returns TileListView.\n */\nconst renderTileListItemContent = (props: ITileListItemViewProps): JSX.Element => {\n const {\n heading,\n paragraph,\n backgroundImage,\n links,\n thumbnailImage,\n tileListContainer,\n tileListImageContainer,\n tileListThumbnailImageContainer,\n tileListHeadingContainer\n } = props;\n\n return (\n \n {backgroundImage}\n \n {heading}\n {paragraph}\n {links}\n \n {thumbnailImage}\n \n );\n};\n\n/**\n *\n * TileListItemViewProps component.\n * @param props - Component props.\n * @returns TileListView.\n */\nexport const TileListItemViewComponent: React.FC = props => {\n const { tileListItem } = props;\n return {renderTileListItemContent(props)};\n};\n\nexport default TileListItemViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { format, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\n/**\n * ICartIconData: Interface for Cart Icon Data.\n */\nexport interface ICartIconData {\n cart?: ICartState;\n}\n\n/**\n * ICartIconComponentProps: Interface for Cart Icon component props.\n */\nexport interface ICartIconComponentProps extends IComponentProps {\n className?: string;\n cartLabel: string;\n cartQtyLabel: string;\n telemetryContent?: ITelemetryContent;\n salesAgreementPricePrompt?: string;\n}\n\n/**\n * ICartIconComponent: Interface for Cart Icon component.\n */\nexport interface ICartIconComponent extends IComponent {}\n\nconst CartIconComponentActions = {};\n\n/**\n *\n * CartIcon component.\n * @extends {React.FC}\n */\nconst CartIcon: React.FC = observer((props: ICartIconComponentProps) => {\n const {\n cartLabel,\n cartQtyLabel,\n data: { cart }\n } = props;\n const defaultCartItemCount: number = 0;\n\n const cartItem = cart ? cart.totalItemsInCart : defaultCartItemCount;\n let qtyLabel: string = '';\n const cartMaxQuantity: number = 99;\n const maxQuantityLabel: string = '99+';\n if (cartItem > cartMaxQuantity) {\n qtyLabel = maxQuantityLabel;\n } else {\n qtyLabel = format(cartQtyLabel, cartItem);\n }\n const label = format(cartLabel, cartItem);\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', props.telemetryContent!, 'cart-icon', '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n const style: React.CSSProperties = {\n visibility: cart ? 'visible' : 'hidden'\n };\n return (\n
\n
\n {qtyLabel}\n
\n
\n );\n});\n\nexport const CartIconComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\n // @ts-expect-error -- Compatible issue with the component override.\n ICartIconComponent\n>('CartIcon', { component: CartIcon, ...CartIconComponentActions });\n\nexport default CartIconComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * IPromoCodeProps: Interface for promo code component.\n */\nexport interface IPromoCodeProps extends IComponentProps<{}> {\n cart: ICartState | undefined;\n promoCodeHeadingText: string;\n appliedPromoCodeHeadingText: string;\n removePromoAriaLabelFormat: string;\n promoPlaceholderText: string;\n promoCodeApplyButtonText: string;\n collapseTimeOut: number;\n removePromoText: string;\n invalidPromoCodeErrorText: string;\n failedToAddPromoCodeErrorText: string;\n duplicatePromoCodeErrorText: string;\n failedToRemovePromoCodeErrorText: string;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n promoCodeApplyCallback?(): void;\n}\n\n/**\n * IPromoCodeProps: Interface for promo code component.\n */\nexport interface IPromoCodeComponent extends IComponent {}\n\n/**\n * IPromoCodeProps: Interface for promo code state.\n */\ninterface IPromoCodeState {\n promoCodeInputValue: string;\n error: string;\n canApply: boolean;\n}\n\n/**\n *\n * The PromoCode component renders the promocode section.\n * @extends {React.PureComponent}\n */\nclass PromoCode extends React.PureComponent {\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IPromoCodeProps) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, TelemetryConstant.ApplyPromoCode);\n this.state = {\n promoCodeInputValue: '',\n error: '',\n canApply: false\n };\n }\n\n public render(): JSX.Element {\n return (\n
\n
{this.props.promoCodeHeadingText}
\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\n

\n {this.state.error}\n

\n {this._renderAppliedPromoCode(this.props)}\n
\n );\n }\n\n /**\n * On input change method.\n * @param event - Change event.\n */\n private readonly _onInputChangeHandler = (event: React.ChangeEvent) => {\n const error = event.target.value === '' ? '' : this.state.error;\n this.setState({\n promoCodeInputValue: event.target.value.trim(),\n error,\n canApply: !!event.target.value\n });\n };\n\n /**\n * Apply promo code method.\n * @param cartState - Cart state interface.\n */\n private readonly _applyPromotion = (cartState: ICartState | undefined) => {\n if (!cartState) {\n return;\n }\n const appliedPromo = this.state.promoCodeInputValue;\n\n cartState\n .addPromoCode({ promoCode: appliedPromo })\n .then(result => {\n if (result.status === 'SUCCESS') {\n // Show success text\n this.setState({ promoCodeInputValue: '', error: '', canApply: false });\n } else if (result.substatus === 'ALREADYADDED') {\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\n } else {\n this.setState({ error: this.props.invalidPromoCodeErrorText });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\n });\n };\n\n /**\n * On submit action.\n * @param cartState - Cart state.\n * @returns Apply promotion.\n */\n private readonly _onSubmitHandler = (cartState: ICartState | undefined) => (event: React.FormEvent) => {\n event.preventDefault();\n this._applyPromotion(cartState);\n };\n\n /**\n * On apply promotion.\n * @param cartState - Cart state.\n * @returns Apply promotion.\n */\n private readonly applyPromotionHandler = (cartState: ICartState | undefined) => () => {\n this._applyPromotion(cartState);\n };\n\n /**\n * Renders promo code form.\n * @param promoPlaceholderText - Promo code input box placeholder string.\n * @param promoCodeApplyButtonText - Promo code button text string.\n * @param cartState - Cart state interface.\n * @returns Promo code form.\n */\n private readonly _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\n const attributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
\n
\n \n \n
\n
\n );\n };\n\n /**\n * Remove promo code method.\n * @param cartState - Cart state interface.\n * @param event - Mouse event.\n */\n private readonly _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\n if (!cartState) {\n return;\n }\n const code = event.currentTarget.getAttribute('data-value') ?? '';\n cartState\n .removePromoCodes({\n promoCodes: [code]\n })\n .then(result => {\n if (result.status === 'SUCCESS') {\n this.setState({ error: '' });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText });\n });\n };\n\n /**\n * Renders applied promo code form.\n * @param props - Promo code component props.\n * @returns Applied promo code.\n */\n private readonly _renderAppliedPromoCode = (props: IPromoCodeProps) => {\n if (!props.cart || !props.cart.cart.Coupons || !ArrayExtensions.hasElements(props.cart.cart.Coupons)) {\n return;\n }\n\n /**\n * On remove promotion action.\n * @param event - Mouse event.\n */\n const removePromotionHandler = (event: React.MouseEvent) => {\n this._removePromotion(props.cart, event);\n };\n\n return (\n <>\n {props.cart.cart.Coupons.map((coupon: Coupon) => {\n const ariaLabel = props.removePromoAriaLabelFormat\n ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code)\n : '';\n\n return (\n
\n
\n {'Code '}\n {coupon.Code}\n {'Applied '}\n
\n \n
\n );\n })}\n \n );\n };\n}\n\nexport default PromoCode;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IContentBlockAdditionalContentItemViewProps,\n IContentBlockAdditionalContentViewProps,\n IContentBlockViewProps\n} from '@msdyn365-commerce-modules/content-block';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\n return (\n \n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\n return (\n <>\n {item.heading}\n \n {item.text}\n {item.links}\n \n \n );\n })}\n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nconst contentBlockView: React.FC = props => {\n const {\n contentBlockContainer,\n imageContainer,\n detailsContainer,\n title,\n text,\n links,\n image,\n contentBlockAnchorTag,\n imageLink,\n imageAriaLabel,\n additionalContent\n } = props;\n\n // @ts-expect-error HTML element need to be clear on run time.\n const hasImage: boolean = image.props.src;\n const imageClass: string = hasImage ? `${detailsContainer.className} withImage` : `${detailsContainer.className} withoutImage`;\n\n if (imageLink) {\n return (\n \n \n {image}\n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n }\n return (\n \n {image}\n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n};\n\nexport default contentBlockView;\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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageSettings, Image, RichTextComponent } from '@msdyn365-commerce/core';\nimport { IWriteReviewData, IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n\n/**\n * Render Product Description.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductDescription = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const product = props.data.product.result;\n return (\n \n
{renderProductImage(props)}
\n
\n
{product?.Name}
\n
{product?.Name}
\n
{product?.ItemId}
\n
\n
\n );\n};\n\n/**\n * Create Write Review Modal.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n\n return (\n \n {reviewModal.modalHeader}\n \n \n \n {renderProductDescription(props)}\n \n
{resources.selectRatingLabel}
\n {reviewModal.rating}\n
\n
\n \n {resources.reviewTitleLabel}\n {reviewModal.titleInput}\n \n \n {resources.reviewTextLabel}\n {reviewModal.textInput}\n \n {reviewModal.privacyPolicyUrl}\n {reviewModal.error}\n
\n
\n \n {reviewModal.submitButton}\n {reviewModal.cancelButton}\n \n
\n );\n};\n\n/**\n * WriteReview view.\n * @param props - WriteReview ViewProps.\n * @returns WriteReview view module.\n */\nconst WriteReviewView: React.FC> = props => {\n const { config, heading, signInMessage, signInButton, modalToggle, moduleProps } = props;\n const { paragraph } = config;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n const text = paragraph && ;\n\n return (\n \n {heading}\n {!isAuthenticated ? (\n <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {text}\n {modalToggle}\n {createReviewModal(props)}\n \n )}\n \n );\n};\n\nexport default WriteReviewView;\n"],"names":["navigationMenuSource","NavigationMenuView","React","constructor","props","super","currentLevel","supportedLevel","currentLevelMobile","isRetail","isCMS","_setNavigationSource","sourceType","retailServerOnly","this","cmsOnly","all","_getSubMenuLength","menuItemId","menuItem","toString","htmlElement","documentRef","getElementById","menuItemHeight","offsetHeight","undefined","_handleMouseHover","optionID","_isChild","_activeItem","state","currentCategory","setState","_handleLinkClick","linkURL","_gotoCategoryPage","categoryPageURL","window","location","href","_updateCategoryImage","categoryImageSrc","option","linkText","promotionalImage","src","altText","ArrayExtensions","hasElements","promotionalContent","map","item","image","imageSrc","promotionalItemImageSettings","imageSettings","push","text","additionalProperties","linkUrl","destinationUrl","categoryImage","length","categoryImageAltText","_handleDropdownToggle","data","parentId","isMobileView","isBackBtnClicked","isBackTrack","activeMenu","id","mobileViewLabelText","mobileViewLabelLink","parentMenu","scrollTo","top","left","behavior","showCategoryImage","imageSource","_resetFocus","_handleGoBack","setTimeout","menuNode","current","focus","_handleClickOutside","event","contains","target","menuButtonsNode","_handleFocusOutside","relatedTarget","_closeSubmenu","_getCategoryImage","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","_categoryImage$imageS","_this$props$config$ca","generateImageUrl","context","actionContext","requestContext","apiSettings","Image","Object","assign","className","gridSettings","request","config","categoryImageSettings","loadFailureBehavior","role","scrollClass","menuItemData","_mapData","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","componentDidMount","document","MsDyn365","isBrowser","body","addEventListener","componentWillUnmount","removeEventListener","render","MenuList","MobileBackButton","MobileDescriptionContainer","MobileDescriptionLabel","Navigation","resources","backButtonAriaLabel","Module","classnames","Node","ref","onClick","tabIndex","Link","_renderDisplay","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","key","_createMenuItemList","forEach","index","subMenus","subMenu","i","found","error","_renderMobileSubMenu","_renderButtonMenuItem","_renderSubMenu","mergedData","categories","result","_constructMenuItemData","cmsNavItems","idx","_constructTopMenuItemData","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","addedAllMenu","locale","imageSouce","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","category","imageSourceUrl","arguments","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","tag","style","height","updatedMenuItemData","_renderLinkMenuItem","_renderSpanMenuItem","IsSubMenu","parentName","isChild","_subMenus","allOptionFound","submenu","toLowerCase","filter","subItem","levelClassName","menuOptions","isActiveOption","hasOptions","renderChildMenu","_renderMenu","showCannedSearches","Button","query","_objectSpread","display","onMouseEnter","contentAction","etext","attributes","getTelemetryAttributes","optionLinkText","onTelemetryClick","onMouseOver","isParent","Span","onFocus","level","currentItem","DivContainer","ImageDivContainer","categoryImageDisplay","nameTranslations","nameTranslation","find","Language","Text","SearchBar","onSearchTextChange","ev","searchText","value","onSearch","handleKeyUp","keyCode","KeyCodes","Enter","searchPlaceholderLabel","type","placeholder","onChange","onKeyUp","title","DataGrid","renderGridHeader","rowClassName","columns","column","reactKey","name","renderGridRow","_column$onRender","fieldName","_column$onClick","call","onRender","loadDataInternal","async","user","isAuthenticated","loadData","isLoading","e","_e$data","errorMessage","LocalizedMessage","genericErrorMessage","paging","loadMore","sortData","sorting","ascending","sort","item1","item2","value1","value2","compareResult","filterData","c","isSearchable","columnValue","indexOf","trim","getDataToDisplay","itemsCount","pageSize","slice","hasMore","defaultSorting","shouldComponentUpdate","nextProps","nextState","Alert","color","moduleClassName","loadingLabel","businessPartnerLoadMore","noDataMessage","BusinessPartnerUsersTable","getColumns","businessUserTableNameHeadingText","onSelect","businessUserTableEmailHeadingText","businessUserTableSpendingLimitHeadingText","getBusinessPartnerUsers","BusinessPartnersDataActions","callerContext","bypassCache","queryResultSettings","businessPartner","BusinessPartnerId","StatusValue","FirstName","LastName","spendingLimitStr","ObjectExtensions","isNullOrUndefined","SpendingLimit","cultureFormatter","formatCurrency","businessPartnerSearchCustomer","BusinessPartnersTable","businessPartnerName","getBusinessPartners","businessPartnerSearchCompany","BusinessPartners","onSelectBusinessPartner","selectedBusinessPartner","onSelectBusinessPartnerUser","businessPartnerUser","AccountNumber","selectedBusinessPartnerUser","cookies","setAccountSelectionCookie","catalogId","getCustomerDefaultCatalogId","homeUrl","Msdyn365","fullUrl","URL","searchParams","set","removeAccountSelectionCookie","isLoadingCatalog","channelId","Number","_productCatalogs$","productCatalogs","CatalogsDataActions","RecordId","loadCatalogErrorMessage","businessPartnersHeading","viewProps","businessPartnersProps","moduleProps","classname","businessPartnersTable","businessPartnerUsersTable","backToBusinessPartnersLink","catalogLoadingIndicator","catalogLoadingErrorMessage","cookieConsentNotGivenErrorMessage","isConsentGiven","cookieConsentRequiredMessage","renderView","CountryPicker","_telemetryContent","_preferredSiteStorageKey","_cookieExpirationTime","closeModal","isModalOpen","_handleStayOnSiteButtonClick","_this$props$context$r","currentBaseUrl","marketSettings","urlToStore","_appendProtocolToUrl","_writeToCookie","_handleClick","storageKey","storageValue","cookieOptions","secure","sameSite","maxAge","baseUrl","includes","isCookieValueSet","get","_heading$tag","heading","subheading","countryList","actionLink","countryPickerHeading","editProps","onEdit","handleTextChange","countryPickerSubHeading","handleParagraphChange","countryPickerActionLink","createLink","currentSiteButton","stayOnCurrentSiteButtonText","viewprops","modalContainer","Modal","isOpen","toggle","modalTransition","timeout","shouldUpdateFocusToFirstElement","modalHeaderContainer","ModalHeader","closeButtonTabIndex","modalFooterContainer","ModalFooter","modalBodyContainer","ModalBody","link","renderCountryList","stayOnCurrentSiteButton","handleLinkTextChange","_this$props$config$ac","StringExtensions","isNullOrEmpty","_link$linkText","editableLink","ariaLabel","openInNewTab","onTextChange","localeItems","renderCountry","localeItem","_image$imageSettings","_image$src","localeBaseUrl","matchedCountryItem","url","imageSize","xl","imageProps","displayString","shouldSkipToMainImage","displaySubString","countryPickerView","country","renderCustomerName","accountInformation","customer","Name","_renderReactFragment","items","slot","HeaderTag","HeaderContainer","HeaderTopBarContainer","Divider","navIcon","logo","search","preferredStore","renderForMobile","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","accountInfoDropdownButton","signOutLink","signInLink","accountLinks","accountClassName","_renderAccountBlock","wishListIconDesktop","cartIcon","siteOptions","MobileMenuLinksContainer","mobileMenuCollapsed","Collapse","Drawer","openGlyph","closeGlyph","glyphPlacement","toggleButtonText","_renderMobileAccountBlock","wishListIconMobile","menuBar","_renderCollapseMenu","_positionInSetOffset","escapeKey","_escFunction","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","categoryImageUrl","_ref","ImageData","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","_renderMobileMenu","_renderDesktopMenu","posinset","_renderDrawerMenu","setSize","_renderDrawer","keyValue","keys","isDrawerOpen","colProps","toggleButtonProps","onToggle","collapseProps","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","haveSubmenu","Math","round","hoverEffect","imagesource","shouldOpenNewTab","_renderPromotionalLink","showPromotionalContent","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","createSearchResultModal","modalProps","refineMenu","sortByDropDown","isRecoSearchPage","modal","modalHeader","createModalBody","modalFooter","modalBody","renderSort","renderRefiner","refiners","RefineMenuContainer","RefinerSectionContainer","SortingContainer","renderCategoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryHierarchySeparator","renderTitle","TitleContainer","titlePrefix","titleText","titleCount","_props$context$action","SearchResultContainer","products","pagination","ProductsContainer","ProductSectionContainer","choiceSummary","isMobile","modalToggle","searchResultModal","TitleViewProps","categoryHierarchy","sortByOptions","CategoryNavContainer","RefineAndProductSectionContainer","FeatureSearchContainer","similarLookProduct","recommendation","Iframe","iframeRef","srcURL","exception","protocol","toLocaleLowerCase","iframeClassName","Heading","_createHeading","IframeContainer","IFrame","_createIframe","cookieConsentAccepted","alert","_renderAlert","message","targetURL","iframeAriaLabel","IFrameView","MenuTypeIndexId","MenuSource","NavigationMenu","_updateViewport","viewport","device","Type","resizeThrottledEventHandler","addThrottledEvent","_this$props$config$di","_this$props$config$di2","isEmptyOrNullObject","displayCategoryImage","displayPromotionalImage","ImageContainer","_this$props$config$en","_this$props$config$ro","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","_NavigationMenu$getFr","_NavigationMenu$getFr2","menuSource","Retail","Cms","_getViewport","innerWidth","__decorate","observable","computed","_shouldAddFocusMenuRef","menuItemRef","componentDidUpdate","_this$menuItemRef$cur","children","Subscribe","paragraph","_emailAddressInputRef","subscribeParagraph","subscribeHeading","handleText","subscribe","subscribeContainer","subscribeForm","subscribeFormAriaLabel","autoComplete","emailInput","subscribeFormEmailAriaLabel","subscribeEmailPlaceholderText","submitButton","subscribeFormSubmitAriaLabel","subscribeButtonLabel","submitButtonLabelText","onSubmit","preventDefault","subscribeView","_subscribeForm$classN","_emailInput$className","_submitButton$classNa","TabItemType","TabItem","moduleContentClassName","moduleHeaderClassName","_renderTabHeader","slots","isSelected","itemIndex","contentID","getContentID","tabId","activeContentIDResult","activeTabState","shown","activeContentIndex","TabContentContainer","TabHeaderContainer","TabItemContent","tabHeader","tabSlots","tabItemTitle","observer","_renderTabItemContent","tabItemType","TabContent","tabItemContent","TabHeader","Tab","tabIndexQuery","handleHeadingChange","_refHandler","activeLink","_onClick","update","createTabStateInput","currentTabIndex","newUrl","_setGetParameter","String","history","pushState","path","_onKeyDown","slotLength","tabItems","defaultTabIndex","initialIndex","queryString","activeTab","queryTabIndex","arr","split","parseInt","_getTabHeader","_getTabContent","headingComponent","tabViewProps","TabContainer","headerSection","tabsSection","tabItemContainer","tabContents","tabHeaders","params","isEditor","dataActionTabId","selected","onKeyDown","paramName","paramValue","requestUrl","URLSearchParams","decodeURIComponent","TileListLinks","_mapEditableLinks","linkdata","editableLinks","links","TileListItem","linkIndex","_this$props$config$li","backgroundImage","thumbnailImage","redirectionUrl","tileListLinks","tileListLinkContainer","_createParagraph","_renderBackgroundImage","_renderThumbnailImage","tileListItem","tileListContainer","tileListImageContainer","tileListThumbnailImageContainer","tileListHeadingContainer","isNullOrWhitespace","isAriaHiddenAttribute","_item$imageSettings","_this$props$config$ba","verifiedImageSettings","moduleType","typeName","imagePropertyName","itemImageSettings","_this$props$config$th","layout","msdyn365__moduleLayout","TileListItemViewComponent","renderTileListItemContent","CartIcon","cartLabel","cartQtyLabel","cart","cartItem","totalItemsInCart","qtyLabel","format","label","visibility","CartIconComponent","msdyn365Commerce","createComponentOverride","component","PromoCode","_onInputChangeHandler","promoCodeInputValue","canApply","_applyPromotion","cartState","appliedPromo","addPromoCode","promoCode","then","status","substatus","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","catch","failedToAddPromoCodeErrorText","_onSubmitHandler","applyPromotionHandler","_renderForm","promoPlaceholderText","promoCodeApplyButtonText","disabled","_removePromotion","_event$currentTarget$","code","currentTarget","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_renderAppliedPromoCode","Coupons","removePromotionHandler","coupon","removePromoAriaLabelFormat","removePromoText","Code","TelemetryConstant","ApplyPromoCode","promoCodeHeadingText","renderAdditionalContent","additionalContent","_additionalContent$ad","additionalContentNode","additionalContentItems","additionalContentItemContainer","additionalContentItemLinks","contentBlockContainer","imageContainer","detailsContainer","contentBlockAnchorTag","imageAriaLabel","imageClass","NavMenuConstants","getCategoryImage","alttext","navProps","_props$navProps$confi","imageData","NavigationMenuRootDisabled","four","zero","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","categoryImageSource","isOnlyMobile","_closeNavMenu","_this$menuNode$curren","_this$menuNode$curren2","_customUpdateViewport","variant","VariantType","Browser","customResizeThrottledEventHandler","hamburgerAriaLabel","entries","parentMenuId","menu","one","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","isHoverEffect","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","renderProductDescription","product","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","fallBackSrc","cropFocalRegion","renderProductImage","ItemId","signInMessage","signInButton","RichTextComponent","reviewModal","form","inputRow","selectRatingLabel","rating","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","cancelButton","createReviewModal"],"sourceRoot":""}