{"version":3,"file":"static/js/d5524860f1f5e13f2ef2.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/get-view-port.tsx?4210","webpack://mattressfirm/./src/Utilities/isExternalLink.ts?57de","webpack://mattressfirm/./src/Utilities/plp-url-utils.ts?728b","webpack://mattressfirm/./src/data-actions/navigation-menu-state-data-action.ts?8ae5","webpack://mattressfirm/./src/themes/mattressfirm/custom-components/header-preferred-store.tsx?8ed0","webpack://mattressfirm/./src/themes/mattressfirm/custom-components/logo.tsx?1c87","webpack://mattressfirm/./src/themes/mattressfirm/views/header.view.tsx?6bd0","webpack://mattressfirm/./lib/header/module-registration.js?4d67","webpack://mattressfirm/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://mattressfirm/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://mattressfirm/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://mattressfirm/./src/modules/header/components/header-preferred-store.tsx?ee9c","webpack://mattressfirm/./src/modules/header/components/logo.tsx?f27e","webpack://mattressfirm/./src/modules/header/components/nav-icon.tsx?2475","webpack://mattressfirm/./src/modules/header/header.tsx?e91a","webpack://mattressfirm/./src/modules/header/header.view.tsx?cf0f","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import MsDyn365, { ICoreContext } from '@msdyn365-commerce/core';\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nconst _getViewPort = (context: ICoreContext): GridSize => {\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 } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n return 'xs';\r\n};\r\n\r\nexport default _getViewPort;\r\n","export const isExternalLink = (url: any) => {\r\n const tmp = document.createElement('a');\r\n tmp.href = url;\r\n return tmp.host !== window.location.host;\r\n};","import { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\r\nexport interface IVirtualRefinersConfig {\r\n order: number;\r\n refinerName: string;\r\n enableForMattresses: boolean;\r\n enableForOtherCategories: boolean;\r\n allowDuplicate: boolean;\r\n}\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const origin = requestUrl.origin;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `${origin}/${filteredPath}`;\r\n};\r\n\r\nexport const filteredURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `/${filteredPath}`;\r\n};\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURLWithoutBaseUrl = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('\\/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n return urlParts?.join('\\/');\r\n};\r\n\r\n/**\r\n * This will remove the Pipe sign value set from urlParts\r\n * @param urlParts\r\n * @returns\r\n */\r\nexport const removePipeSignValue = (urlParts: string[]) => {\r\n // urlParts.forEach((part, index) => {\r\n // const indexOfValue = urlParts.indexOf('%7c');\r\n // if (indexOfValue !== -1) {\r\n // urlParts.splice(indexOfValue, 1);\r\n // }\r\n // });\r\n\r\n if (urlParts !== undefined && urlParts.length > 0) {\r\n urlParts = urlParts.filter(urlPart => urlPart.indexOf('%7c') === -1);\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will remove the keywords from urlParts array which were received from\r\n * the app.settings.json/CMS Extensions\r\n * @param urlParts\r\n * @param requestContext\r\n * @returns urlParts array filtered\r\n */\r\nexport const removeKeywords = (urlParts: string[], requestContext: IRequestContext): string[] => {\r\n const removeKeywordFromUrl = requestContext.app.config.removeKeywordFromUrl;\r\n\r\n if (urlParts.length > 0 && removeKeywordFromUrl && removeKeywordFromUrl.length > 0) {\r\n const removeKeywordFromUrlArray: string[] = removeKeywordFromUrl?.trim().split(',');\r\n removeKeywordFromUrlArray?.length > 0 &&\r\n urlParts.forEach(_part => {\r\n removeKeywordFromUrlArray.forEach(removeKeyword => {\r\n const trimmedKeyword = removeKeyword.trim().toLowerCase();\r\n const indexOfValue = urlParts.indexOf(trimmedKeyword);\r\n if (trimmedKeyword.length > 0 && indexOfValue !== -1) {\r\n urlParts.splice(indexOfValue, 1);\r\n }\r\n });\r\n });\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will sort the Virtual refiner config based on order and return\r\n * only active virtual refiner configs based on isMattress category will\r\n * be returned\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getSortedVirtualRefinerConfig = (\r\n requestContext: IRequestContext,\r\n isMattressesCategory: boolean | undefined\r\n): IVirtualRefinersConfig[] | undefined => {\r\n let appConfigSorted = getVirtualRefinerConfig(requestContext);\r\n\r\n // sort the config by provided config\r\n if (appConfigSorted) {\r\n if (isMattressesCategory === true) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForMattresses;\r\n });\r\n } else if (isMattressesCategory === false) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForOtherCategories;\r\n });\r\n }\r\n appConfigSorted.sort((a: IVirtualRefinersConfig, b: IVirtualRefinersConfig) => {\r\n return a.order - b.order;\r\n });\r\n }\r\n\r\n return appConfigSorted;\r\n};\r\n\r\n/**\r\n * Virtual refiner names from the app.settings.json will be returned which can be used\r\n * to filter out refiners data based upon active virtual refiners\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns string[]\r\n */\r\nexport const getVirtualRefinerNames = (requestContext: IRequestContext, isMattressesCategory: boolean | undefined): string[] => {\r\n const sortedVirtualRefinerConfig = getSortedVirtualRefinerConfig(requestContext, isMattressesCategory);\r\n\r\n const appConfigRefinerNames: string[] = [];\r\n\r\n sortedVirtualRefinerConfig &&\r\n sortedVirtualRefinerConfig.forEach(sortedConfig => {\r\n appConfigRefinerNames.push(sortedConfig.refinerName.trim().toLowerCase());\r\n });\r\n\r\n return appConfigRefinerNames;\r\n};\r\n\r\n/**\r\n * This will return the value of virtual refiner configuration\r\n * @param requestContext\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getVirtualRefinerConfig = (requestContext: IRequestContext): IVirtualRefinersConfig[] => {\r\n return requestContext.app.config.urlModifications;\r\n};\r\n\r\nexport async function getVirtualRefinerValues(\r\n requestContext: IRequestContext,\r\n virtualRefiners: IProductRefinerHierarchy[]\r\n): Promise {\r\n const virtualRefinerValues: ProductRefinerValue[] = [];\r\n if (virtualRefiners.length === 0) {\r\n return virtualRefinerValues;\r\n }\r\n const requestUrl = requestContext.url.requestUrl;\r\n // const origin = requestUrl.origin;\r\n const path = requestUrl.pathname;\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // remove category id {categoryid}.c\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n\r\n if (categoryId) {\r\n urlParts.splice(-1);\r\n }\r\n\r\n // run loop for each url part and get values from refiners for further usage\r\n const finalizedUrlParts: string[] = [];\r\n urlParts.forEach(plainUrlPart => {\r\n const urlPart = decodeURIComponent(plainUrlPart);\r\n if (urlPart.indexOf('|') !== -1) {\r\n const splitOnPipeSign = urlPart?.split('|');\r\n const filteredParts = splitOnPipeSign.filter(part => part.length > 0);\r\n filteredParts.forEach(filteredPart => {\r\n finalizedUrlParts.push(filteredPart.toLowerCase().trim());\r\n });\r\n }\r\n finalizedUrlParts.push(urlPart);\r\n });\r\n finalizedUrlParts.forEach((urlPart) => {\r\n virtualRefiners.forEach((mainRefiner) => {\r\n mainRefiner.Values.forEach((refinerValue) => {\r\n const refinerValueKeyName = refinerValue.LeftValueBoundString?.toLowerCase().trim().split(' ')?.join('-').replace(/\\&/g, 'and').replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-');\r\n if (refinerValueKeyName && refinerValueKeyName === urlPart) {\r\n virtualRefinerValues.push(refinerValue);\r\n }\r\n });\r\n });\r\n });\r\n\r\n return virtualRefinerValues;\r\n}\r\n\r\n/**\r\n * For navigation menu links, it will remove keywords configured in global configurations from the navigation link\r\n * and clp link and return url path string\r\n * @param link\r\n * @param requestContext\r\n * @returns string\r\n */\r\nexport const navLinkKeywordRemoval = (link: string, requestContext: IRequestContext): string => {\r\n // Using the rest operator in case there is a weirdly formatted URL with multiple question marks.\r\n const [linkBase, ...linkParams] = link?.split('?');\r\n\r\n // Only apply to category links and product links, which end in .c or .p. Check that a keyword is configured.\r\n if (!linkBase.endsWith('.c') && !linkBase.endsWith('.p') || !requestContext.app.config) {\r\n return link;\r\n }\r\n\r\n // Separate out url parts split on forward /\r\n let urlParts = linkBase?.split('\\/');\r\n\r\n // Remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // Glue the URL params back together\r\n const linkParam = linkParams.map(param => `?${param}`)?.join('');\r\n\r\n // Rebuild URL by joining with forward slash and appending any URL parameters\r\n const filteredLink = `${urlParts?.join('/')}${linkParam}`;\r\n return `${filteredLink}`;\r\n};\r\nexport const regExSpecialChars = (includeConfigList: string): RegExp => {\r\n let includeConfig = '';\r\n if (includeConfigList !== undefined && includeConfigList !== '') {\r\n includeConfig = includeConfigList?.trim().split(',')?.join('\\\\\\\\');\r\n includeConfig = includeConfig && includeConfig !== '' ? `\\\\\\\\${includeConfig}` : '';\r\n const pattern = `[^\\\\w\\\\&\\\\|${includeConfig}]`;\r\n return new RegExp(pattern, 'gi');\r\n } else {\r\n\r\n const pattern = `[^\\\\w\\\\&\\\\|]`;\r\n return new RegExp(pattern, 'gi');\r\n }\r\n};\r\n","import {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { INavigationMenuState } from './navigation-menu-state';\r\n\r\n/**\r\n * NavigationMenuState - action input\r\n */\r\nexport class NavMenuStateInput implements IActionInput {\r\n public getCacheKey = () => `NavMenuState`;\r\n public getCacheObjectType = () => 'NavMenuState';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * NavMenuStateInput - action\r\n */\r\nexport async function navMenuStateAction(input: NavMenuStateInput, ctx: IActionContext): Promise {\r\n return { isMenuHasParent: false, isMobileMenuCollapsed: true, selectedNavMenu: '', menuItemData: [] };\r\n}\r\n\r\n/**\r\n * NavMenuStateInput - create new input for create action\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new NavMenuStateInput();\r\n};\r\n\r\n/**\r\n * NavMenuStateInput - create action\r\n */\r\nexport default createObservableDataAction({\r\n action: >navMenuStateAction,\r\n input: createInput\r\n});\r\n","// VSI Customization - starts\r\nimport { IHeaderData } from '@msdyn365-commerce-modules/header/dist/types/modules/header/header.data';\r\nimport MsDyn365, { Text } from '@msdyn365-commerce/core';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IHeaderProps } from '../definition-extensions/header.ext.props.autogenerated';\r\nimport { IMfrmExtendedStoreSelectorData } from '../views/header.data';\r\n// VSI Customization - ends\r\n\r\n/**\r\n * The header preferred store component\r\n */\r\n@observer\r\nexport class HeaderPreferredStore extends React.PureComponent> {\r\n public handleClick = () => {\r\n // VSI Customization - starts\r\n MsDyn365.isBrowser && document.body.classList.add('modal-store-locator-toggle');\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n utag.link({\r\n event: \"store-locator-slideout-open\",\r\n event_category: \"store locator slideout\",\r\n event_action: \"open shelf\",\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: \"false\"\r\n });\r\n }\r\n return this._findPreferreStoreOnClick(this.props);\r\n // VSI Customization - ends\r\n };\r\n\r\n // VSI Customization - starts\r\n public handleClose = (): void => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n MsDyn365.isBrowser && document.body.classList.remove('modal-store-locator-toggle');\r\n storeSelectorStateManager?.closeDialog();\r\n };\r\n // VSI Customization - ends\r\n\r\n public render(): JSX.Element | undefined {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n slots,\r\n resources\r\n } = this.props;\r\n // VSI Customization - starts\r\n const isModalOpen =\r\n (this.props.data.storeSelectorState &&\r\n this.props.data.storeSelectorState.result &&\r\n this.props.data.storeSelectorState.result.isModalOpen) ||\r\n false;\r\n\r\n\r\n if (MsDyn365.isBrowser && slots && slots.mfrmStoreSelector && slots.mfrmStoreSelector.length) {\r\n const mfrmPrefferedStore: OrgUnitLocation = localStorage.getItem('_mfrm__prefferedStore_')\r\n ? JSON.parse(localStorage.getItem('_mfrm__prefferedStore_') || '')\r\n : null;\r\n const sociPrefferedStore: any = localStorage.getItem('_mfrm__prefferedStore_')\r\n ? JSON.parse(localStorage.getItem('_mfrm__prefferedStore_') || '')\r\n : null;\r\n if (mfrmPrefferedStore === undefined) {\r\n localStorage.removeItem('_msdyn365__preferredStore_');\r\n }\r\n const storeCity =\r\n storeSelectorStateManager && (storeSelectorStateManager.preferredStore && storeSelectorStateManager.preferredStore.StoreId) ===\r\n (mfrmPrefferedStore && mfrmPrefferedStore.OrgUnitNumber) && mfrmPrefferedStore?.City &&\r\n resources.mfrmStoreCity.replace('{city}', `${mfrmPrefferedStore?.City}`) || undefined;\r\n const sociStoreCity = this.props.app.config.enableSociLocations && sociPrefferedStore?.city &&\r\n resources.mfrmStoreCity.replace('{city}', `${sociPrefferedStore?.city}`) || undefined;\r\n\r\n const city = this.props.app.config.enableSociLocations ? sociStoreCity : storeCity;\r\n\r\n return (\r\n <>\r\n {/* VSI Customization - starts */}\r\n \r\n {/* Replaced with Text componentfor rendering html */}\r\n {/* {storeName} */}\r\n {\r\n \r\n }\r\n \r\n {slots.mfrmStoreSelector}\r\n {/* VSI Customization - starts */}\r\n \r\n );\r\n }\r\n\r\n return ;\r\n }\r\n\r\n private async _findPreferreStoreOnClick(props: IHeaderProps): Promise {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n modules\r\n } = props;\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n let storeSelectorId: string = '';\r\n // VSI Customization - starts\r\n if (modules && Object.keys(modules).length > 0 && modules.mfrmStoreSelector && modules.mfrmStoreSelector.length > 0) {\r\n storeSelectorId = modules.mfrmStoreSelector[0].id;\r\n }\r\n // VSI Customization - ends\r\n await storeSelectorStateManager\r\n .openDialog({\r\n id: storeSelectorId,\r\n showMapViewLink: false,\r\n onLocationSelected: orgUnitLocation => {\r\n return Promise.resolve();\r\n }\r\n })\r\n .catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.error(error.message);\r\n props.telemetry.debug('Unable to set preferred store');\r\n }\r\n return;\r\n });\r\n }\r\n}\r\n\r\nexport default HeaderPreferredStore;\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { isExternalLink } from '../../../Utilities/isExternalLink';\r\n\r\nexport interface ILogoProps {\r\n image: Msdyn365.IImageData;\r\n gridSettings?: Msdyn365.IGridSettings;\r\n link?: ILinkData;\r\n className?: string;\r\n telemetryContent?: ITelemetryContent;\r\n requestContext: Msdyn365.IRequestContext;\r\n}\r\n\r\nexport interface ILinkData {\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n linkText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * Logo component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class Logo extends React.PureComponent {\r\n private attributes?: Msdyn365.IDictionary;\r\n\r\n constructor(props: ILogoProps) {\r\n super(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\r\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n public render(): JSX.Element {\r\n return (\r\n // tslint:disable-next-line: react-a11y-event-has-role\r\n ) => {\r\n // @ts-ignore\r\n if (utag) {\r\n event.preventDefault();\r\n const isExternal = isExternalLink(this.props.link?.linkUrl.destinationUrl);\r\n const eventName = isExternal ? 'outbound-general-link-click' : 'internal-navigation';\r\n const eventCategory = isExternal ? 'outbound links' : 'internal links';\r\n const internalDestinationUrl =\r\n this.props.link?.linkUrl.destinationUrl === '/'\r\n ? '/'\r\n : this.props.link?.linkUrl.destinationUrl.split(location.host)[1];\r\n const internalLocalUrl =\r\n Msdyn365.msdyn365Commerce.isBrowser &&\r\n (window.location.href === '/' ? '/' : window.location.href.split(location.host)[1].split('?')[0]);\r\n const eventAction = isExternal ? `to: ${this.props.link?.linkUrl.destinationUrl}` : `to: ${internalDestinationUrl}`;\r\n const eventLabel = isExternal\r\n ? `from ${this.props.link?.ariaLabel} logo: ${Msdyn365.msdyn365Commerce.isBrowser && window.location.href}`\r\n : `from ${this.props.link?.ariaLabel} logo: ${internalLocalUrl}`;\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: eventName,\r\n event_category: eventCategory,\r\n event_action: eventAction,\r\n event_label: eventLabel,\r\n event_noninteraction: 'false'\r\n });\r\n if (Msdyn365.msdyn365Commerce.isBrowser) {\r\n const isOpenInNewTab = this.props.link?.openInNewTab;\r\n !isOpenInNewTab\r\n ? (window.location.href = this.props.link?.linkUrl.destinationUrl!)\r\n : window.open(this.props.link?.linkUrl.destinationUrl);\r\n }\r\n }\r\n }}\r\n >\r\n {this._renderLogo(this.props)}\r\n \r\n );\r\n }\r\n\r\n private _renderLogo(config: ILogoProps): JSX.Element {\r\n if (config.link && config.link.linkUrl.destinationUrl) {\r\n return (\r\n \r\n {this._renderImage(config)}\r\n \r\n );\r\n }\r\n return this._renderImage(config);\r\n }\r\n\r\n private _renderImage(config: ILogoProps): JSX.Element {\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=0&h=0&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=0&h=0&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=0&h=0&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: false,\r\n disableLazyLoad: true\r\n };\r\n // TODO: add imageSettings to logo from config\r\n // config && config.image && config.image.imageSettings || defaultImageSettings\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Logo;\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\n\r\nimport { IHeaderViewProps } from '@msdyn365-commerce-modules/header/src/modules/header/./header';\r\n/* VSI-Customization - Start */\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n Modal,\r\n ModalBody,\r\n ModalHeader,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\n/* VSI-Customization - End */\r\nimport * as MsDyn365 from '@msdyn365-commerce/core';\r\n/* VSI-Customization - Start */\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { NavMenuStateInput } from '../../../data-actions/navigation-menu-state-data-action';\r\nimport _getViewPort from '../../../Utilities/get-view-port';\r\nimport { navLinkKeywordRemoval } from '../../../Utilities/plp-url-utils';\r\nimport { HeaderPreferredStore } from '../custom-components/header-preferred-store';\r\nimport Logo from '../custom-components/logo';\r\nimport { IHeaderProps, IHeaderResources, IUtilityLinksData } from '../definition-extensions/header.ext.props.autogenerated';\r\nimport { IMfrmExtendedNavMenuData, IMfrmExtendedStoreSelectorData, ISecondaryNavItemsData } from './header.data';\r\nimport { isExternalLink } from '../../../Utilities/isExternalLink';\r\n/* VSI-Customization - End */\r\n\r\n\r\n// tslint:disable-next-line: max-func-body-length\r\nconst headerView: React.FC> = props => {\r\n const [isPageScroll, setIsPageScroll] = React.useState(false);\r\n const [isMobile, setIsMobile] = React.useState(false);\r\n const [isTablet, setIsTablet] = React.useState(false);\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const { HeaderTag, HeaderContainer, HeaderTopBarContainer, MobileMenuLinksContainer, config, context } = props;\r\n // change tag to div so there isnt nested \r\n const updatedHeaderTag = {\r\n moduleProps: HeaderTag.moduleProps,\r\n className: classnames(HeaderTag.className),\r\n tag: 'div'\r\n };\r\n\r\n {\r\n /* VSI-Customization - Start - destructured and filtered data */\r\n }\r\n const mfrmMenuBar =\r\n (props.slots && props.slots.extendedMenuBar && props.slots.extendedMenuBar.length && props.slots.extendedMenuBar) || props.menuBar;\r\n const mfrmSearch =\r\n (props.slots && props.slots.mfrmSearchSlot && props.slots.mfrmSearchSlot.length && props.slots.mfrmSearchSlot) || props.search;\r\n const storeSelector = props.slots &&\r\n props.slots.mfrmStoreSelector &&\r\n props.slots.mfrmStoreSelector.length &&\r\n props.data.storeSelectorStateManager && ;\r\n const mfrmNotfications =\r\n props.slots && props.slots.mfrmNotifications && props.slots.mfrmNotifications.length && props.slots.mfrmNotifications;\r\n const mfrmCartIcon = props.slots && props.slots.mfrmCartIcon && props.slots.mfrmCartIcon.length && props.slots.mfrmCartIcon;\r\n const { secondaryLogoLink, secondaryLogoImage, utilityLinks, isHeaderSticky } = config;\r\n const desktopUtilityLinks = utilityLinks && utilityLinks.filter(link => link.showUnderUtilityDesktop === true);\r\n const tabUtilityLinks = utilityLinks && utilityLinks.filter(link => link.showUnderUtilityTab === true);\r\n const hamburgerUtilityLinks = utilityLinks && utilityLinks.filter(link => link.showUnderHamburger === true);\r\n const hamburgerTabUtilityLinks =\r\n utilityLinks && utilityLinks.filter(link => link.showUnderHamburger === true && link.hideFromTab !== true);\r\n const navMenuParentActive = props.data.navMenuState.result?.isMenuHasParent;\r\n const secondaryNavConfig = get(mfrmMenuBar[0], 'props.config') || [];\r\n const { secondaryNavItems, menuItemsLimitDesktop, menuItemsLimitMobile } = secondaryNavConfig;\r\n const menuItemLimit = isMobile || isTablet ? menuItemsLimitMobile : menuItemsLimitDesktop;\r\n const secondaryNavLimit = menuItemLimit !== undefined ? menuItemLimit : secondaryNavItems ? secondaryNavItems.length : 0 || 0;\r\n const customer = props.data.accountInformation?.result;\r\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n const stickyNavigation = () => {\r\n const InitialTopBarSize =\r\n (MsDyn365.msdyn365Commerce.isBrowser &&\r\n document\r\n .getElementsByClassName('ms-header__topbar')\r\n .item(0)\r\n ?.getBoundingClientRect().height) ||\r\n 0;\r\n const [visibleHeight, setVisibleHeight] = React.useState(0);\r\n const [topBarVisibleHeight, setTopBarVisibleHeight] = React.useState(0);\r\n const scrollValue = 0;\r\n const scrollBarWidth = MsDyn365.msdyn365Commerce.isBrowser && window.innerWidth - document.body.offsetWidth;\r\n const windowWidth = MsDyn365.msdyn365Commerce.isBrowser && document.documentElement.clientWidth;\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n if (props.mobileMenuCollapsed !== true) {\r\n document.body.style.setProperty('overflow', 'hidden');\r\n document.documentElement.style.setProperty('overflow', 'hidden');\r\n } else {\r\n document.body.style.removeProperty('overflow');\r\n document.documentElement.style.removeProperty('overflow');\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n MsDyn365.msdyn365Commerce.isBrowser &&\r\n addThrottledEvent(window, 'resize', () => updateViewPort(context, setIsOpen, setIsMobile, setIsTablet));\r\n updateViewPort(context, setIsOpen, setIsMobile, setIsTablet);\r\n });\r\n\r\n // for viewport innerHeight\r\n const InitialHeight = MsDyn365.msdyn365Commerce.isBrowser && document.documentElement.clientHeight;\r\n const [androidBannerViewHeight, setAndroidBannerViewHeight] = React.useState(87);\r\n const wrapperElement = document.querySelector('.ms-header__container__wrapper');\r\n const secondaryElement = document.querySelector('.ms-header__secondary');\r\n const bannerElement = document.querySelector('.mfrm-android-banner-container');\r\n\r\n if (bannerElement) {\r\n const bannerStyle = getComputedStyle(bannerElement);\r\n if (bannerStyle.display === 'flex') {\r\n if (androidBannerViewHeight === 0) {\r\n wrapperElement?.classList.add('ms-header__container__wrapper--lock');\r\n secondaryElement?.classList.add('ms-header__secondary--lock');\r\n } else if (window.pageYOffset > 87) {\r\n wrapperElement?.classList.add('ms-header__container__wrapper--lock');\r\n secondaryElement?.classList.add('ms-header__secondary--lock');\r\n } else if (androidBannerViewHeight > 0 && androidBannerViewHeight <= 87) {\r\n wrapperElement?.classList.remove('ms-header__container__wrapper--lock');\r\n secondaryElement?.classList.remove('ms-header__secondary--lock');\r\n }\r\n } else {\r\n wrapperElement?.classList.add('ms-header__container__wrapper--lock');\r\n secondaryElement?.classList.add('ms-header__secondary--lock');\r\n }\r\n }\r\n\r\n // storing viewheight into css variable\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n document.documentElement.style.setProperty('--windowSize', `${InitialHeight}px`);\r\n document.documentElement.style.setProperty('--topBarSize', `${topBarVisibleHeight}px`);\r\n document.documentElement.style.setProperty('--scrollbarWidth', `${scrollBarWidth}px`);\r\n document.documentElement.style.setProperty('--windowWidth', `${windowWidth}px`);\r\n document.documentElement.style.setProperty('--initialTopbarSize', `${InitialTopBarSize}px`);\r\n document.documentElement.style.setProperty('--storeLocatorSize', `${visibleHeight}px`);\r\n document.documentElement.style.setProperty('--pageYOffset', `${androidBannerViewHeight}px`);\r\n window.addEventListener('resize', () => {\r\n const vh = document.documentElement.clientHeight;\r\n const scrollBarWidthUpdate = window.innerWidth - document.body.offsetWidth;\r\n const windowWidthUpdate = document.documentElement.clientWidth;\r\n document.documentElement.style.setProperty('--windowSize', `${vh}px`);\r\n document.documentElement.style.setProperty('--scrollbarWidth', `${scrollBarWidthUpdate}px`);\r\n document.documentElement.style.setProperty('--windowWidth', `${windowWidthUpdate}px`);\r\n });\r\n window.addEventListener('scroll', () => {\r\n setAndroidBannerViewHeight(Math.max((87 - window.pageYOffset), 0));\r\n });\r\n }\r\n\r\n if (isPageScroll === true) {\r\n MsDyn365.msdyn365Commerce.isBrowser && document.documentElement.style.setProperty('--topBarSize', `0px`);\r\n MsDyn365.msdyn365Commerce.isBrowser && document.documentElement.style.setProperty('--storeLocatorSize', `0px`);\r\n }\r\n\r\n const _topBarSize = () => {\r\n const mobileTopBarSize =\r\n (MsDyn365.msdyn365Commerce.isBrowser &&\r\n document\r\n .getElementsByClassName('ms-header__topbar')\r\n .item(0)\r\n ?.getBoundingClientRect().bottom) ||\r\n 0;\r\n {\r\n mobileTopBarSize > 0 && setTopBarVisibleHeight(mobileTopBarSize);\r\n }\r\n };\r\n\r\n const _storeLocatorSize = () => {\r\n const storeLocatorSize =\r\n (MsDyn365.msdyn365Commerce.isBrowser &&\r\n document\r\n .getElementsByClassName('ms-header__preferred-store-container')\r\n .item(0)\r\n ?.getBoundingClientRect().bottom) ||\r\n 0;\r\n {\r\n storeLocatorSize > 0 && setVisibleHeight(storeLocatorSize);\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n _topBarSize();\r\n _storeLocatorSize();\r\n MsDyn365.msdyn365Commerce.isBrowser &&\r\n window.addEventListener('scroll', () => {\r\n _mainMenuScroll(scrollValue, isPageScroll, setIsPageScroll, isOpen);\r\n _topBarSize();\r\n _storeLocatorSize();\r\n });\r\n return () => {\r\n MsDyn365.msdyn365Commerce.isBrowser &&\r\n window.removeEventListener('scroll', () => {\r\n _mainMenuScroll(scrollValue, isPageScroll, setIsPageScroll, isOpen);\r\n _topBarSize();\r\n _storeLocatorSize();\r\n });\r\n };\r\n });\r\n\r\n React.useEffect(() => {\r\n if (props.data.navMenuState.result) {\r\n props.context.actionContext.update(new NavMenuStateInput(), { isMobileMenuCollapsed: props.mobileMenuCollapsed });\r\n }\r\n }, [props.mobileMenuCollapsed]);\r\n };\r\n\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n stickyNavigation();\r\n }\r\n\r\n const toggleModal = () => {\r\n setIsOpen(prevState => !prevState);\r\n MsDyn365.msdyn365Commerce.isBrowser && document.body.classList.toggle('header-fixed');\r\n };\r\n\r\n {\r\n /* VSI-Customization - End */\r\n }\r\n\r\n {\r\n /** VSI Customization - Start - 04/02/2021 */\r\n }\r\n {\r\n /** Checkout page header customization */\r\n }\r\n if (props.config.headerType && props.config.headerType === 'checkout') {\r\n const phoneNumber = props.config.phoneNumberCheckoutPage ? `tel:+${props.config.phoneNumberCheckoutPage}` : '';\r\n return (\r\n // @ts-ignore\r\n \r\n \r\n \r\n {props.logo}\r\n {props.config.phoneNumberCheckoutPage ?\r\n {props.config.phoneNumberCheckoutPage}\r\n : ''\r\n }\r\n {mfrmCartIcon}\r\n \r\n \r\n \r\n );\r\n }\r\n {\r\n /** VSI Customization - End - 04/02/2021 */\r\n }\r\n // tslint:disable-next-line: cyclomatic-complexity\r\n return (\r\n // @ts-ignore\r\n \r\n \r\n \r\n \r\n {/* VSI-Customization - Start - Added MFRM Notifications slot */}\r\n {mfrmNotfications}\r\n {/* VSI-Customization - End */}\r\n {/* VSI-Customization - Start - Utility secondary logo and utility links */}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n {desktopUtilityLinks &&\r\n desktopUtilityLinks.length > 0 &&\r\n desktopUtilityLinks.map((link: IUtilityLinksData, index: number) => (\r\n {\r\n const isChat = link.ariaLabel === 'Chat' ? true : false;\r\n\r\n if (isChat) {\r\n event.preventDefault();\r\n // tslint:disable: no-function-expression\r\n // tslint:disable: typedef\r\n setTimeout(function () {\r\n // eslint-disable-next-line no-eval\r\n eval(\r\n `var elems = document.querySelectorAll('.uiButton.helpButtonEnabled, .minimizedContainer.helpButton'); if(elems != undefined && elems.length > 0) { if(elems.length > 1){elems[1].click()} else {elems[0].click()}}`\r\n );\r\n // eslint-disable-next-line no-eval\r\n // eval(\r\n // `document.querySelectorAll('.embeddedServiceHelpButton')[0].classList.add('show-chat');`\r\n // );\r\n }, 1000);\r\n // @ts-ignore\r\n if (utag) {\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: 'chat-widget-initiated',\r\n event_type: 'chat_click',\r\n event_category: 'chat',\r\n event_action: 'click',\r\n event_label: 'chat engagement'\r\n });\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n if (utag) {\r\n event.preventDefault();\r\n const isExternal = isExternalLink(link.linkUrl.destinationUrl);\r\n const isPhoneNum = link.linkUrl.destinationUrl.startsWith('tel') ? true : false;\r\n let eventName = isExternal ? 'outbound-general-link-click' : 'internal-navigation';\r\n let eventCategory = isExternal ? 'outbound links' : 'internal links';\r\n let eventAction = '';\r\n let eventLabel = `from header: ${MsDyn365.msdyn365Commerce.isBrowser &&\r\n window.location.href}`;\r\n let eventType = '';\r\n\r\n if (isPhoneNum) {\r\n eventName = 'call-engagement';\r\n eventCategory = 'call';\r\n eventAction = 'header click';\r\n eventLabel = 'call engagement';\r\n eventType = 'call_engagement';\r\n } else if (isChat) {\r\n eventName = 'chat-widget-initiated';\r\n eventType = 'chat_click';\r\n eventCategory = 'chat';\r\n eventAction = 'click';\r\n eventLabel = 'chat engagement';\r\n } else {\r\n eventAction = `to: ${link.linkUrl.destinationUrl}`;\r\n }\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: eventName,\r\n event_type: eventType,\r\n event_category: eventCategory,\r\n event_action: eventAction,\r\n event_label: eventLabel,\r\n event_noninteraction: 'false'\r\n });\r\n if (MsDyn365.msdyn365Commerce.isBrowser && !isChat === true) {\r\n const isOpenInNewTab = link.openInNewTab;\r\n !isOpenInNewTab\r\n ? (window.location.href = link.linkUrl.destinationUrl)\r\n : window.open(link.linkUrl.destinationUrl);\r\n }\r\n }\r\n }}\r\n >\r\n {link.linkText}\r\n \r\n ))}\r\n
\r\n
\r\n {tabUtilityLinks &&\r\n tabUtilityLinks.length > 0 &&\r\n tabUtilityLinks.map((link: IUtilityLinksData, index: number) => (\r\n {\r\n const isChat = link.ariaLabel === 'Chat' ? true : false;\r\n const isPhoneNum = link.linkUrl.destinationUrl.startsWith('tel') ? true : false;\r\n const isExternal = isExternalLink(link.linkUrl.destinationUrl);\r\n let eventName = isExternal ? 'outbound-general-link-click' : 'internal-navigation';\r\n let eventCategory = isExternal ? 'outbound links' : 'internal links';\r\n let eventAction = `to: ${link.linkUrl.destinationUrl}`;\r\n let eventLabel = `from header: ${MsDyn365.msdyn365Commerce.isBrowser && window.location.href}`;\r\n let eventType = '';\r\n\r\n if (isChat) {\r\n event.preventDefault();\r\n // tslint:disable: no-function-expression\r\n // tslint:disable: typedef\r\n setTimeout(function () {\r\n // eslint-disable-next-line no-eval\r\n eval(\r\n `var elems = document.querySelectorAll('.uiButton.helpButtonEnabled, .minimizedContainer.helpButton, .sidebarHeader.minimizedContainer'); if(elems != undefined && elems.length > 0) { if(elems.length > 1){elems[1].click()} else {elems[0].click()}}`\r\n );\r\n }, 1000);\r\n } else if (isPhoneNum) {\r\n eventName = 'call-engagement';\r\n eventCategory = 'call';\r\n eventAction = 'header click';\r\n eventLabel = 'call engagement';\r\n eventType = 'call_engagement';\r\n }\r\n // @ts-ignore\r\n if (utag) {\r\n event.preventDefault();\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: eventName,\r\n event_type: eventType,\r\n event_category: eventCategory,\r\n event_action: eventAction,\r\n event_label: eventLabel,\r\n event_noninteraction: 'false'\r\n });\r\n if (MsDyn365.msdyn365Commerce.isBrowser && !isChat === true) {\r\n const isOpenInNewTab = link.openInNewTab;\r\n !isOpenInNewTab\r\n ? (window.location.href = link.linkUrl.destinationUrl)\r\n : window.open(link.linkUrl.destinationUrl);\r\n }\r\n }\r\n }}\r\n >\r\n {link.linkText}\r\n \r\n ))}\r\n
\r\n
\r\n
\r\n {/* VSI-Customization - End - Utility secondary logo and utility links */}\r\n
\r\n
\r\n
\r\n {props.navIcon}\r\n {
{_renderReactFragment(mfrmMenuBar)}
}\r\n {_renderReactFragment(mfrmSearch)}\r\n
\r\n {!isMobile && (\r\n \r\n \r\n \r\n )}\r\n {mfrmCartIcon}\r\n
\r\n \r\n \r\n \r\n
{_renderDesktopAccountBlock(props)}
\r\n
\r\n \r\n
\r\n {/* Mobile Container starts here */}\r\n \r\n \r\n \r\n {props.data.accountInformation && props.data.accountInformation.result && (\r\n

{props.resources.accountHeading}

\r\n )}\r\n {props.accountLinks &&\r\n props.accountLinks[0] &&\r\n props.accountLinks.filter((link, index) => index === 0)[0]}\r\n {_signInButton(customer, props.context.request.user, props)}\r\n {props.signOutLink}\r\n {!props.accountLinks && _signUpButton(customer, props.context.request.user, props)}\r\n {/* Todo: Placeholder Create account Link - END */}\r\n
\r\n {_renderReactFragment(mfrmMenuBar)}\r\n \r\n {hamburgerUtilityLinks &&\r\n hamburgerUtilityLinks.length > 0 &&\r\n hamburgerUtilityLinks.map((link: IUtilityLinksData, index: number) => {\r\n const navUrl = navLinkKeywordRemoval(\r\n (link.linkUrl && link.linkUrl.destinationUrl) || '',\r\n props.context.request\r\n );\r\n return (\r\n
  • \r\n {\r\n const isChat = link.ariaLabel === 'Chat' ? true : false;\r\n\r\n if (isChat) {\r\n event.preventDefault();\r\n // tslint:disable: no-function-expression\r\n // tslint:disable: typedef\r\n setTimeout(function () {\r\n // eslint-disable-next-line no-eval\r\n eval(\r\n `var elems = document.querySelectorAll('.uiButton.helpButtonEnabled, .minimizedContainer.helpButton, .sidebarHeader.minimizedContainer'); if(elems != undefined && elems.length > 0) { if(elems.length > 1){elems[1].click()} else {elems[0].click()}}`\r\n );\r\n }, 1000);\r\n }\r\n\r\n // @ts-ignore\r\n if (utag) {\r\n event.preventDefault();\r\n const isExternal = isExternalLink(link.linkUrl.destinationUrl);\r\n const isPhoneNum = link.linkUrl.destinationUrl.startsWith('tel')\r\n ? true\r\n : false;\r\n let eventName = isExternal\r\n ? 'outbound-general-link-click'\r\n : 'internal-navigation';\r\n let eventCategory = isExternal ? 'outbound links' : 'internal links';\r\n let eventAction = `to: ${navUrl}`;\r\n let eventLabel = `from header: ${MsDyn365.msdyn365Commerce.isBrowser &&\r\n window.location.href}`;\r\n let eventType = '';\r\n\r\n if (isPhoneNum) {\r\n eventName = 'call-engagement';\r\n eventCategory = 'call';\r\n eventAction = 'header click';\r\n eventLabel = 'call engagement';\r\n eventType = 'call_engagement';\r\n }\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes max-line-length\r\n utag.link({\r\n event: eventName,\r\n event_type: eventType,\r\n event_category: eventCategory,\r\n event_action: eventAction,\r\n event_label: eventLabel,\r\n event_noninteraction: 'false'\r\n });\r\n if (MsDyn365.msdyn365Commerce.isBrowser && !isChat === true) {\r\n const isOpenInNewTab = link.openInNewTab;\r\n !isOpenInNewTab ? (window.location.href = navUrl) : window.open(navUrl);\r\n }\r\n }\r\n }}\r\n >\r\n {link.linkText}\r\n \r\n
  • \r\n );\r\n })}\r\n \r\n \r\n {hamburgerTabUtilityLinks &&\r\n hamburgerTabUtilityLinks.length > 0 &&\r\n hamburgerTabUtilityLinks.map((link: IUtilityLinksData, index: number) => {\r\n const navUrl = navLinkKeywordRemoval(\r\n (link.linkUrl && link.linkUrl.destinationUrl) || '',\r\n props.context.request\r\n );\r\n return (\r\n
  • \r\n {\r\n const isChat = link.ariaLabel === 'Chat' ? true : false;\r\n const isExternal = isExternalLink(link.linkUrl.destinationUrl);\r\n const isPhoneNum = link.linkUrl.destinationUrl.startsWith('tel') ? true : false;\r\n let eventName = isExternal\r\n ? 'outbound-general-link-click'\r\n : 'internal-navigation';\r\n let eventCategory = isExternal ? 'outbound links' : 'internal links';\r\n let eventAction = `to: ${navUrl}`;\r\n let eventLabel = `from header: ${MsDyn365.msdyn365Commerce.isBrowser &&\r\n window.location.href}`;\r\n let eventType = '';\r\n\r\n if (isChat) {\r\n event.preventDefault();\r\n // tslint:disable: no-function-expression\r\n // tslint:disable: typedef\r\n setTimeout(function () {\r\n // eslint-disable-next-line no-eval\r\n eval(\r\n `var elems = document.querySelectorAll('.uiButton.helpButtonEnabled, .minimizedContainer.helpButton, .sidebarHeader.minimizedContainer'); if(elems != undefined && elems.length > 0) { if(elems.length > 1){elems[1].click()} else {elems[0].click()}}`\r\n );\r\n }, 1000);\r\n } else if (isPhoneNum) {\r\n eventName = 'call-engagement';\r\n eventCategory = 'call';\r\n eventAction = 'header click';\r\n eventLabel = 'call engagement';\r\n eventType = 'call_engagement';\r\n }\r\n // @ts-ignore\r\n if (utag) {\r\n event.preventDefault();\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes max-line-length\r\n utag.link({\r\n event: eventName,\r\n event_type: eventType,\r\n event_category: eventCategory,\r\n event_action: eventAction,\r\n event_label: eventLabel,\r\n event_noninteraction: 'false'\r\n });\r\n if (MsDyn365.msdyn365Commerce.isBrowser && !isChat === true) {\r\n const isOpenInNewTab = link.openInNewTab;\r\n !isOpenInNewTab ? (window.location.href = navUrl) : window.open(navUrl);\r\n }\r\n }\r\n }}\r\n >\r\n {link.linkText}\r\n \r\n
  • \r\n );\r\n })}\r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n {/* VSI-Customization - End - Primary Navigation */}\r\n \r\n
    \r\n
    \r\n {isMobile ? null : storeSelector}\r\n
    \r\n
    \r\n {secondaryNavItems &&\r\n secondaryNavItems.length > 0 &&\r\n secondaryNavItems.slice(0, secondaryNavLimit).map((link: ISecondaryNavItemsData, index: number) => {\r\n const navUrl = navLinkKeywordRemoval(\r\n (link.linkUrl && link.linkUrl.destinationUrl) || '',\r\n props.context.request\r\n );\r\n return (\r\n {\r\n // @ts-ignore\r\n if (utag) {\r\n event.preventDefault();\r\n const isExternal = isExternalLink(link.linkUrl.destinationUrl);\r\n const eventName = isExternal ? 'outbound-general-link-click' : 'internal-navigation';\r\n const eventCategory = isExternal ? 'outbound links' : 'internal links';\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: eventName,\r\n event_category: eventCategory,\r\n event_action: `to: ${navUrl}`,\r\n event_label: `from header: ${MsDyn365.msdyn365Commerce.isBrowser &&\r\n window.location.href}`,\r\n event_noninteraction: 'false'\r\n });\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n const isOpenInNewTab = link.openInNewTab;\r\n !isOpenInNewTab ? (window.location.href = navUrl) : window.open(navUrl);\r\n }\r\n }\r\n }}\r\n >\r\n {link.linkText}\r\n \r\n );\r\n })}\r\n
    \r\n
    \r\n {/* VSI-Customization - End - Secondary Navigation */}\r\n \r\n \r\n );\r\n };\r\n\r\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps & IHeaderProps): JSX.Element | null {\r\n const { AccountInfoDropdownParentContainer, signOutLink, accountLinks } = props;\r\n const customer = props.data.accountInformation?.result;\r\n const signInLink = _signInButton(customer, props.context.request.user, props);\r\n const signUpLink = _signUpButton(customer, props.context.request.user, props);\r\n if (AccountInfoDropdownParentContainer) {\r\n if (customer) {\r\n return (\r\n \r\n {signOutLink}\r\n {accountLinks ? accountLinks.map(link => link) : false}\r\n \r\n );\r\n } else if (signInLink) {\r\n return (\r\n \r\n {signInLink}\r\n {signUpLink}\r\n {/* Todo: create a method to render sign up link and add here*/}\r\n \r\n );\r\n }\r\n }\r\n props.context.telemetry.warning('Header content is empty, module wont render.');\r\n return null;\r\n}\r\n\r\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\r\n return (\r\n \r\n {items && items.length\r\n ? items.map((slot: React.ReactNode, index: number) => {\r\n return {slot};\r\n })\r\n : null}\r\n \r\n );\r\n}\r\n\r\n// VSI CUSTOMIZATION - starts here\r\nfunction _mainMenuScroll(\r\n pageScrollValue: number,\r\n isPageScroll: boolean,\r\n setIsPageScroll: React.Dispatch>,\r\n isOpen: boolean\r\n): void {\r\n if (\r\n MsDyn365.msdyn365Commerce.isBrowser &&\r\n (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop) >= pageScrollValue\r\n ) {\r\n if (isPageScroll !== true) {\r\n setIsPageScroll(true);\r\n }\r\n } else {\r\n if (isOpen === false) {\r\n setIsPageScroll(false);\r\n } else if (isOpen === true) {\r\n setIsPageScroll(true);\r\n }\r\n }\r\n}\r\n\r\nfunction _signUpButton(\r\n customer: Customer | undefined,\r\n user: MsDyn365.IRequestContextUser | undefined,\r\n props: IHeaderViewProps & IHeaderProps\r\n): React.ReactNode | undefined {\r\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n const payLoad = getPayloadObject('click', telemetryContent, TelemetryConstant.SignUp);\r\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\r\n const signupUrl = modifiedAuthUrl(user?.signUpUrl);\r\n return (\r\n !customer && (\r\n \r\n \r\n {props.resources.signUpLinkText}\r\n \r\n \r\n )\r\n );\r\n}\r\nfunction _signInButton(\r\n customer: Customer | undefined,\r\n user: MsDyn365.IRequestContextUser | undefined,\r\n props: IHeaderViewProps & IHeaderProps\r\n): React.ReactNode | undefined {\r\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n const payLoad = getPayloadObject('click', telemetryContent, TelemetryConstant.SignIn);\r\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\r\n const signinUrl = modifiedAuthUrl(user?.signInUrl);\r\n\r\n return !customer && (\r\n \r\n \r\n {props.resources.signInLinkText}\r\n \r\n \r\n );\r\n}\r\n\r\nconst modifiedAuthUrl = (url: string | undefined): string | undefined => {\r\n const urlParts = url?.split('\\/');\r\n urlParts?.splice(3, 1);\r\n const newUrl = urlParts?.join('\\/');\r\n return newUrl;\r\n\r\n};\r\n\r\n// Method for getting and updating viewport\r\nconst updateViewPort = (\r\n context: MsDyn365.ICoreContext,\r\n setIsOpen: React.Dispatch>,\r\n setIsMobile: React.Dispatch>,\r\n setIsTablet: React.Dispatch>\r\n): void => {\r\n const viewport = _getViewPort(context);\r\n\r\n if (viewport === 'xs' || viewport === 'sm') {\r\n setIsMobile(true);\r\n setIsTablet(false);\r\n setIsOpen(false);\r\n } else if (viewport === 'md' || viewport === 'lg') {\r\n setIsMobile(false);\r\n setIsTablet(true);\r\n } else {\r\n setIsMobile(false);\r\n setIsTablet(false);\r\n }\r\n};\r\n// VSI CUSTOMIZATION - ends here\r\n\r\nexport default headerView;\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['header'] = {\n c: () => require('@msdyn365-commerce-modules/header/dist/lib/modules/header/header'),\n $type: 'containerModule',\n da: [{name:'accountInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action', runOn: 1},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'header',\n p: 'header',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/header/dist/lib/modules/header'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|mattressfirm|views|header'] = {\n c: () => require('partner/themes/mattressfirm/views/header.view.tsx'),\n cn: '__local__-__local__-header'\n };\nviewDictionary['@msdyn365-commerce-modules|header|modules|header|header'] = {\n c: () => require('@msdyn365-commerce-modules/header/dist/lib/modules/header/header.view.js'),\n cn: '@msdyn365-commerce-modules-header-header'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport { IListMapViewState, ILoadMapApiInput, IStoreInfo, IStoreSelectionStateContext, IStoreSelectorLocation, IStoreSelectorStateManager } from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(storeId?: string, storeName?: string | undefined, writeToCookie: boolean = false, latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (!searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl = actionContext.requestContext.app && actionContext.requestContext.app.config && actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT}/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise((resolve) => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${input.market ? `&setMkt=${input.market}` : ''}`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\n });\n }\n\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderProps } from '../header.props.autogenerated';\n\n/**\n * The header preferred store component.\n */\n@observer\nexport class HeaderPreferredStore extends React.PureComponent> {\n private readonly modalCloseButtonRef: React.RefObject = React.createRef();\n\n /**\n * Handle click on the store selector.\n * @returns : Promise void.\n */\n public handleClick = () => {\n return this._findPreferredStoreOnClick(this.props);\n };\n\n public render(): JSX.Element | undefined {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n slots,\n resources\n } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- slots can be undefined.\n if (ArrayExtensions.hasElements(slots?.storeSelector)) {\n const storeName = storeSelectorStateManager?.preferredStore &&\n storeSelectorStateManager.preferredStore.StoreName ? storeSelectorStateManager.preferredStore.StoreName : resources.headerPreferredStoreText;\n\n return (\n
    \n \n \n {storeName}\n \n \n {slots.storeSelector}\n
    \n );\n }\n\n return undefined;\n }\n\n private async _findPreferredStoreOnClick(props: IHeaderProps): Promise {\n const { data: { storeSelectorStateManager: { result: storeSelectorStateManager } }, modules } = props;\n if (!storeSelectorStateManager) {\n return;\n }\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && ArrayExtensions.hasElements(modules.storeSelector)) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n await storeSelectorStateManager.openDialog({\n id: storeSelectorId,\n showMapViewLink: true,\n parentElementRef: this.modalCloseButtonRef,\n onLocationSelected: orgUnitLocation => {\n return Promise.resolve();\n }\n }).catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to set preferred store');\n }\n });\n }\n}\n\nexport default HeaderPreferredStore;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ILogoProps {\n image: Msdyn365.IImageData;\n gridSettings?: Msdyn365.IGridSettings;\n link?: ILinkData;\n className?: string;\n telemetryContent?: ITelemetryContent;\n requestContext: Msdyn365.IRequestContext;\n typeName?: string;\n}\n\nexport interface ILinkData {\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n linkText?: string;\n}\n\n/**\n *\n * Logo component.\n * @extends {React.PureComponent}\n */\nexport class Logo extends React.PureComponent {\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: ILogoProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return (\n
    \n {this._renderLogo(this.props)}\n
    \n );\n }\n\n private _renderLogo(config: ILogoProps): JSX.Element {\n if (config.link && config.link.linkUrl.destinationUrl) {\n return (\n \n {this._renderImage(config)}\n \n );\n }\n return (\n this._renderImage(config)\n );\n }\n\n private _renderImage(config: ILogoProps): JSX.Element {\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=132&h=28&m=6', w: 0, h: 0 },\n lg: { q: 'w=160&h=48&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n}\n\nexport default Logo;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderResources } from '../header.props.autogenerated';\n\nexport interface INavIconProps {\n resources: IHeaderResources;\n isExpanded: boolean;\n targetId: string;\n telemetryContent?: ITelemetryContent;\n toggleNavBar(): void;\n}\n\n/**\n *\n * NavIcon component.\n * @extends {React.PureComponent}\n */\n\n@observer\nexport class NavIcon extends React.PureComponent {\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: INavIconProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return (\n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button, getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes, Modal,\n ModalBody, ModalHeader, onTelemetryClick, Popover, TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\nimport { IHeaderData } from './header.data';\nimport { IHeaderProps, IHeaderResources, IMyAccountLinksData } from './header.props.autogenerated';\n\nexport interface IHeaderState {\n mobileMenuCollapsed: boolean;\n signinPopoverOpen: boolean;\n hasSigninerror?: boolean;\n}\n\nexport interface IHeaderViewProps extends IHeaderProps, IHeaderState {\n logo: React.ReactNode;\n wishListIconDesktop: React.ReactNode;\n wishListIconMobile: React.ReactNode;\n cartIcon: React.ReactNode;\n navIcon: React.ReactNode;\n className: string;\n menuBar: React.ReactNode[];\n search: React.ReactNode[];\n siteOptions: React.ReactNode[];\n HeaderTag: IModuleProps;\n HeaderContainer: INodeProps;\n MobileMenuContainer: INodeProps;\n MobileMenuHeader: React.ReactNode;\n MobileMenuBodyContainer: INodeProps;\n MobileMenuLinksContainer: INodeProps;\n HeaderTopBarContainer: INodeProps;\n Divider: INodeProps;\n\n AccountInfoDropdownParentContainer?: INodeProps;\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\n accountInfoDropdownButton?: React.ReactNode;\n\n signOutLink?: React.ReactNode;\n signInLink?: React.ReactNode;\n accountLinks?: React.ReactNode[];\n preferredStore?: React.ReactNode;\n}\n\n/**\n *\n * Header component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Header extends React.PureComponent, IHeaderState> {\n private readonly popOverRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private cart: ICartState | undefined;\n\n @computed public get displayName(): Readonly {\n const customer = this.props.data.accountInformation?.result;\n return customer ? customer.FirstName || customer.Name : undefined;\n }\n\n public constructor(props: IHeaderProps) {\n super(props);\n this.popOverRef = React.createRef();\n this._toggleNavbar = this._toggleNavbar.bind(this);\n this._togglePopover = this._togglePopover.bind(this);\n this._keydown = this._keydown.bind(this);\n this.state = {\n mobileMenuCollapsed: true,\n signinPopoverOpen: false,\n hasSigninerror: false\n };\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => this.props.data.cart.result,\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: {\n user\n }\n },\n resources: {\n signUpCustomerNotFoundTitle,\n signUpMultipleCustomerFoundTitle,\n closeNotificationLabel\n }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(user, signUpMultipleCustomerFoundTitle, signUpCustomerNotFoundTitle);\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\n // For signup show simple error notification.\n NotificationsManager.instance().addNotification(new ErrorNotification(\n signinNotificationError, closeNotificationLabel));\n }\n\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('keydown', this._keydown, false);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n data: { accountInformation,\n wishlists\n },\n context: {\n request: {\n user\n }\n },\n context,\n resources: {\n cartLabel,\n cartQtyLabel\n }\n } = this.props;\n const { logoLink, logoImage, shouldShowWishlistCount } = this.props.config;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- app config is generic\n const disableTooltip = this.props.context.app.config.disableTooltip || false;\n const headerToggleClass = this.state.mobileMenuCollapsed ? '' : 'ms-header-open';\n const headerClassName = classnames('ms-header', this.props.config.className, headerToggleClass);\n const navbarKey = 'header-nav-mobile';\n const customer = accountInformation && accountInformation.result;\n const cartIconSlot = this._getSlot('cartIcon');\n const menuBarSlot = this._getSlot('menuBar');\n const searchSlot = this._getSlot('search');\n let wishlistCount = 0;\n const siteOptionsSlot = this._getSlot('siteOptions');\n const preferredStoreSlot = this._getSlot('storeSelector');\n if (wishlists !== undefined) {\n if (!wishlists.result || !ArrayExtensions.hasElements(wishlists.result) ||\n !wishlists.result[0].CommerceListLines || !ArrayExtensions.hasElements(wishlists.result[0].CommerceListLines)) {\n wishlistCount = 0;\n } else {\n wishlistCount = wishlists.result[0].CommerceListLines.length;\n }\n }\n const viewProps: IHeaderViewProps = {\n ...(this.props as IHeaderProps),\n ...(this.state),\n logo: ,\n wishListIconDesktop: (\n \n ),\n wishListIconMobile: (\n \n ),\n cartIcon: (ArrayExtensions.hasElements(cartIconSlot)) ? cartIconSlot[0] : ,\n navIcon: ,\n menuBar: ArrayExtensions.hasElements(menuBarSlot) ? menuBarSlot : [],\n search: ArrayExtensions.hasElements(searchSlot) ? searchSlot : [],\n siteOptions: ArrayExtensions.hasElements(siteOptionsSlot) ? siteOptionsSlot : [],\n className: headerClassName,\n HeaderTag: {\n moduleProps: this.props,\n className: classnames(headerClassName),\n tag: 'header'\n },\n HeaderContainer: {\n className: classnames('ms-header__container')\n },\n HeaderTopBarContainer: {\n className: classnames('ms-header__topbar')\n },\n Divider: {\n className: classnames('ms-header__divider')\n },\n MobileMenuContainer: {\n tag: Modal,\n id: navbarKey,\n className: 'ms-header__mobile-hamburger',\n isOpen: !this.state.mobileMenuCollapsed,\n wrapClassName: 'ms-header__modal',\n toggle: this._toggleNavbar\n },\n MobileMenuHeader: (\n \n ),\n MobileMenuBodyContainer: {\n tag: ModalBody,\n className: 'ms-header__mobile-hamburger-menu-body'\n },\n MobileMenuLinksContainer: {\n className: 'ms-header__mobile-hamburger-menu-links'\n },\n AccountInfoDropdownParentContainer: {\n className: 'ms-header__account-info'\n },\n AccountInfoDropdownPopoverConentContainer: customer && this.displayName ? {\n tag: Popover,\n id: 'myprofilePopover',\n className: 'ms-header__account-info-content',\n placement: 'bottom',\n isOpen: this.state.signinPopoverOpen,\n target: this.popOverRef,\n toggle: this._togglePopover\n } : undefined,\n signInLink: this._getSigninButton(customer, user, this.props.resources),\n signOutLink: this._getSignOutButton(customer, user, this.props.resources),\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(customer),\n accountLinks: this._getAccountLinks(customer),\n preferredStore: ArrayExtensions.hasElements(preferredStoreSlot) &&\n ()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - Link Index.\n * @returns : Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.myAccountLinks?.[linkIndex]) {\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Get the slot.\n * @param slotName - Name of the slot.\n * @returns The slot.\n */\n private _getSlot(slotName: string): React.ReactNode[] | null {\n const { slots } = this.props;\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\n }\n\n /**\n * Renders the sign in button.\n * @param customer - Customer object.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSigninButton(customer: Customer | undefined, user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources):\n React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return !customer && (\n \n \n {resources.signInLinkText}\n \n \n );\n }\n\n /**\n * Renders the sign out button.\n * @param customer - Customer object.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSignOutButton(customer: Customer | undefined, user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources):\n React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return customer && this.displayName && (\n \n \n {resources.signOutLinkText}\n \n \n );\n }\n\n private _getSigninNotification(user: MsDyn365.IRequestContextUser | undefined,\n signUpMultipleCustomerFoundTitle: string, signUpCustomerNotFoundTitle: string): string | undefined {\n const { signUpCustomerNotFound, signUpMultipleCustomerFound } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n\n if (user?.retailServerErrorCode === notFoundError) {\n return signUpCustomerNotFound !== undefined ? signUpCustomerNotFound : signUpCustomerNotFoundTitle;\n } else if (user?.retailServerErrorCode === multipleAccountError) {\n return signUpMultipleCustomerFound !== undefined ? signUpMultipleCustomerFound : signUpMultipleCustomerFoundTitle;\n }\n return undefined;\n }\n\n private _getAccountInfoDropdownButton(customer: Customer | undefined): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return customer && this.displayName && (\n \n \n {this.displayName}\n \n \n );\n }\n\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\n const { myAccountLinks } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n if (!customer || !this.displayName || !myAccountLinks || !ArrayExtensions.hasElements(myAccountLinks)) {\n return undefined;\n }\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\n payLoad.contentAction.etext = cta.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: cta.ariaLabel,\n className: 'ms-signin-info__account-link-button',\n linkText: cta.linkText,\n linkUrl: cta.linkUrl.destinationUrl,\n openInNewTab: cta.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n\n return (\n \n );\n });\n }\n\n private _toggleNavbar(): void {\n this.setState({\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\n });\n }\n\n private _togglePopover(): void {\n this.setState({\n signinPopoverOpen: !this.state.signinPopoverOpen\n });\n }\n\n private _keydown(event: KeyboardEvent): void {\n if (event.keyCode === KeyCodes.Escape) {\n this.setState({ mobileMenuCollapsed: true });\n }\n }\n}\n\nexport default Header;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHeaderViewProps } from './header';\n\nconst headerView: React.FC = props => {\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n MobileMenuContainer,\n MobileMenuBodyContainer,\n MobileMenuLinksContainer,\n Divider\n } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {_renderDesktopAccountBlock(props)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n \n \n { props.MobileMenuHeader }\n {_renderReactFragment(props.menuBar)}\n \n { props.accountLinks ? props.accountLinks.map(link => link) : false }\n { props.siteOptions }\n { props.wishListIconMobile }\n { props.signInLink }\n { props.signOutLink }\n \n \n \n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n { accountLinks ? accountLinks.map(link => link) : false }\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return (\n \n {signInLink}\n \n );\n }\n }\n props.context.telemetry.error('Header content is empty, module wont render.');\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0 ? items.map((slot: React.ReactNode, index: number) => {\n return (\n {slot}\n );\n }) : null}\n \n );\n}\n\nexport default headerView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["context","MsDyn365","window","innerWidth","gridSettings","request","xs","w","sm","md","lg","isExternalLink","url","tmp","document","createElement","href","host","location","canonicalURL","requestContext","requestUrl","origin","path","pathname","toLowerCase","urlParts","split","splice","match","removePipeSignValue","removeKeywords","filteredPath","join","filteredURL","undefined","length","filter","urlPart","indexOf","removeKeywordFromUrl","app","config","removeKeywordFromUrlArray","trim","forEach","_part","removeKeyword","trimmedKeyword","indexOfValue","getSortedVirtualRefinerConfig","isMattressesCategory","appConfigSorted","getVirtualRefinerConfig","appConfig","enableForMattresses","enableForOtherCategories","sort","a","b","order","getVirtualRefinerNames","sortedVirtualRefinerConfig","appConfigRefinerNames","sortedConfig","push","refinerName","urlModifications","async","getVirtualRefinerValues","virtualRefiners","virtualRefinerValues","categoryIdToken","urlTokens","recordId","finalizedUrlParts","plainUrlPart","decodeURIComponent","part","filteredPart","mainRefiner","Values","refinerValue","refinerValueKeyName","LeftValueBoundString","replace","regExSpecialChars","canonicalUrlspecialCharIncludeList","navLinkKeywordRemoval","link","linkBase","linkParams","endsWith","linkParam","map","param","filteredLink","includeConfigList","includeConfig","pattern","RegExp","NavMenuStateInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","navMenuStateAction","input","ctx","isMenuHasParent","isMobileMenuCollapsed","selectedNavMenu","menuItemData","createObservableDataAction","action","inputData","HeaderPreferredStore","React","handleClick","body","classList","add","pageURL","utag","event","event_category","event_action","event_label","event_noninteraction","this","_findPreferreStoreOnClick","props","handleClose","data","storeSelectorStateManager","result","remove","closeDialog","render","slots","resources","isModalOpen","storeSelectorState","mfrmStoreSelector","mfrmPrefferedStore","localStorage","getItem","JSON","parse","sociPrefferedStore","removeItem","storeCity","preferredStore","StoreId","OrgUnitNumber","City","mfrmStoreCity","sociStoreCity","enableSociLocations","city","className","color","headerPreferredStoreAriaLabel","onClick","Text","tag","text","headerPreferredStoreText","modules","storeSelectorId","Object","keys","id","openDialog","showMapViewLink","onLocationSelected","orgUnitLocation","Promise","resolve","catch","error","telemetry","message","debug","observer","Logo","super","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","attributes","getTelemetryAttributes","preventDefault","isExternal","linkUrl","destinationUrl","eventName","eventCategory","internalDestinationUrl","internalLocalUrl","Msdyn365","eventAction","eventLabel","ariaLabel","openInNewTab","open","_renderLogo","target","_renderImage","image","imageSettings","viewports","q","h","xl","lazyload","disableLazyLoad","loadFailureBehavior","editProps","key","headerView","isPageScroll","setIsPageScroll","isMobile","setIsMobile","isTablet","setIsTablet","isOpen","setIsOpen","updatedHeaderTag","moduleProps","HeaderTag","classnames","mfrmMenuBar","extendedMenuBar","menuBar","mfrmSearch","mfrmSearchSlot","search","storeSelector","mfrmNotfications","mfrmNotifications","mfrmCartIcon","desktopUtilityLinks","utilityLinks","showUnderUtilityDesktop","tabUtilityLinks","showUnderUtilityTab","hamburgerUtilityLinks","showUnderHamburger","hamburgerTabUtilityLinks","hideFromTab","navMenuParentActive","navMenuState","secondaryNavConfig","get","menuItemLimit","menuItemsLimitMobile","menuItemsLimitDesktop","secondaryNavLimit","secondaryNavItems","customer","accountInformation","getTelemetryObject","telemetryPageName","friendlyName","stickyNavigation","InitialTopBarSize","getElementsByClassName","item","getBoundingClientRect","height","visibleHeight","setVisibleHeight","topBarVisibleHeight","setTopBarVisibleHeight","scrollBarWidth","offsetWidth","windowWidth","documentElement","clientWidth","mobileMenuCollapsed","style","setProperty","removeProperty","addThrottledEvent","updateViewPort","InitialHeight","clientHeight","androidBannerViewHeight","setAndroidBannerViewHeight","wrapperElement","querySelector","secondaryElement","bannerElement","getComputedStyle","display","pageYOffset","addEventListener","vh","scrollBarWidthUpdate","windowWidthUpdate","Math","max","_topBarSize","mobileTopBarSize","bottom","_storeLocatorSize","storeLocatorSize","_mainMenuScroll","removeEventListener","actionContext","update","toggleModal","prevState","toggle","headerType","phoneNumber","phoneNumberCheckoutPage","Module","Node","isHeaderSticky","logo","HeaderContainer","title","event_type","HeaderTopBarContainer","logoLink","logoImage","secondaryLogoLink","secondaryLogoImage","index","linkText","isChat","setTimeout","eval","isPhoneNum","startsWith","eventType","isOpenInNewTab","navIcon","_renderReactFragment","role","tabIndex","Modal","autoFocus","fade","horizontalPosition","verticalPosition","zIndex","applicationNode","modalClassName","ModalHeader","ModalBody","_renderDesktopAccountBlock","MobileMenuLinksContainer","accountHeading","accountLinks","_signInButton","user","signOutLink","_signUpButton","navUrl","slice","AccountInfoDropdownParentContainer","signInLink","signUpLink","warning","items","slot","pageScrollValue","scrollTop","signupUrl","modifiedAuthUrl","signUpUrl","Button","signUpLinkText","signUpLinkAriaText","onTelemetryClick","signinUrl","signInUrl","signInLinkText","signInLinkAriaText","viewport","_getViewPort","binding","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","BaseStoreSelectorStateManager","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","value","_readFromToCookie","storeInfo","_context","storeId","selectedStoreLocationId","storeName","writeToCookie","StoreName","Latitude","Longitude","_writeToCookie","stringify","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","setItem","cookieValue","__decorate","computed","observable","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","channel","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","query","encodeURI","geolocationApiUrl","script","setAttribute","resourceSets","point","coordinates","appendChild","StringExtensions","getElementById","lang","market","reject","type","defer","src","mapAPIReady","isMapApiLoaded","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","modalCloseButtonRef","_findPreferredStoreOnClick","ArrayExtensions","ref","parentElementRef","moduleType","typeName","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","isExpanded","targetId","Header","handleLinkTextChange","linkIndex","myAccountLinks","popOverRef","_toggleNavbar","bind","_togglePopover","_keydown","state","signinPopoverOpen","hasSigninerror","FirstName","Name","componentDidMount","reaction","cart","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","addNotification","ErrorNotification","componentWillUnmount","wishlists","cartLabel","cartQtyLabel","shouldShowWishlistCount","disableTooltip","headerToggleClass","headerClassName","navbarKey","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","CommerceListLines","viewProps","wishListIconDesktop","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","wishListIconMobile","cartIcon","CartIconComponent","siteOptions","Divider","MobileMenuContainer","wrapClassName","MobileMenuHeader","MobileMenuBodyContainer","AccountInfoDropdownPopoverConentContainer","displayName","Popover","placement","_getSigninButton","_getSignOutButton","accountInfoDropdownButton","_getAccountInfoDropdownButton","_getAccountLinks","renderView","slotName","signOutLinkText","signOutUrl","signOutLinkAriaText","signUpCustomerNotFound","signUpMultipleCustomerFound","retailServerErrorCode","innerRef","cta","contentAction","etext","editableLink","additionalProperties","onTextChange","setState","keyCode","KeyCodes","module","exports","ReactDOM"],"sourceRoot":""}