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