{"version":3,"file":"static/js/bdba93fd9ac810f8d9e4.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 [updatePhoneNumber, setUpdatePhoneNumber] = React.useState();\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 setUpdatePhoneNumber(props.config.phoneNumberCheckoutPage);\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 setUpdatePhoneNumber(props.config.phoneNumberCheckoutPage);\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 {updatePhoneNumber}\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 const ifModuleAvailable = (props: IHeaderViewProps) => {\r\n const cartIconModule = props.modules?.mfrmCartIcon;\r\n const searchModule = props.modules?.mfrmSearchSlot;\r\n return (cartIconModule || searchModule) ? '' : 'align-signin-icon';\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","updatePhoneNumber","setUpdatePhoneNumber","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","phoneNumberCheckoutPage","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","Module","Node","isHeaderSticky","logo","ifModuleAvailable","cartIconModule","searchModule","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":""}