{"version":3,"file":"static/js/26.fc7ab2990861d13bb0b0.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/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/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/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/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/fabrikam/views/buybox.view.tsx?aec4","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/interactive-feature-item/components/links.tsx?7423","webpack://Msdyn365.Commerce.Online/./src/modules/interactive-feature-item/interactive-feature-item.tsx?792c","webpack://Msdyn365.Commerce.Online/./src/modules/interactive-feature-item/interactive-feature-item.view.tsx?bdcc"],"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 * 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 * 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 * 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 * 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 {\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 * 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 { 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 '../interactive-feature-item.props.autogenerated';\n\n/**\n * Interactive Feature links.\n */\nexport interface IInteractiveFeatureLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * IInteractiveFeatureLinks component.\n * @extends {React.PureComponent}\n */\nexport class InteractiveFeatureCollectionLinks 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 * IInteractiveFeatureLinks component.\n * @param linkdata - Link data.\n * @returns Editable links.\n */\n private readonly _mapEditableLinks = (linkdata?: ILinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || !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-interactive-feature-collection__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 InteractiveFeatureCollectionLinks;\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 { InteractiveFeatureCollectionLinks } from './components';\nimport { IHeadingData, IInteractiveFeatureItemProps } from './interactive-feature-item.props.autogenerated';\n\n/**\n * Interactive Feature Item view props.\n */\nexport interface IInteractiveFeatureItemViewProps extends IInteractiveFeatureItemProps<{}> {\n title: React.ReactNode;\n paragraph: React.ReactNode;\n image: React.ReactNode;\n links: React.ReactNode;\n featureItem: IModuleProps;\n isMosaic: boolean;\n indexItem?: number;\n itemCounter?: number;\n\n interactiveFeatureCollectionCarouselContainer: INodeProps;\n interactiveFeatureCollectionCarouselImage: INodeProps;\n interactiveFeatureCollectionCarouselContent: INodeProps;\n\n interactiveFeatureCollectionMosaicContainer: INodeProps;\n interactiveFeatureCollectionMosaicImage: INodeProps;\n interactiveFeatureCollectionMosaicDetails: INodeProps;\n}\n\n/**\n * Interactive Feature Item Extented props.\n */\nexport interface IInteractiveFeatureItemExtentedProps extends IInteractiveFeatureItemProps<{}> {\n isMosaic?: boolean;\n indexItem?: number;\n itemCounter?: number;\n}\n\n/**\n *\n * InteractiveFeatureItem component.\n * @extends {React.PureComponent}\n */\nexport class InteractiveFeatureItem 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: IInteractiveFeatureItemProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { indexItem, itemCounter, isMosaic } = this.props;\n const { heading, paragraph, image, links } = this.props.config;\n const featureItemLinks = links && ArrayExtensions.hasElements(links) && (\n \n );\n\n const viewProps = {\n ...this.props,\n indexItem,\n itemCounter,\n isMosaic: isMosaic ? isMosaic : false,\n title: this._createHeading(heading),\n paragraph: this._createParagraph(paragraph),\n image: this._renderImage(image),\n links: featureItemLinks,\n featureItem: {\n moduleProps: this.props,\n className: ''\n },\n interactiveFeatureCollectionCarouselContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-carousel__container'\n },\n interactiveFeatureCollectionCarouselImage: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-carousel__image'\n },\n interactiveFeatureCollectionCarouselContent: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-carousel__heading'\n },\n interactiveFeatureCollectionMosaicContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-mosaic',\n 'aria-label': heading?.text,\n tabindex: '0',\n role: 'group'\n },\n interactiveFeatureCollectionMosaicImage: {\n className: 'ms-interactive-feature-collection-mosaic__image'\n },\n interactiveFeatureCollectionMosaicDetails: {\n className: 'ms-interactive-feature-collection-mosaic__details'\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 _renderImage(item?: Msdyn365.IImageData, isAriaHiddenAttribute?: boolean): React.ReactNode | null {\n // Even if image.src is null, we render the Image component to render the fallback SVG\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=328&h=459&m=6', w: 328, h: 459 },\n sm: { q: 'w=348&h=487&m=6', w: 348, h: 487 },\n md: { q: 'w=650&h=366&m=6', w: 650, h: 366 },\n lg: { q: 'w=650&h=366&m=6', w: 650, h: 366 },\n xl: { q: 'w=650&h=366&m=6', w: 650, h: 366 }\n },\n lazyload: true\n };\n const verifiedImageSettings = item?.imageSettings?.viewports ? item.imageSettings : defaultImageSettings;\n return (\n \n );\n }\n}\n\nexport default InteractiveFeatureItem;\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 { IInteractiveFeatureItemViewProps } from './interactive-feature-item';\n\n/**\n * Enumerator used to make some calculations to set the proper classnames\n * using modular calculations to see if they are in a right or left column or on first or last row.\n */\nenum MagicNumber {\n modularDivisor = 4,\n caseNumberZero = 0,\n caseNumberOne = 1,\n caseNumberTwo = 2\n}\n\n/**\n * Feature Item View.\n * @param thisProps - Feature Item view props.\n * @param indexItem - Feature Item view props.\n * @param itemCounter - Feature Item view props.\n * @returns Feature item View.\n * @extends {} InteractiveFeatureItem\n */\nconst renderMosaic = (thisProps: IInteractiveFeatureItemViewProps, indexItem?: number, itemCounter?: number): JSX.Element | null => {\n const {\n title,\n paragraph,\n image,\n links,\n interactiveFeatureCollectionMosaicContainer,\n interactiveFeatureCollectionMosaicImage,\n interactiveFeatureCollectionMosaicDetails\n } = thisProps;\n const indexAux = indexItem ? indexItem + MagicNumber.caseNumberOne : MagicNumber.caseNumberOne;\n const itemCounterAux = itemCounter ? itemCounter : MagicNumber.caseNumberZero;\n const modularAux = indexAux % MagicNumber.modularDivisor;\n const firstRow = indexAux <= MagicNumber.caseNumberTwo ? 'firstRow' : '';\n const lastRow =\n itemCounterAux && (indexAux === itemCounterAux || indexAux === itemCounterAux - MagicNumber.caseNumberOne) ? 'lastRow' : '';\n const onCornerRight = modularAux === MagicNumber.caseNumberZero ? 'item-corner-right' : '';\n const onCornerLeft = modularAux === MagicNumber.caseNumberOne ? 'item-corner-left' : '';\n const containerClasses = classnames('ms-interactive-feature-collection-mosaic', onCornerLeft, onCornerRight, firstRow, lastRow);\n\n return (\n \n {image}\n \n {title}\n {paragraph}\n {links}\n \n \n );\n};\n\n/**\n * Feature Item View.\n * @param thisProps - Feature Item view props.\n * @returns Feature item View.\n * @extends {} InteractiveFeatureItem\n */ const renderCarousel = (thisProps: IInteractiveFeatureItemViewProps): JSX.Element | null => {\n const {\n title,\n paragraph,\n image,\n links,\n interactiveFeatureCollectionCarouselContainer,\n interactiveFeatureCollectionCarouselImage,\n interactiveFeatureCollectionCarouselContent\n } = thisProps;\n return (\n \n {image}\n \n {title}\n {paragraph}\n {links}\n \n \n );\n};\n\n/**\n * Feature Item View.\n * @param props - Feature Item view props.\n * @returns Feature item View.\n * @extends {} InteractiveFeatureItem\n */\nexport const FeatureItemViewComponent: React.FC = props => {\n const { isMosaic, featureItem, indexItem, itemCounter } = props;\n if (isMosaic) {\n return <>{renderMosaic(props, indexItem, itemCounter)};\n }\n return {renderCarousel(props)};\n};\n\nexport default FeatureItemViewComponent;\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","_renderTextBlock","textBlocks","_renderSocialShare","socialShare","_renderCartAndActions","addToCart","addToOrderTemplate","addToWishlist","errorBlock","button","_renderConfigure","configure","ContainerProps","dropdowns","_renderConfigureDropdown","dropdown","LabelContainerProps","heading","errors","select","_renderFindInStore","findInStore","storeSelector","description","modal","productPickupOptionList","onChangeHandler","callbacks","newValue","updateQuantity","_renderQuantity","quantityComponent","extentionResources","quantityLimitsMessages","max","telemetryContent","quantity","IncrementalQuantity","currentCount","onChange","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","minQuantityText","maxQuantityText","_renderKeyInPrice","keyInPrice","input","_renderShopSimilarItem","shopSimilarItem","ModuleProps","MediaGalleryContainerProps","ProductInfoContainerProps","price","title","rating","inventoryLabel","shopSimilarLook","shopSimilarDescription","unitOfMeasure","mediaGallery","bulkPurchaseLink","slots","ImageList","handleParagraphChange","images","paragraph","value","_renderImageListItems","imageList","disableLazyLoad","_image$imageSettings","_link$linkText","link","imageProps","imageLinkText","ariaLabel","imageLinkAriaLabel","Msdyn365","loadFailureBehavior","requestContext","text","editProps","onEdit","linkAltText","linkAriaLabel","_heading$tag","imageListTitle","imageListHeading","imageListContainer","imageListItem","imageListItemAnchorTag","imageListItems","imageListView","indexKey","altText","InteractiveFeatureCollectionLinks","_mapEditableLinks","linkdata","ArrayExtensions","editableLinks","payLoad","getPayloadObject","contentAction","etext","attributes","getTelemetryAttributes","editableLink","openInNewTab","additionalProperties","onTelemetryClick","links","onTextChange","InteractiveFeatureItem","_telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","handleHeadingChange","handleLinkTextChange","linkIndex","_this$props$config$li","Number","indexItem","itemCounter","isMosaic","featureItemLinks","_createHeading","_createParagraph","_renderImage","featureItem","interactiveFeatureCollectionCarouselContainer","interactiveFeatureCollectionCarouselImage","interactiveFeatureCollectionCarouselContent","interactiveFeatureCollectionMosaicContainer","tabindex","interactiveFeatureCollectionMosaicImage","interactiveFeatureCollectionMosaicDetails","StringExtensions","isAriaHiddenAttribute","_item$imageSettings","_this$props$config$im","verifiedImageSettings","moduleType","typeName","imagePropertyName","MagicNumber","FeatureItemViewComponent","renderMosaic","thisProps","indexAux","caseNumberOne","itemCounterAux","caseNumberZero","modularAux","modularDivisor","firstRow","caseNumberTwo","lastRow","onCornerRight","onCornerLeft","containerClasses","renderCarousel"],"sourceRoot":""}