{"version":3,"file":"static/js/7.44c15f33e689fc557257.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/absolute-navigation-menu/absolute-navigation-menu.props.autogenerated.ts?a80f","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-navigation-menu/absolute-navigation-menu.tsx?9b61","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-navigation-menu/absolute-navigation-menu.view.tsx?d9d4","webpack://Msdyn365.Commerce.Online/./src/modules/aquaglide-navigation-menu/aquaglide-navigation-menu.props.autogenerated.ts?a0e0","webpack://Msdyn365.Commerce.Online/./src/modules/aquaglide-navigation-menu/aquaglide-navigation-menu.tsx?f962","webpack://Msdyn365.Commerce.Online/./src/modules/aquaglide-navigation-menu/aquaglide-navigation-menu.view.tsx?9fe2","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-navigation-menu/arborb2b-navigation-menu.props.autogenerated.ts?6e9e","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-navigation-menu/arborb2b-navigation-menu.tsx?b7a3","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-navigation-menu/arborb2b-navigation-menu.view.tsx?a4d1","webpack://Msdyn365.Commerce.Online/./src/modules/base-navigation-menu/base-navigation-menu.props.autogenerated.ts?d954","webpack://Msdyn365.Commerce.Online/./src/modules/base-navigation-menu/base-navigation-menu.tsx?7d1e","webpack://Msdyn365.Commerce.Online/./src/modules/base-navigation-menu/base-navigation-menu.view.tsx?70da","webpack://Msdyn365.Commerce.Online/./src/modules/connellyb2b-navigation-menu/connellyb2b-navigation-menu.props.autogenerated.ts?f634","webpack://Msdyn365.Commerce.Online/./src/modules/connellyb2b-navigation-menu/connellyb2b-navigation-menu.tsx?a1c8","webpack://Msdyn365.Commerce.Online/./src/modules/connellyb2b-navigation-menu/connellyb2b-navigation-menu.view.tsx?ca37","webpack://Msdyn365.Commerce.Online/./src/modules/freedom-navigation-menu/freedom-navigation-menu.props.autogenerated.ts?0cfa","webpack://Msdyn365.Commerce.Online/./src/modules/freedom-navigation-menu/freedom-navigation-menu.tsx?b7d2","webpack://Msdyn365.Commerce.Online/./src/modules/freedom-navigation-menu/freedom-navigation-menu.view.tsx?16a6","webpack://Msdyn365.Commerce.Online/./src/modules/hosports-b2b-navigation-menu/hosports-b2b-navigation-menu.props.autogenerated.ts?df88","webpack://Msdyn365.Commerce.Online/./src/modules/hosports-b2b-navigation-menu/hosports-b2b-navigation-menu.tsx?4e7b","webpack://Msdyn365.Commerce.Online/./src/modules/hosports-b2b-navigation-menu/hosports-b2b-navigation-menu.view.tsx?0ae5","webpack://Msdyn365.Commerce.Online/./src/modules/kent-navigation-menu/kent-navigation-menu.props.autogenerated.ts?03c3","webpack://Msdyn365.Commerce.Online/./src/modules/kent-navigation-menu/kent-navigation-menu.tsx?6835","webpack://Msdyn365.Commerce.Online/./src/modules/kent-navigation-menu/kent-navigation-menu.view.tsx?ffb5","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-navigation-menu-2022/liquid-navigation-menu-2022.props.autogenerated.ts?c03a","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-navigation-menu-2022/liquid-navigation-menu-2022.tsx?4b32","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-navigation-menu-2022/liquid-navigation-menu-2022.view.tsx?ee3d","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-navigation-menu/liquid-navigation-menu.props.autogenerated.ts?1265","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-navigation-menu/liquid-navigation-menu.tsx?a1d7","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-navigation-menu/liquid-navigation-menu.view.tsx?b95a","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-navigation-menu/obrien-navigation-menu.props.autogenerated.ts?acef","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-navigation-menu/obrien-navigation-menu.tsx?0d4a","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-navigation-menu/obrien-navigation-menu.view.tsx?7eae","webpack://Msdyn365.Commerce.Online/./src/modules/obrienb2b-navigation-menu/obrienb2b-navigation-menu.props.autogenerated.ts?0a17","webpack://Msdyn365.Commerce.Online/./src/modules/obrienb2b-navigation-menu/obrienb2b-navigation-menu.tsx?0454","webpack://Msdyn365.Commerce.Online/./src/modules/obrienb2b-navigation-menu/obrienb2b-navigation-menu.view.tsx?9ee5","webpack://Msdyn365.Commerce.Online/./src/modules/account-generic-tile/account-generic-tile.tsx?4353","webpack://Msdyn365.Commerce.Online/./src/modules/account-generic-tile/account-generic-tile.view.tsx?4b58","webpack://Msdyn365.Commerce.Online/./src/modules/account-generic-tile/components/account-generic-tile-links.tsx?2bc7","webpack://Msdyn365.Commerce.Online/./src/modules/b2b-requests-tile/components/account-b2b-requests-tile-links.tsx?d6f5","webpack://Msdyn365.Commerce.Online/./src/modules/b2b-requests-tile/b2b-requests-tile.tsx?9498","webpack://Msdyn365.Commerce.Online/./src/modules/b2b-requests-tile/b2b-requests-tile.view.tsx?3f4e","webpack://Msdyn365.Commerce.Online/./src/modules/password-reset-verification/components/password-reset-verification-button.tsx?c1c2","webpack://Msdyn365.Commerce.Online/./src/modules/password-reset-verification/components/password-reset-verification-error.tsx?347f","webpack://Msdyn365.Commerce.Online/./src/modules/password-reset-verification/components/password-reset-verification-input.tsx?fd25","webpack://Msdyn365.Commerce.Online/./src/modules/password-reset-verification/components/password-reset-verification-label.tsx?aab5","webpack://Msdyn365.Commerce.Online/./src/modules/password-reset-verification/components/password-reset-verification-loading-icon.tsx?d70e","webpack://Msdyn365.Commerce.Online/./src/modules/password-reset-verification/components/password-reset-verification-loading-message.tsx?d239","webpack://Msdyn365.Commerce.Online/./src/modules/password-reset-verification/components/password-reset-verification-success.tsx?3c81","webpack://Msdyn365.Commerce.Online/./src/modules/password-reset-verification/password-reset-verification.tsx?691f","webpack://Msdyn365.Commerce.Online/./src/modules/password-reset-verification/password-reset-verification.view.tsx?dffa","webpack://Msdyn365.Commerce.Online/./src/modules/breadcrumb/components/link.tsx?d232","webpack://Msdyn365.Commerce.Online/./src/modules/breadcrumb/components/separator.tsx?92bb","webpack://Msdyn365.Commerce.Online/./src/modules/breadcrumb/breadcrumb.tsx?efcc","webpack://Msdyn365.Commerce.Online/./src/modules/breadcrumb/breadcrumb.view.tsx?4b3d","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/buybox.view.tsx?aec4","webpack://Msdyn365.Commerce.Online/./src/modules/footer-category/footer-category.tsx?e0bd","webpack://Msdyn365.Commerce.Online/./src/modules/footer-category/footer-category.view.tsx?fdce","webpack://Msdyn365.Commerce.Online/./src/modules/image-list/image-list.tsx?5602","webpack://Msdyn365.Commerce.Online/./src/modules/image-list/image-list.view.tsx?2bed","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/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/order-template-list.view.tsx?46b6"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IAbsoluteNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IAbsoluteNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IAbsoluteNavigationMenuResources {\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 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 IAbsoluteNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IAbsoluteNavigationMenuResources;\r\n config: IAbsoluteNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IAbsoluteNavigationMenuData } from './absolute-navigation-menu.data';\r\nimport { ICmsNavItemsData, IAbsoluteNavigationMenuProps, ISubMenusData, navigationMenuSource } from './absolute-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IAbsoluteNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IAbsoluteNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './absolute-navigation-menu';\r\nimport { IMenuItemData } from './absolute-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 2;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `inside-xxl level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IAquaglideNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IAquaglideNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IAquaglideNavigationMenuResources {\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 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 IAquaglideNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IAquaglideNavigationMenuResources;\r\n config: IAquaglideNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IAquaglideNavigationMenuData } from './aquaglide-navigation-menu.data';\r\nimport {\r\n ICmsNavItemsData,\r\n IAquaglideNavigationMenuProps,\r\n ISubMenusData,\r\n navigationMenuSource\r\n} from './aquaglide-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IAquaglideNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer: INodeProps;\r\n MobileDescriptionContainer: INodeProps;\r\n MobileBackButton: INodeProps;\r\n MobileDescriptionLabel: INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit = 1000;\r\n private static RSItemIdInit = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail = true;\r\n private isCMS = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IAquaglideNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport =\r\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = { isMobile: this.isMobile };\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return this.viewport === 'xs';\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler = window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag: 'nav',\r\n role: 'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag: 'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag: 'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag: 'button',\r\n role: 'menuitem',\r\n onClick: this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag: 'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag: 'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick: this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag: 'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => mergedData.push(this._constructMenuItemData(item, undefined, true)));\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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(\r\n retailItem?: CategoryHierarchy,\r\n cmsItem?: ICmsNavItemsData,\r\n isRetail?: boolean,\r\n _idx?: number\r\n ): IMenuItemData {\r\n const locale =\r\n this.props.context && this.props.context.request && this.props.context.request.locale\r\n ? this.props.context.request.locale\r\n : 'en-us';\r\n let image: any = '';\r\n if (retailItem) {\r\n if (retailItem.Images) {\r\n if (retailItem.Images[0]) {\r\n image = retailItem.Images[0].Uri;\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource: image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({\r\n linkText: this.props.resources.allCategoryMenuText,\r\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\r\n });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './aquaglide-navigation-menu';\r\nimport { IMenuItemData } from './aquaglide-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack = false;\r\n private supportedLevel = 3;\r\n private currentLevel = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: undefined })\r\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem &&\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}{' '}\r\n \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: item && item.id })\r\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(menuItemData);\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName = '';\r\n const menuOptions =\r\n subMenus &&\r\n subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = option.subMenu && option.subMenu.length > 0;\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `inside-xxl level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu);\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IArborb2bNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IArborb2bNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IArborb2bNavigationMenuResources {\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 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 IArborb2bNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IArborb2bNavigationMenuResources;\r\n config: IArborb2bNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IArborb2BNavigationMenuData } from './arborb2b-navigation-menu.data';\r\nimport {\r\n ICmsNavItemsData,\r\n IArborb2bNavigationMenuProps,\r\n ISubMenusData,\r\n navigationMenuSource\r\n} from './arborb2b-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IArborb2bNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer: INodeProps;\r\n MobileDescriptionContainer: INodeProps;\r\n MobileBackButton: INodeProps;\r\n MobileDescriptionLabel: INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit = 1000;\r\n private static RSItemIdInit = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail = true;\r\n private isCMS = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IArborb2bNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport =\r\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = { isMobile: this.isMobile };\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return this.viewport === 'xs';\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler = window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag: 'nav',\r\n role: 'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag: 'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag: 'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag: 'button',\r\n role: 'menuitem',\r\n onClick: this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag: 'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag: 'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick: this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag: 'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => mergedData.push(this._constructMenuItemData(item, undefined, true)));\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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(\r\n retailItem?: CategoryHierarchy,\r\n cmsItem?: ICmsNavItemsData,\r\n isRetail?: boolean,\r\n _idx?: number\r\n ): IMenuItemData {\r\n const locale =\r\n this.props.context && this.props.context.request && this.props.context.request.locale\r\n ? this.props.context.request.locale\r\n : 'en-us';\r\n let image: any = '';\r\n if (retailItem) {\r\n if (retailItem.Images) {\r\n if (retailItem.Images[0]) {\r\n image = retailItem.Images[0].Uri;\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource: image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({\r\n linkText: this.props.resources.allCategoryMenuText,\r\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\r\n });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './arborb2b-navigation-menu';\r\nimport { IMenuItemData } from './arborb2b-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack = false;\r\n private supportedLevel = 2;\r\n private currentLevel = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: undefined })\r\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem &&\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}{' '}\r\n \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack\r\n ? this.setState({ parentMenu: item && item.id })\r\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(menuItemData);\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName = '';\r\n const menuOptions =\r\n subMenus &&\r\n subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = option.subMenu && option.subMenu.length > 0;\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu);\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IBaseNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IBaseNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IBaseNavigationMenuResources {\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 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 IBaseNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IBaseNavigationMenuResources;\r\n config: IBaseNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IBaseNavigationMenuData } from './base-navigation-menu.data';\r\nimport { ICmsNavItemsData, IBaseNavigationMenuProps, ISubMenusData, navigationMenuSource } from './base-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IBaseNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IBaseNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './base-navigation-menu';\r\nimport { IMenuItemData } from './base-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 2;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `inside-xxl level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IConnellyb2bNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IConnellyb2bNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IConnellyb2bNavigationMenuResources {\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 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 IConnellyb2bNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IConnellyb2bNavigationMenuResources;\r\n config: IConnellyb2bNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IConnellyb2BNavigationMenuData } from './connellyb2b-navigation-menu.data';\r\nimport { ICmsNavItemsData, IConnellyb2bNavigationMenuProps, ISubMenusData, navigationMenuSource } from './connellyb2b-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IConnellyb2bNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IConnellyb2bNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './connellyb2b-navigation-menu';\r\nimport { IMenuItemData } from './connellyb2b-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 2;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n
{this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}
\r\n
\r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `inside-xxl level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IFreedomNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IFreedomNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IFreedomNavigationMenuResources {\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 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 IFreedomNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IFreedomNavigationMenuResources;\r\n config: IFreedomNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IFreedomNavigationMenuData } from './freedom-navigation-menu.data';\r\nimport { ICmsNavItemsData, IFreedomNavigationMenuProps, ISubMenusData, navigationMenuSource } from './freedom-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IFreedomNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IFreedomNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './freedom-navigation-menu';\r\nimport { IMenuItemData } from './freedom-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 2;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IHosportsB2bNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IHosportsB2bNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IHosportsB2bNavigationMenuResources {\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 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 IHosportsB2bNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IHosportsB2bNavigationMenuResources;\r\n config: IHosportsB2bNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IHosportsB2BNavigationMenuData } from './hosports-b2b-navigation-menu.data';\r\nimport { ICmsNavItemsData, IHosportsB2bNavigationMenuProps, ISubMenusData, navigationMenuSource } from './hosports-b2b-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IHosportsB2bNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IHosportsB2bNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './hosports-b2b-navigation-menu';\r\nimport { IMenuItemData } from './hosports-b2b-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 2;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `inside-xxl level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IKentNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IKentNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IKentNavigationMenuResources {\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 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 IKentNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IKentNavigationMenuResources;\r\n config: IKentNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IKentNavigationMenuData } from './kent-navigation-menu.data';\r\nimport { ICmsNavItemsData, IKentNavigationMenuProps, ISubMenusData, navigationMenuSource } from './kent-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IKentNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IKentNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './kent-navigation-menu';\r\nimport { IMenuItemData } from './kent-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 2;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ILiquidNavigationMenu2022 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface ILiquidNavigationMenu2022Config extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface ILiquidNavigationMenu2022Resources {\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 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 ILiquidNavigationMenu2022Props extends Msdyn365.IModule {\r\n resources: ILiquidNavigationMenu2022Resources;\r\n config: ILiquidNavigationMenu2022Config;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, ILiquidNavigationMenu2022Data } from './liquid-navigation-menu-2022.data';\r\nimport { ICmsNavItemsData, ILiquidNavigationMenu2022Props, ISubMenusData, navigationMenuSource } from './liquid-navigation-menu-2022.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends ILiquidNavigationMenu2022Props {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: ILiquidNavigationMenu2022Props) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './liquid-navigation-menu-2022';\r\nimport { IMenuItemData } from './liquid-navigation-menu-2022.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `inside-xxl level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ILiquidNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface ILiquidNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface ILiquidNavigationMenuResources {\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 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 ILiquidNavigationMenuProps extends Msdyn365.IModule {\r\n resources: ILiquidNavigationMenuResources;\r\n config: ILiquidNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, ILiquidNavigationMenuData } from './liquid-navigation-menu.data';\r\nimport { ICmsNavItemsData, ILiquidNavigationMenuProps, ISubMenusData, navigationMenuSource } from './liquid-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends ILiquidNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: ILiquidNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './liquid-navigation-menu';\r\nimport { IMenuItemData } from './liquid-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 2;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IObrienNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IObrienNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IObrienNavigationMenuResources {\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 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 IObrienNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IObrienNavigationMenuResources;\r\n config: IObrienNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IObrienNavigationMenuData } from './obrien-navigation-menu.data';\r\nimport { ICmsNavItemsData, IObrienNavigationMenuProps, ISubMenusData, navigationMenuSource } from './obrien-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IObrienNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IObrienNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './obrien-navigation-menu';\r\nimport { IMenuItemData } from './obrien-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `inside-xxl level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IObrienb2bNavigationMenu 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 retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport interface IObrienb2bNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n}\r\n\r\nexport interface IObrienb2bNavigationMenuResources {\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 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 IObrienb2bNavigationMenuProps extends Msdyn365.IModule {\r\n resources: IObrienb2bNavigationMenuResources;\r\n config: IObrienb2bNavigationMenuConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IMenuItemData, IObrienb2BNavigationMenuData } from './obrienb2b-navigation-menu.data';\r\nimport { ICmsNavItemsData, IObrienb2bNavigationMenuProps, ISubMenusData, navigationMenuSource } from './obrienb2b-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps extends IObrienb2bNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer:INodeProps;\r\n MobileDescriptionContainer:INodeProps;\r\n MobileBackButton:INodeProps;\r\n MobileDescriptionLabel:INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\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 constructor(props: IObrienb2bNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\r\n this.state = {isMobile: this.isMobile};\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this.viewport === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag:'nav',\r\n role:'navigation',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag:'ul',\r\n role: 'menu'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n role: 'presentation',\r\n tag:'li'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link',\r\n role: 'menuitem'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag:'button',\r\n role:'menuitem',\r\n onClick:this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag:'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag:'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick:this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag:'span'\r\n },\r\n //Hack to remove mobile\r\n isMobileView: false,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\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) => (\r\n mergedData.push(this._constructMenuItemData(item, undefined, 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 mergedData;\r\n }\r\n\r\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number): 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 let image:any = '';\r\n if(retailItem){\r\n if(retailItem.Images){\r\n if(retailItem.Images[0]){\r\n image = retailItem.Images[0].Uri\r\n }\r\n }\r\n }\r\n if (isRetail) {\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: NavigationMenu.getFriendlyName(locale, retailItem && retailItem.NameTranslations) || '',\r\n linkURL: retailItem && retailItem.Url,\r\n subMenu: this._getNestedChildren(retailItem),\r\n imageSource:image\r\n } as IMenuItemData;\r\n } else {\r\n return {\r\n id: NavigationMenu.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): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n\r\n nestedChildren.push({linkText: this.props.resources.allCategoryMenuText, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, 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): 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\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './obrienb2b-navigation-menu';\r\nimport { IMenuItemData } from './obrienb2b-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n private supportedLevel: number = 2;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {isMobileView && this.state.activeMenu !== undefined &&\r\n \r\n \r\n {this.state.mobileViewLabelText}\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, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n {this._createMenuItemList(menuItem)} \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: item && item.id }) : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n
{this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}
\r\n
\r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `inside-xxl level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n return (\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 _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState({ activeMenu: this.state.parentMenu });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/*!\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 { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IAccountGenericTileConfig, IAccountGenericTileProps } from './account-generic-tile.props.autogenerated';\nimport LinksComponent from './components/account-generic-tile-links';\n\nexport interface IAccountGenericTileViewProps extends IAccountGenericTileProps {\n AccountGenericTile: IModuleProps;\n className: string;\n heading?: React.ReactNode;\n links?: React.ReactNode;\n}\n\n/**\n *\n * AccountGeneric component.\n * @extends {React.PureComponent>}\n */\nclass AccountGenericTile extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IAccountGenericTileProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element {\n const { config } = this.props;\n const { className, heading, links } = config;\n\n const viewProps = {\n ...this.props,\n className,\n AccountGenericTile: {\n moduleProps: this.props,\n className: classnames('ms-account-generic-tile', config.className)\n },\n heading: heading && heading.text && (\n \n ),\n links: links && links.length > 0 && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.links && this.props.config.links[linkIndex]) {\n this.props.config.links[linkIndex].linkText = event.target.value;\n }\n };\n}\n\nexport default AccountGenericTile;\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 { IAccountGenericTileViewProps } from './account-generic-tile';\n\nconst AccountGenericTileView: React.FC = props => {\n const { AccountGenericTile, heading, links } = props;\n\n return (\n \n {heading}\n {links}\n \n );\n};\n\nexport default AccountGenericTileView;\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../account-generic-tile.props.autogenerated';\n\nexport interface IAccountGenericTileLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nconst AccountGenericTileLinks: React.FC = ({ links, telemetryContent, requestContext, onTextChange }) => {\n if (links.length === 0) {\n return null;\n }\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n
\n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n
\n );\n};\n\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent?: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n const payLoad = getPayloadObject('click', telemetryContent!, '');\n linkdata.forEach((link, index) => {\n payLoad.contentAction.etext = link.linkText;\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-account-generic-tile__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n\nexport default AccountGenericTileLinks;\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 } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../../..';\n\nexport interface IB2bRequestsTileLinksProps {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nconst defaultClassName = 'ms-account-b2b-requests-tile';\n\nexport const B2bRequestsTileLinks: React.FC = ({ links, telemetryContent, onTextChange, requestContext }) => {\n if (!ArrayExtensions.hasElements(links)) {\n return null;\n }\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n
\n {ArrayExtensions.hasElements(editableLinks) ? (\n \n ) : null}\n
\n );\n};\n\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent?: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!ArrayExtensions.hasElements(linkdata)) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, '');\n\n return linkdata.map(link => {\n payLoad.contentAction.etext = link.linkText;\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return {\n ariaLabel: link.ariaLabel,\n className: `${defaultClassName}__link`,\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n } as Msdyn365.ILinksData;\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IB2bRequestsTileData } from './b2b-requests-tile.data';\nimport { IB2bRequestsTileProps } from './b2b-requests-tile.props.autogenerated';\nimport { B2bRequestsTileLinks } from './components/account-b2b-requests-tile-links';\n\nexport interface IB2bRequestsTileViewProps extends IB2bRequestsTileProps {\n b2bRequestsTile: IModuleProps;\n className: string;\n heading?: React.ReactNode;\n links?: React.ReactNode;\n}\n\n/**\n *\n * B2bRequestsTile component.\n * @extends {React.PureComponent>}\n */\nclass B2bRequestsTile extends React.PureComponent> {\n private readonly telemetryContent?: ITelemetryContent;\n\n constructor(props: IB2bRequestsTileProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element | null {\n const { config, data } = this.props;\n const { className, heading, links } = config;\n\n const defaultClassName = 'ms-account-b2b-requests-tile';\n\n if (!data.customerInformation.result?.IsB2b) {\n return null;\n }\n\n const viewProps = {\n ...this.props,\n className,\n b2bRequestsTile: {\n moduleProps: this.props,\n className: classnames(defaultClassName, config.className)\n },\n heading: heading && heading.text && (\n \n ),\n links: ArrayExtensions.hasElements(links) && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading.text = event.target.value);\n\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.links && this.props.config.links[linkIndex]) {\n this.props.config.links[linkIndex].linkText = event.target.value;\n }\n };\n}\n\nexport default B2bRequestsTile;\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 { IB2bRequestsTileViewProps } from './b2b-requests-tile';\n\nconst B2bRequestsTileView: React.FC = props => {\n const { b2bRequestsTile, heading, links } = props;\n\n return (\n \n {heading}\n {links}\n \n );\n};\n\nexport default B2bRequestsTileView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPasswordResetVerificationButton {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n telemetryContent?: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nconst PasswordResetVerificationButton: React.FC = ({\n id,\n className,\n text,\n ariaLabel,\n telemetryContent,\n disabled,\n onClick\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n\nexport default PasswordResetVerificationButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IPasswordResetVerificationErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nconst PasswordResetVerificationError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n );\n};\n\nexport default PasswordResetVerificationError;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPasswordResetVerificationInputProps {\n id?: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: any;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface IPasswordResetVerificationInput {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst GetMaxLength = (maxLength?: string): number | undefined => {\n if (maxLength) {\n const parsedMaxLength = Number.parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nconst PasswordResetVerificationInput: React.FC = ({\n id,\n type,\n value,\n pattern,\n className,\n maxLength,\n onChange\n}) => (\n \n);\n\nexport default PasswordResetVerificationInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IPasswordResetVerificationLabel {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nconst PasswordResetVerificationLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default PasswordResetVerificationLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IPasswordResetVerificationLoadingIcon {\n className: string;\n}\n\nconst PasswordResetVerificationLoadingIcon: React.FC = ({ className }) => (\n
\n);\n\nexport default PasswordResetVerificationLoadingIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IPasswordResetVerificationLoadingMessage {\n className: string;\n message: string;\n}\n\nconst PasswordResetVerificationLoadingMessage: React.FC = ({ className, message }) => (\n
{message}
\n);\n\nexport default PasswordResetVerificationLoadingMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IPasswordResetVerificationSuccess {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nconst PasswordResetVerificationSuccess: React.FC = ({ id, className, type = 'page', message }) => {\n const successClassName = `${className}__${type}-success`;\n\n return (\n \n );\n};\n\nexport default PasswordResetVerificationSuccess;\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 { EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Modal, ModalBody } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport PasswordResetVerificationButtonComponent from './components/password-reset-verification-button';\nimport PasswordResetVerificationErrorComponent from './components/password-reset-verification-error';\nimport PasswordResetVerificationInputComponent from './components/password-reset-verification-input';\nimport PasswordResetVerificationLabelComponent from './components/password-reset-verification-label';\nimport PasswordResetVerificationLoadingIconComponent from './components/password-reset-verification-loading-icon';\nimport PasswordResetVerificationLoadingMessageComponent from './components/password-reset-verification-loading-message';\nimport PasswordResetVerificationSuccessComponent from './components/password-reset-verification-success';\nimport { IPasswordResetVerificationConfig, IPasswordResetVerificationProps } from './password-reset-verification.props.autogenerated';\n\nexport interface IPasswordResetVerificationViewState {\n isShowLoading: boolean;\n}\n\nexport interface IPasswordResetVerificationItem {\n wrapper: INodeProps;\n key: string;\n label: React.ReactNode;\n errorMessage: React.ReactNode;\n input: React.ReactNode;\n}\n\nexport interface IPasswordResetVerificationLocalAccount {\n localAccount: INodeProps;\n verificationControlWrapper: INodeProps;\n items: IPasswordResetVerificationItem[];\n successMessage: React.ReactNode[];\n errorMessage: React.ReactNode[];\n verificationButtonsWrapper: INodeProps;\n verificationButtons: React.ReactNode[];\n buttonsWrapper: INodeProps;\n buttons: React.ReactNode[];\n verificationSuccessModal: INodeProps;\n verificationSuccessModalMessage: INodeProps;\n}\n\nexport interface IPasswordResetVerificationLoading {\n modal: INodeProps;\n modalBody: INodeProps;\n icon: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface IPasswordResetVerificationViewProps {\n className: string;\n viewState: IPasswordResetVerificationViewState;\n loading: IPasswordResetVerificationLoading;\n passwordResetVerification: IModuleProps;\n defaultAADConainer: INodeProps;\n aadConainer: INodeProps;\n heading: React.ReactNode;\n passwordResetVerificationLocalAccount: IPasswordResetVerificationLocalAccount;\n}\n\n/**\n *\n * PasswordResetVerification component.\n * @extends {React.Component>}\n */\n@observer\nclass PasswordResetVerification extends React.Component> {\n private readonly moduleClassName: string = 'ms-password-reset-verification';\n\n private readonly telemetryContent: ITelemetryContent;\n\n @observable private emailRegex: string;\n\n @observable private isInitialized: boolean;\n\n @observable private templateVersion: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private initializationTimer: any;\n\n constructor(props: IPasswordResetVerificationProps) {\n super(props);\n this.emailRegex = EmailRegex.defaultRegex.source;\n this.isInitialized = false;\n this.templateVersion = '';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n this._onInit();\n }\n\n // After successful AAD initialization, call initialize method provided by AAD to attach events.\n public componentDidUpdate(): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (this.isInitialized && window && window['$element'] && window['$element']['initialize']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['$element']['initialize']();\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IPasswordResetVerificationProps,\n nextState: IPasswordResetVerificationViewState\n ): 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 { config, resources } = this.props;\n\n const viewProps = {\n ...this.props,\n viewState: {\n isShowLoading: !this.isInitialized\n },\n passwordResetVerification: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, config.className)\n },\n loading: {\n modal: {\n tag: Modal,\n isOpen: true\n },\n modalBody: {\n tag: ModalBody\n },\n icon: ,\n message: (\n \n )\n },\n defaultAADConainer: {\n id: 'api',\n style: { display: 'none' }\n },\n aadConainer: {\n id: this.isInitialized ? 'api' : null,\n className: `${this.moduleClassName}__container`\n },\n heading: config.heading && (\n \n ),\n passwordResetVerificationLocalAccount: this._renderLocalAccount()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _onInit = () => {\n this._prePopulateData();\n this._updateErrorMessage();\n\n // Check if AAD initialization is complete. AAD do not provide any event to subscribe so we need to check variable set by AAD to check initialization status.\n this.initializationTimer = setInterval(() => {\n this._isInitializationSuccessful();\n }, 100);\n setTimeout(() => {\n clearInterval(this.initializationTimer);\n }, 10_000);\n };\n\n // After successful AAD initialization, remove waiting and preload any data, if needed.\n private readonly _isInitializationSuccessful = () => {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window && window['$diags'] && window['$diags']['initializationSuccessful']) {\n clearInterval(this.initializationTimer);\n this.isInitialized = true;\n }\n };\n\n private _prePopulateData(): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window['SA_FIELDS'] && window['SA_FIELDS']['AttributeFields']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['SA_FIELDS']['AttributeFields'].map((obj: { ID: string; PAT: string }) => {\n if (obj.ID.toLowerCase() === 'email') {\n this.emailRegex = obj.PAT;\n } else if (obj.ID.toLowerCase() === 'emailverificationcontrol') {\n this.templateVersion = 'v2';\n }\n });\n if (!this.templateVersion) {\n this.templateVersion = 'v1';\n }\n }\n }\n\n private _updateErrorMessage(): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n if (window && window['CONTENT']) {\n const message = {\n verifying_blurb: this.props.resources.loadingMessage\n };\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n Object.assign(window['CONTENT'], message);\n }\n }\n\n private _renderLocalAccount(): IPasswordResetVerificationLocalAccount {\n const { resources } = this.props;\n return {\n localAccount: {\n id: 'attributeList',\n className: `${this.moduleClassName}__account-items attr`\n },\n verificationControlWrapper: {\n id: 'emailVerificationControl',\n className: `${this.moduleClassName}__verification-control-content verificationControlContent`\n },\n items: [\n this._renderInput('email', 'email', resources.emailAddressLabelText, undefined, this.emailRegex),\n this._renderInput(\n this.getValue('email_ver_input', 'emailVerificationCode'),\n 'text',\n resources.verificationCodeLabelText,\n undefined,\n undefined,\n 'VerificationCode'\n )\n ],\n successMessage: [\n ,\n\n \n ],\n errorMessage: [\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n \n ],\n verificationButtonsWrapper: {\n className: `${this.moduleClassName}__email-verification-buttons ${this.getValue('verify', '')}`,\n 'data-claim_id': 'email'\n },\n verificationButtons: [\n ,\n ,\n ,\n \n ],\n buttonsWrapper: {\n className: `${this.moduleClassName}__buttons`\n },\n buttons: [\n ,\n \n ],\n verificationSuccessModal: {\n className: `${this.moduleClassName}__verifying-modal verifying-modal`\n },\n verificationSuccessModalMessage: {\n id: 'verifying_blurb',\n className: `${this.moduleClassName}__verifying-modal-message`\n }\n };\n }\n\n private _renderInput(\n id: string,\n type: string,\n labelText: string,\n maxLength?: string,\n pattern?: string,\n cssClassName?: string\n ): IPasswordResetVerificationItem {\n const className = `${this.moduleClassName}__account-item`;\n return {\n wrapper: {\n className: classnames(className, `${className}-${id}`, 'entry-item', 'attrEntry', cssClassName)\n },\n key: id,\n label: (\n \n ),\n errorMessage: (\n \n ),\n input: (\n \n )\n };\n }\n\n private readonly getValue = (v1Value: string, v2Value: string): string => {\n if (this.templateVersion) {\n return this.templateVersion === 'v1' ? v1Value : v2Value;\n }\n return '';\n };\n}\n\nexport default PasswordResetVerification;\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 {\n IPasswordResetVerificationItem,\n IPasswordResetVerificationLoading,\n IPasswordResetVerificationLocalAccount,\n IPasswordResetVerificationViewProps\n} from './password-reset-verification';\n\nconst PasswordResetVerificationItem: React.FC = ({ wrapper, label, errorMessage, input }) => {\n return (\n \n {label}\n {errorMessage}\n {input}\n \n );\n};\n\nconst LocalAccount: React.FC = ({\n localAccount,\n verificationControlWrapper,\n items,\n successMessage,\n errorMessage,\n verificationButtonsWrapper,\n verificationButtons,\n buttonsWrapper,\n buttons,\n verificationSuccessModal,\n verificationSuccessModalMessage\n}) => {\n return (\n \n \n {items &&\n items.map((item: IPasswordResetVerificationItem) => {\n // eslint-disable-next-line react/jsx-key\n return ;\n })}\n {successMessage &&\n successMessage.map((message: React.ReactNode, index: number) => {\n return {message};\n })}\n {errorMessage &&\n errorMessage.map((error: React.ReactNode, index: number) => {\n return {error};\n })}\n \n {verificationButtons &&\n verificationButtons.map((button: React.ReactNode, index: number) => {\n return {button};\n })}\n \n\n \n {buttons &&\n buttons.map((button: React.ReactNode, index: number) => {\n return {button};\n })}\n \n\n \n \n \n \n \n );\n};\n\nconst PasswordResetVerificationLoading: React.FC = ({ modal, modalBody, icon, message }) => {\n return (\n \n \n {icon}\n {message}\n \n \n );\n};\n\nconst PasswordResetVerificationView: React.FC = props => {\n const {\n passwordResetVerification,\n viewState,\n loading,\n defaultAADConainer,\n aadConainer,\n heading,\n passwordResetVerificationLocalAccount\n } = props;\n\n return (\n \n {viewState.isShowLoading && }\n {viewState.isShowLoading && }\n \n {heading}\n {LocalAccount(passwordResetVerificationLocalAccount)}\n \n \n );\n};\n\nexport default PasswordResetVerificationView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n index: string;\n noclick?: boolean;\n telemetryContent: ITelemetryContent;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel, index, noclick, telemetryContent }) => {\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\n\n const linkText = text !== undefined ? text : '';\n payLoad.contentAction.etext = linkText;\n\n // Construct telemetry attribute to render\n const attribute = getTelemetryAttributes(telemetryContent, payLoad);\n\n return (\n \n {linkText}\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 * as React from 'react';\n\ninterface ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \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 from '@msdyn365-commerce/core';\nimport { ICategoryUrl } from '@msdyn365-commerce/core-internal/dist/types/interfaces/ICategoryPathInterfaces';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IBreadcrumbData } from './breadcrumb.data';\nimport { IBreadcrumbProps, ILinksData } from './breadcrumb.props.autogenerated';\nimport { Link } from './components/link';\nimport { Separator } from './components/separator';\n\nexport interface IBreadcrumbViewProps extends IBreadcrumbProps {\n root?: React.ReactNode;\n links?: React.ReactNode[];\n backButton?: React.ReactNode;\n separator?: React.ReactNode;\n BreadcrumbContainer: IModuleProps;\n BreadcrumbList: INodeProps;\n BreadcrumbListItem: INodeProps;\n}\n\n/**\n *\n * Breadcrumb component.\n * @extends {React.PureComponent>}\n */\nclass Breadcrumb extends React.PureComponent> {\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public render(): JSX.Element | null {\n const { className } = this.props.config;\n let rootLink = null;\n let breadcrumbLinks = null;\n let backButtonComponent = null;\n rootLink = this._getRootLink();\n const itemPosition = rootLink ? 1 : 0;\n if (this._pageType === 'Category') {\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\n if (!breadcrumbLinks) {\n breadcrumbLinks = this._getCategoryHierarchy(itemPosition);\n }\n } else if (this._pageType === 'Product') {\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\n if (!breadcrumbLinks) {\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n if (breaCrumbType === 'category') {\n breadcrumbLinks = this._getPDPLinks(itemPosition);\n }\n if (breaCrumbType === 'categoryAndBack') {\n backButtonComponent = this._getPDPBackButton();\n breadcrumbLinks = this._getPDPLinks(itemPosition);\n }\n if (breaCrumbType === 'back') {\n backButtonComponent = this._getPDPBackButton();\n if (backButtonComponent === null) {\n breadcrumbLinks = this._getPDPLinks(itemPosition);\n }\n }\n }\n } else {\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\n }\n const linkSeparator = ;\n\n const breadcrumbViewProps = {\n ...this.props,\n BreadcrumbContainer: {\n moduleProps: this.props,\n className: classnames('ms-breadcrumb', className),\n tag: 'nav',\n role: 'navigation'\n },\n BreadcrumbList: {\n tag: 'ol' as NodeTag,\n className: 'ms-breadcrumb_list'\n },\n BreadcrumbListItem: {\n tag: 'li',\n className: 'ms-breadcrumb_item'\n },\n root: rootLink,\n links: breadcrumbLinks,\n backButton: backButtonComponent,\n separator: linkSeparator\n };\n return this.props.renderView(breadcrumbViewProps) as React.ReactElement;\n }\n\n private readonly _getRootLink = (): JSX.Element | null => {\n const { root } = this.props.config;\n if (!root || !root.linkUrl || !root.linkUrl.destinationUrl) {\n this.props.context.telemetry.error('BreadCrumb link url content is empty, link wont render');\n return null;\n }\n return (\n \n );\n };\n\n private readonly _getCustomBreadcrumbLinks = (itemPosition: number): JSX.Element[] | null => {\n const { links } = this.props.config;\n\n if (!links || links.length === 0) {\n this.props.context.telemetry.error('BreadCrumb links content is empty, links wont render');\n return null;\n }\n const defaultValueToSubtract = 1;\n return links.map((value: ILinksData, index: number) => {\n itemPosition++;\n const keyIndex = index;\n return index !== links.length - defaultValueToSubtract ? (\n \n ) : (\n
\n {value.linkText}\n
\n );\n });\n };\n\n private readonly _getCategoryHierarchy = (itemPosition: number): JSX.Element[] | null => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n if (!categoryHierarchy) {\n this.props.context.telemetry.error('Category Hierarchy content is empty, module wont render');\n return null;\n }\n return categoryHierarchy.map((value: CategoryHierarchy, index: number) => {\n itemPosition++;\n\n const friendlyName = this._getFriendlyName(this.props.context.request.locale, value.NameTranslations);\n\n return (\n \n );\n });\n };\n\n /**\n * The function to get translation name for the locale.\n * @param locale - The locale information.\n * @param nameTranslations - The name translations names.\n * @returns - The translation name for the locale.\n */\n private readonly _getFriendlyName = (locale: string, nameTranslations?: TextValueTranslation[]): string | undefined => {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n // If friendly name for current locale is null, should use default locale.\n if (nameTranslation === undefined && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations[0];\n }\n\n return nameTranslation?.Text;\n };\n\n private readonly _getPDPLinks = (itemPosition: number): JSX.Element[] | null => {\n const { data, config } = this.props;\n const categoryHierarchy = data.categoryPaths.result;\n const product = data.product.result;\n const url = this.props.context.request.url.requestUrl.href;\n if (!categoryHierarchy) {\n this.props.context.telemetry.error('Category path content is empty for the product');\n return null;\n }\n const links: JSX.Element[] = [];\n\n categoryHierarchy.map((value: ICategoryUrl, index: number) => {\n itemPosition++;\n links.push(\n \n );\n });\n if (product && !config.hideProductName) {\n itemPosition++;\n links.push(\n \n );\n }\n return links;\n };\n\n private readonly _goBack = (): void => {\n window.history.back();\n };\n\n private readonly _getPDPBackButton = (): JSX.Element | null => {\n const isBackAllowed =\n this.props.context && this.props.context.request && this.props.context.request.query && this.props.context.request.query.back;\n if (!isBackAllowed) {\n return null;\n }\n if (MsDyn365.isBrowser && (document.referrer === '' || window.history.length < 2)) {\n return null;\n }\n return (\n \n {this.props.resources.backToResultsText}\n \n );\n };\n}\n\nexport default Breadcrumb;\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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IBreadcrumbViewProps } from './breadcrumb';\n\nconst BreadCrumbView: React.FC = props => {\n const { root, links, backButton, BreadcrumbContainer, BreadcrumbList, BreadcrumbListItem, separator } = props;\n if (!root && !links && !backButton) {\n props.context.telemetry.error('BreadCrumb content is empty, module wont render');\n return null;\n }\n return (\n \n \n {root && (\n \n {root}\n {links && separator}\n \n )}\n {backButton && {backButton}}\n {links &&\n links.map((link, index) => (\n \n \n {link}\n {links[index + 1] && separator}\n \n \n ))}\n
\n \n );\n};\n\nexport default BreadCrumbView;\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 {\n IBuyboxAddToCartViewProps,\n IBuyboxAddToOrderTemplateViewProps,\n IBuyboxAddToWishlistViewProps,\n IBuyboxCallbacks,\n IBuyboxData,\n IBuyboxFindInStoreViewProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureDropdownViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxProps,\n IBuyboxShopSimilarLookViewProps,\n IBuyboxState,\n IBuyboxViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport { IncrementalQuantity, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IBuyboxProps as IBuyboxExtentionProps,\n IBuyboxResources as IBuyboxExtentionResources\n} from '../definition-extensions/buybox.ext.props.autogenerated';\n\nconst BuyboxView: React.FC> = props => {\n const {\n ModuleProps,\n MediaGalleryContainerProps,\n ProductInfoContainerProps,\n addToCart,\n addToOrderTemplate,\n addToWishlist,\n telemetryContent,\n configure,\n description,\n findInStore,\n quantity,\n price,\n title,\n rating,\n callbacks,\n state,\n resources,\n inventoryLabel,\n shopSimilarLook,\n keyInPrice,\n quantityLimitsMessages,\n max,\n shopSimilarDescription,\n unitOfMeasure\n } = props;\n\n return (\n \n {props.mediaGallery}\n \n {title}\n {price}\n {unitOfMeasure}\n {props.bulkPurchaseLink}\n {description}\n {_renderTextBlock(props.slots.textBlocks)}\n {rating}\n {configure && _renderConfigure(configure)}\n {keyInPrice && _renderKeyInPrice(keyInPrice)}\n {quantity && _renderQuantity(quantity, callbacks, props, state, resources, quantityLimitsMessages, max, telemetryContent)}\n {inventoryLabel}\n {_renderCartAndActions(addToCart, addToOrderTemplate, addToWishlist)}\n {findInStore && _renderFindInStore(findInStore)}\n {_renderSocialShare(props.slots && props.slots.socialShare)}\n {shopSimilarLook && _renderShopSimilarItem(shopSimilarLook)}\n {shopSimilarDescription && _renderShopSimilarItem(shopSimilarDescription)}\n \n \n );\n};\n\nconst _renderTextBlock = (textBlocks: React.ReactNode[]): JSX.Element | undefined => {\n if (!textBlocks || textBlocks.length === 0) {\n return undefined;\n }\n\n return <>{textBlocks[0]};\n};\n\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\n if (!socialShare || socialShare.length === 0) {\n return undefined;\n }\n\n return <>{socialShare[0]};\n};\n\nconst _renderCartAndActions = (\n addToCart?: IBuyboxAddToCartViewProps,\n addToOrderTemplate?: IBuyboxAddToOrderTemplateViewProps,\n addToWishlist?: IBuyboxAddToWishlistViewProps\n): JSX.Element | undefined => {\n if (!addToCart && !addToWishlist) {\n return undefined;\n }\n\n return (\n
\n {addToCart && addToCart.errorBlock}\n {addToOrderTemplate && addToOrderTemplate.errorBlock}\n {addToWishlist && addToWishlist.errorBlock}\n
\n {addToCart && addToCart.button}\n {addToOrderTemplate && addToOrderTemplate.button}\n {addToWishlist && addToWishlist.button}\n
\n
\n );\n};\n\nconst _renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\n const { ContainerProps, dropdowns } = configure;\n\n return {dropdowns.map(_renderConfigureDropdown)};\n};\n\nconst _renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n \n {heading}\n {errors}\n \n {select}\n \n );\n};\n\nconst _renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\n const { ContainerProps, storeSelector, heading, description, errors, button, modal, productPickupOptionList } = findInStore;\n\n return (\n \n {storeSelector}\n {heading}\n {productPickupOptionList}\n {description}\n {errors}\n {button}\n {modal}\n \n );\n};\n\n/**\n * On Change function.\n * @param callbacks -Callbacks.\n * @returns Update quantity.\n */\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\n if (callbacks.updateQuantity) {\n return callbacks.updateQuantity(newValue);\n }\n return true;\n};\n\nconst _renderQuantity = (\n quantityComponent: IBuyboxProductQuantityViewProps,\n callbacks: IBuyboxCallbacks,\n props: IBuyboxProps,\n state: IBuyboxState,\n extentionResources: IBuyboxExtentionResources,\n quantityLimitsMessages: React.ReactNode,\n max: number | undefined,\n telemetryContent?: ITelemetryContent\n): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors } = quantityComponent;\n\n const { resources } = props;\n\n const { quantity } = state;\n\n return (\n \n \n {heading}\n {errors}\n \n\n \n {quantityLimitsMessages}\n \n );\n};\n\nconst _renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\n\n return (\n \n {heading}\n {input}\n \n );\n};\n\nconst _renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\n const { ContainerProps, errors, input } = shopSimilarItem;\n\n return (\n \n {errors}\n {input}\n \n );\n};\n\nexport default BuyboxView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IFooterCategoryConfig, IFooterCategoryProps } from './footer-category.props.autogenerated';\n\nexport interface IFooterCategoryViewProps extends IFooterCategoryProps {\n categories: React.ReactNode[];\n FooterList: IModuleProps;\n FooterListItem: INodeProps;\n}\n\n/**\n *\n * FooterCategory component.\n * @extends {React.PureComponent>}\n */\nclass FooterCategory extends React.PureComponent> {\n public render(): JSX.Element | null {\n if (!this.props.slots || !this.props.slots.content || this.props.slots.content.length === 0) {\n this.props.context.telemetry.error('footer slots content is empty, module wont render');\n return null;\n }\n const viewprops = {\n ...this.props,\n categories: this.props.slots.content,\n FooterList: {\n moduleProps: this.props,\n className: classnames('ms-footer__list', this.props.config.className),\n tag: 'ul'\n },\n FooterListItem: {\n className: classnames('ms-footer__list-item', this.props.config.className),\n tag: 'li'\n }\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n}\n\nexport default FooterCategory;\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 React, { ReactNode } from 'react';\n\nimport { IFooterCategoryViewProps } from './footer-category';\n\nexport const FooterCategoryView: React.FC = props => {\n const { categories, FooterList, FooterListItem } = props;\n if (!categories || categories.length === 0) {\n props.context.telemetry.error('Footer content is empty, module wont render');\n return null;\n }\n return (\n \n {categories.map((category: ReactNode, index: number) => {\n return (\n \n {category}\n \n );\n })}\n \n );\n};\n\nexport default FooterCategoryView;\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 } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IImageListConfig, IImageListProps, IImagesData } from './image-list.props.autogenerated';\n\n/**\n * The interface for IImageListViewProps.\n */\nexport interface IImageListViewProps extends IImageListProps {\n imageList: IModuleProps;\n imageListHeading?: React.ReactNode;\n imageListContainer: INodeProps;\n imageListItem: INodeProps;\n imageListItemAnchorTag: INodeProps;\n imageListItems: IImageListItem[] | undefined;\n}\n\n/**\n * The interface for IImageListItem.\n */\nexport interface IImageListItem {\n image: JSX.Element | undefined;\n text: JSX.Element | undefined;\n link: string | undefined;\n linkAltText: string | undefined;\n linkAriaLabel: string | undefined;\n}\n\n/**\n *\n * ImageList component.\n * @extends {React.PureComponent>}\n */\nclass ImageList extends React.PureComponent> {\n public render(): JSX.Element | null {\n const { heading } = this.props.config;\n const imageListTitle = heading && ;\n const viewProps: IImageListViewProps = {\n ...this.props,\n imageList: {\n moduleProps: this.props,\n className: classnames('ms-image-list', this.props.config.className),\n tag: 'div'\n },\n imageListHeading: imageListTitle,\n imageListContainer: {\n className: 'ms-image-list__list',\n role: 'list',\n tag: 'ul'\n },\n imageListItem: {\n className: 'ms-image-list__list-item',\n role: 'listitem',\n tag: 'li'\n },\n imageListItemAnchorTag: {\n tag: 'a',\n className: 'ms-image-list__link',\n role: 'link'\n },\n imageListItems: this._renderImageListItems()\n };\n return this.props.renderView(viewProps);\n }\n\n /**\n * Handle paragraph change.\n * @param index - Index of image item in array of image items.\n * @returns Void.\n */\n public handleParagraphChange = (index: number) => (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.images![index]) {\n this.props.config.images![index].paragraph = event.target.value;\n }\n };\n\n /**\n * Render list of images.\n * @returns List of images with text and redirection link.\n */\n private readonly _renderImageListItems = (): IImageListItem[] | undefined => {\n const imageList: IImagesData[] | undefined = this.props.config.images;\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=65&h=65&q=80&m=6', w: 65, h: 65 },\n lg: { q: 'w=65&h=65&q=80&m=6', w: 65, h: 65 },\n xl: { q: 'w=65&h=65&q=80&m=6', w: 65, h: 65 }\n },\n lazyload: false,\n disableLazyLoad: true\n };\n return imageList?.map((item, index) => {\n const { image, link, paragraph } = item;\n\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings!,\n imageSettings: (image?.imageSettings ?? defaultImageSettings) as Msdyn365.IImageSettings | undefined\n };\n\n const imageLink: string | undefined = link?.linkUrl.destinationUrl;\n const imageLinkText: string | undefined = link?.linkText ?? link?.ariaLabel;\n const imageLinkAriaLabel: string | undefined = link?.ariaLabel;\n\n // If image is null, we want to render the placeholder SVG - by passing image data with empty src\n const imageImage = (\n \n );\n\n const imageText = paragraph && (\n \n );\n const imageListItem: IImageListItem = {\n image: imageImage,\n text: imageText,\n link: imageLink,\n linkAltText: imageLinkText,\n linkAriaLabel: imageLinkAriaLabel\n };\n return imageListItem;\n });\n };\n}\n\nexport default ImageList;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IImageListViewProps } from './image-list';\n\n/**\n * Render the thumbnail item images.\n * @param props - The image list view props.\n * @returns Return HTML having IImageListViewProps props with image List.\n */\nexport const imageListView = (props: IImageListViewProps): JSX.Element => {\n const { imageList, imageListContainer, imageListHeading, imageListItem, imageListItems, imageListItemAnchorTag } = props;\n return (\n \n {imageListHeading}\n \n {imageListItems?.map(item => {\n let indexKey: string;\n\n if (item.image) {\n const image = (item.image as unknown) as Msdyn365.Image;\n indexKey = image.props.src as string;\n } else {\n const text = (item.text as unknown) as Msdyn365.RichTextComponent;\n indexKey = text.props.text as string;\n }\n return (\n \n {item.image && (\n \n {item.image}\n \n )}\n {item.text}\n \n );\n })}\n \n \n );\n};\n\nexport default imageListView;\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 * 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 { IOrderTemplateListViewProps, ISingleOrderTemplateViewProps } from '@msdyn365-commerce-modules/order-template';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateListProps, IOrderTemplateListResources } from '../definition-extensions/order-template-list.ext.props.autogenerated';\n\n/**\n * Interface for OrderTemplateImage.\n */\ninterface IOrderTemplateImage {\n props: {\n children: React.ReactElement[];\n };\n}\n\n/**\n * To render order template.\n * @param orderTemplate - The order template view props.\n * @param orderTemplateNodeProps - The order template node props.\n * @returns The JSX Element.\n */\nconst renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, orderTemplateNodeProps?: INodeProps): JSX.Element | null => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n\n const orderTemplateImageElement: IOrderTemplateImage = orderTemplateImage as React.ReactElement;\n const currentImageListLength = orderTemplateImageElement.props.children.length;\n const defaultNumberImagesInTile = 4;\n\n if (currentImageListLength < defaultNumberImagesInTile) {\n for (let index = 0; index < defaultNumberImagesInTile - currentImageListLength; index++) {\n orderTemplateImageElement.props.children.push();\n }\n }\n\n return (\n \n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n \n );\n};\n\n/**\n * Order Template List View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nexport const OrderTemplateListViewComponent: React.FC> = props => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file\n OrderTemplateList,\n OrderTemplates,\n OrderTemplate,\n status,\n statusMessage,\n heading,\n orderTemplates,\n createOrderTemplateButton,\n templateHeaderStatusMessage\n } = props;\n\n return (\n \n {heading}\n \n {status === 'SUCCESS' && (!OrderTemplates || !orderTemplates || !ArrayExtensions.hasElements(orderTemplates)) ? (\n
\n

{props.resources.headingForEmptyOrderTemplateList}

\n

{props.resources.textForEmptyOrderTemplateList}

\n {createOrderTemplateButton}\n
\n ) : (\n createOrderTemplateButton\n )}\n {templateHeaderStatusMessage}\n
\n {status !== 'SUCCESS' && statusMessage}\n {OrderTemplates && orderTemplates && ArrayExtensions.hasElements(orderTemplates) && (\n \n {orderTemplates.map(orderTemplate => {\n return renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n \n )}\n
\n );\n};\n\nexport default OrderTemplateListViewComponent;\n"],"names":["navigationMenuSource","NavigationMenu","React","constructor","props","super","isRetail","isCMS","_setNavigationSource","sourceType","retailServerOnly","this","cmsOnly","all","_updateViewport","bind","viewport","context","request","device","Type","config","state","isMobile","menuItemList","static","locale","nameTranslations","nameTranslation","length","find","item","Language","toLowerCase","Text","componentDidMount","resizeThrottledEventHandler","window","addThrottledEvent","componentWillUnmount","removeEventListener","render","_mapData","isEmptyOrNullObject","data","telemetry","error","defaultImageSettings","viewports","xs","q","w","h","xl","lazyload","viewProps","_objectSpread","imageSettings","gridSettings","Navigation","moduleProps","className","classnames","tag","role","resources","menuAriaLabel","MenuList","ListItem","Link","Button","onClick","ImageContainer","Span","MobileDescriptionContainer","MobileBackButton","backButtonAriaLabel","MobileDescriptionLabel","isMobileView","menuItemData","renderView","mergedData","categories","result","map","push","_constructMenuItemData","undefined","cmsNavItems","idx","retailItem","cmsItem","image","Images","Uri","id","RSItemIdInit","linkText","getFriendlyName","NameTranslations","linkURL","Url","subMenu","_getNestedChildren","imageSource","CMSItemIdInit","linkUrl","destinationUrl","imageDestinationURL","imageLink","src","_getCMSNestedChildren","category","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","subMenus","_getViewport","setState","innerWidth","sm","md","lg","__decorate","observable","computed","NavigationMenuView","supportedLevel","currentLevel","_handleDropdownToggle","parentId","isBackTrack","activeMenu","mobileViewLabelText","parentMenu","_resetFocus","_handleGoBack","setTimeout","menuNode","current","focus","_handleClickOutside","event","contains","target","_closeSubmenu","document","body","addEventListener","Module","Object","assign","Node","ref","tabIndex","_renderDisplay","menuItem","i","_getFromSubMenu","key","_createMenuItemList","forEach","index","found","_renderSubMenu","_renderButtonMenuItem","_renderLinkMenuItem","_renderSpanMenuItem","levelClassName","menuOptions","option","hasOptions","toString","_renderMenu","onFocus","href","level","currentItem","_idx","AccountGenericTile","handleHeadingChange","heading","text","value","handleLinkTextChange","linkIndex","links","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","Msdyn365","editProps","onEdit","requestContext","LinksComponent","onTextChange","_mapEditableLinks","linkdata","editableLinks","payLoad","getPayloadObject","link","contentAction","etext","attributes","getTelemetryAttributes","editableLink","ariaLabel","openInNewTab","additionalProperties","_ref","defaultClassName","B2bRequestsTileLinks","ArrayExtensions","hasElements","B2bRequestsTile","_data$customerInforma","customerInformation","IsB2b","b2bRequestsTile","disabled","type","message","errorClassName","GetMaxLength","maxLength","parsedMaxLength","Number","parseInt","isNaN","pattern","onChange","forId","htmlFor","successClassName","PasswordResetVerification","moduleClassName","_onInit","_prePopulateData","_updateErrorMessage","initializationTimer","setInterval","_isInitializationSuccessful","clearInterval","isInitialized","getValue","v1Value","v2Value","templateVersion","emailRegex","EmailRegex","defaultRegex","source","componentDidUpdate","shouldComponentUpdate","nextProps","nextState","viewState","isShowLoading","passwordResetVerification","loading","modal","Modal","isOpen","modalBody","ModalBody","icon","PasswordResetVerificationLoadingIconComponent","PasswordResetVerificationLoadingMessageComponent","loadingMessage","defaultAADConainer","style","display","aadConainer","passwordResetVerificationLocalAccount","_renderLocalAccount","obj","ID","PAT","verifying_blurb","localAccount","verificationControlWrapper","items","_renderInput","emailAddressLabelText","verificationCodeLabelText","successMessage","PasswordResetVerificationSuccessComponent","verificationCodeSendSuccess","emailAddressVerifiedSuccess","errorMessage","PasswordResetVerificationErrorComponent","retryError","retryNotAllowedError","throttledError","codeExpiredError","serverError","invalidEmailError","verificationButtonsWrapper","verificationButtons","PasswordResetVerificationButtonComponent","sendCodeButtonAriaLabel","sendCodeButtonText","verifyCodeButtonAriaLabel","verifyCodeButtonText","resendCodeButtonAriaLabel","resendCodeButtonText","changeEmailButtonAriaLabel","changeEmailButtonText","buttonsWrapper","buttons","continueButtonAriaLabel","continueButtonText","cancelButtonAriaLabel","cancelButtonText","verificationSuccessModal","verificationSuccessModalMessage","labelText","cssClassName","wrapper","label","PasswordResetVerificationLabelComponent","input","PasswordResetVerificationInputComponent","observer","PasswordResetVerificationItem","PasswordResetVerificationLoading","_ref3","_ref2","button","LocalAccount","noclick","attribute","onTelemetryClick","itemProp","content","Separator","separator","Breadcrumb","_pageType","urlTokens","pageType","_getRootLink","root","_getCustomBreadcrumbLinks","itemPosition","keyIndex","_getCategoryHierarchy","categoryHierarchy","_getFriendlyName","_nameTranslation","_getPDPLinks","categoryPaths","product","url","requestUrl","Name","hideProductName","_goBack","history","back","_getPDPBackButton","query","MsDyn365","isBrowser","referrer","backToResultsText","rootLink","breadcrumbLinks","backButtonComponent","breaCrumbType","app","breadcrumbType","linkSeparator","breadcrumbViewProps","BreadcrumbContainer","BreadcrumbList","BreadcrumbListItem","backButton","CountryPicker","_telemetryContent","_preferredSiteStorageKey","_cookieExpirationTime","closeModal","isModalOpen","_handleStayOnSiteButtonClick","_this$props$context$r","currentBaseUrl","marketSettings","urlToStore","_appendProtocolToUrl","_writeToCookie","_handleClick","storageKey","storageValue","cookieOptions","secure","sameSite","maxAge","cookies","set","baseUrl","includes","isCookieValueSet","get","_heading$tag","subheading","countryList","actionLink","isConsentGiven","countryPickerHeading","handleTextChange","countryPickerSubHeading","handleParagraphChange","countryPickerActionLink","createLink","currentSiteButton","stayOnCurrentSiteButtonText","viewprops","modalContainer","toggle","modalTransition","timeout","shouldUpdateFocusToFirstElement","modalHeaderContainer","ModalHeader","closeButtonTabIndex","modalFooterContainer","ModalFooter","modalBodyContainer","renderCountryList","stayOnCurrentSiteButton","_this$props$config$ac","StringExtensions","isNullOrEmpty","_link$linkText","localeItems","renderCountry","localeItem","_image$imageSettings","_image$src","localeBaseUrl","matchedCountryItem","imageSize","imageProps","displayString","altText","loadFailureBehavior","shouldSkipToMainImage","displaySubString","countryPickerView","country","_renderTextBlock","textBlocks","_renderSocialShare","socialShare","_renderCartAndActions","addToCart","addToOrderTemplate","addToWishlist","errorBlock","_renderConfigure","configure","ContainerProps","dropdowns","_renderConfigureDropdown","dropdown","LabelContainerProps","errors","select","_renderFindInStore","findInStore","storeSelector","description","productPickupOptionList","onChangeHandler","callbacks","newValue","updateQuantity","_renderQuantity","quantityComponent","extentionResources","quantityLimitsMessages","max","quantity","IncrementalQuantity","currentCount","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","minQuantityText","maxQuantityText","_renderKeyInPrice","keyInPrice","_renderShopSimilarItem","shopSimilarItem","ModuleProps","MediaGalleryContainerProps","ProductInfoContainerProps","price","title","rating","inventoryLabel","shopSimilarLook","shopSimilarDescription","unitOfMeasure","mediaGallery","bulkPurchaseLink","slots","FooterCategory","FooterList","FooterListItem","FooterCategoryView","ImageList","images","paragraph","_renderImageListItems","imageList","disableLazyLoad","imageLinkText","imageLinkAriaLabel","linkAltText","linkAriaLabel","imageListTitle","imageListHeading","imageListContainer","imageListItem","imageListItemAnchorTag","imageListItems","imageListView","indexKey","Subscribe","_emailAddressInputRef","subscribeParagraph","subscribeHeading","handleText","subscribe","subscribeContainer","subscribeForm","subscribeFormAriaLabel","name","autoComplete","emailInput","subscribeFormEmailAriaLabel","placeholder","subscribeEmailPlaceholderText","submitButton","subscribeFormSubmitAriaLabel","subscribeButtonLabel","submitButtonLabelText","onSubmit","preventDefault","subscribeView","_subscribeForm$classN","_emailInput$className","_submitButton$classNa","TileListLinks","TileListItem","_this$props$config$li","backgroundImage","thumbnailImage","redirectionUrl","tileListLinks","tileListLinkContainer","_createHeading","_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","OrderTemplateListViewComponent","OrderTemplateList","OrderTemplates","OrderTemplate","status","statusMessage","orderTemplates","createOrderTemplateButton","templateHeaderStatusMessage","headingForEmptyOrderTemplateList","textForEmptyOrderTemplateList","orderTemplate","renderOrderTemplate","orderTemplateNodeProps","addToCartButton","orderTemplateImage","orderTemplateStatusMessage","removeButton","orderTemplateName","orderTemplateImageElement","currentImageListLength","children"],"sourceRoot":""}