{"version":3,"file":"static/js/03b21f72353ed24797ca.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 // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(pattern, 'gi');\r\n } else {\r\n\r\n const pattern = `[^\\\\w\\\\&\\\\|]`;\r\n // eslint-disable-next-line security/detect-non-literal-regexp\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 mobileUtilityCallLink = utilityLinks && utilityLinks.filter(link => link.linkText?.includes('(877)'));\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 if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n document.onreadystatechange = () => {\r\n if (document.readyState === \"complete\") {\r\n if('_st' in window){\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n _st.render();\r\n }\r\n }\r\n };\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 React.useEffect(() => {\r\n MsDyn365.msdyn365Commerce.isBrowser &&\r\n setTimeout(() => {\r\n if('Invoca' in window) {\r\n //@ts-ignore\r\n Invoca.PNAPI.run();\r\n }\r\n }, 1000);\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 /** 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 { !isMobile && !isTablet &&
\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, security/detect-eval-with-expression\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 {MsDyn365.msdyn365Commerce.isBrowser && link.linkText}\r\n \r\n ))}\r\n
}\r\n { isTablet &&
\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, security/detect-eval-with-expression\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 {MsDyn365.msdyn365Commerce.isBrowser && 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, security/detect-eval-with-expression\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, security/detect-eval-with-expression\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","mobileUtilityCallLink","linkText","includes","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","onreadystatechange","readyState","_st","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","setTimeout","Invoca","PNAPI","run","toggleModal","prevState","toggle","headerType","phoneNumber","phoneNumberCheckoutPage","Module","Node","isHeaderSticky","logo","HeaderContainer","title","event_type","HeaderTopBarContainer","logoLink","logoImage","secondaryLogoLink","secondaryLogoImage","index","isChat","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":""}