{"version":3,"file":"static/js/7ffcbe66f856e8f8a40e.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/../../src/get-employee.ts?b8bb","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 id: 'NavMenuState',\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' in window) {\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\nimport { Image } from '@msdyn365-commerce/core';\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 const {\r\n data: {\r\n cart: { result }\r\n }\r\n } = props;\r\n const {headerLogo, phoneIcon, headerCartIcon , newHeaderEnable} = props.config;\r\n const {checkoutHeaderTitle} = props.resources;\r\n return (\r\n // @ts-ignore\r\n \r\n \r\n \r\n {newHeaderEnable ?\r\n
\r\n {/* This section includes the mfrm logo and \"checkout\" title */}\r\n
\r\n {headerLogo && (\r\n \r\n \r\n \r\n )}\r\n
\r\n

{checkoutHeaderTitle}

\r\n
\r\n
\r\n {/* This section includes the phone icon */}\r\n \r\n {phoneIcon && (\r\n <>\r\n {updatePhoneNumber}\r\n
\r\n \r\n
\r\n \r\n )}\r\n
\r\n {props.config.phoneNumberCheckoutPage\r\n ?\r\n \r\n {updatePhoneNumber}\r\n \r\n : ''}\r\n {/* This section includes the cart icon and cart quantity */}\r\n {headerCartIcon && (\r\n \r\n \r\n \r\n {result?.cart.TotalItems && (\r\n
\r\n

{result?.totalItemsInCart}

\r\n
\r\n )}\r\n
\r\n
\r\n )}\r\n
:\r\n <>\r\n {props.logo}\r\n {props.config.phoneNumberCheckoutPage ?\r\n {updatePhoneNumber}\r\n : ''}\r\n {mfrmCartIcon}\r\n \r\n }\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' in window) {\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' in window) {\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' in window) {\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' in window) {\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' in window) {\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' in window) {\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:'employee', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-employee', runOn: 0},{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-employee';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-employee');\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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport {\n IListMapViewState,\n ILoadMapApiInput,\n IStoreInfo,\n IStoreSelectionStateContext,\n IStoreSelectorLocation,\n IStoreSelectorStateManager\n} 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 @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 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(\n storeId?: string,\n storeName?: string | undefined,\n writeToCookie: boolean = false,\n latitude?: number,\n longitude?: number\n ): 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.\n * All rights reserved. See LICENSE 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 (\n !searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled\n ) {\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 =\n actionContext.requestContext.app &&\n actionContext.requestContext.app.config &&\n actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${\n geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT\n }/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 @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 if (window) {\n const currentWindowAPI = window.mapAPIReady;\n window.mapAPIReady = () => {\n if (currentWindowAPI) {\n currentWindowAPI();\n }\n this.isMapApiLoaded = true;\n };\n }\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}` : ''}${\n input.market ? `&setMkt=${input.market}` : ''\n }`;\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 * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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.\n * All rights reserved. See LICENSE 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 =\n storeSelectorStateManager?.preferredStore && storeSelectorStateManager.preferredStore.StoreName\n ? storeSelectorStateManager.preferredStore.StoreName\n : resources.headerPreferredStoreText;\n\n return (\n
    \n \n {storeName}\n \n {slots.storeSelector}\n
    \n );\n }\n\n return undefined;\n }\n\n private async _findPreferredStoreOnClick(props: IHeaderProps): Promise {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n modules\n } = 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\n .openDialog({\n id: storeSelectorId,\n showMapViewLink: true,\n parentElementRef: this.modalCloseButtonRef,\n onLocationSelected: orgUnitLocation => {\n return Promise.resolve();\n }\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.\n * All rights reserved. See LICENSE 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 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
    {this._renderLogo(this.props)}
    ;\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 this._renderImage(config);\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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} 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 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.\n * All rights reserved. See LICENSE 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,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n KeyCodes,\n Modal,\n ModalBody,\n ModalHeader,\n onTelemetryClick,\n Popover,\n 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 { isChannelTypeB2B } from '@msdyn365-commerce/core';\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 switchCustomerLink?: React.ReactNode;\n isOBORequest?: boolean;\n accountLinks?: React.ReactNode[];\n preferredStore?: React.ReactNode;\n currentDistributor?: 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 private isB2BSite: boolean = false;\n\n /**\n * The signed-in user name displayed in the header bar\n */\n @computed public get displayName(): Readonly {\n return (\n (MsDyn365.isOboRequest(this.props.context.request) ? this.workerName : this.customerName) ||\n this.props.context.request?.user?.name\n );\n }\n\n /**\n * OBO scenario. The name of worker who shops on behalf of customer.\n */\n @computed public get workerName(): Readonly {\n const worker = this.props.data.employee?.result;\n return worker?.Name;\n }\n\n @computed public get customerName(): Readonly {\n const customer = this.props.data.accountInformation?.result;\n if (MsDyn365.isOboRequest(this.props.context.request)) {\n // For OBO scenario, display full customer name because multiple customers may have the same first name.\n return customer ? customer.Name : undefined;\n } else {\n return customer ? customer.FirstName || customer.Name : undefined;\n }\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(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isB2BSite = isChannelTypeB2B(this.props.context.request);\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => {\n this.props.data.cart.result;\n },\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: { user }\n },\n resources: {\n signUpCustomerNotFoundTitle,\n signUpMultipleCustomerFoundTitle,\n signInCustomerNotAuthorizedTitle,\n closeNotificationLabel\n }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(\n user,\n signUpMultipleCustomerFoundTitle,\n signUpCustomerNotFoundTitle,\n signInCustomerNotAuthorizedTitle\n );\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\n // For signup show simple error notification.\n NotificationsManager.instance().addNotification(new ErrorNotification(signinNotificationError, closeNotificationLabel));\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, wishlists },\n context: {\n request: { user }\n },\n context,\n resources: { cartLabel, cartQtyLabel }\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 const currentDistributorSlot = this._getSlot('distributorSelector');\n if (wishlists !== undefined) {\n if (\n !wishlists.result ||\n !ArrayExtensions.hasElements(wishlists.result) ||\n !wishlists.result[0].CommerceListLines ||\n !ArrayExtensions.hasElements(wishlists.result[0].CommerceListLines)\n ) {\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 \n ),\n wishListIconDesktop: (\n \n ),\n wishListIconMobile: (\n \n ),\n cartIcon: ArrayExtensions.hasElements(cartIconSlot) ? (\n cartIconSlot[0]\n ) : (\n \n ),\n navIcon: (\n \n ),\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 'aria-label': this.props.resources.headerAriaLabel,\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 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: this.displayName\n ? {\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 }\n : undefined,\n signInLink: this._getSigninButton(user, this.props.resources),\n signOutLink: this._getSignOutButton(user, this.props.resources),\n isOBORequest: MsDyn365.isOboRequest(this.props.context.request),\n switchCustomerLink: this._getSwitchCustomerButton(user, this.props.resources),\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(user, this.props.resources),\n accountLinks: this._getAccountLinks(customer),\n preferredStore: ArrayExtensions.hasElements(preferredStoreSlot) && ,\n currentDistributor: this.isB2BSite && ArrayExtensions.hasElements(currentDistributorSlot) ? currentDistributorSlot : undefined\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 user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSigninButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n !this.displayName && (\n \n \n {resources.signInLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSignOutButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n \n {resources.signOutLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSwitchCustomerButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SwitchCustomer);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const isOBOAccountSelected =\n MsDyn365.isOboRequest(this.props.context.request) && this.props.context.request.cookies.getAccountSelectionCookie();\n return (\n this.displayName &&\n isOBOAccountSelected && (\n this.props.context.request.cookies.removeAccountSelectionCookie()}\n {...attributes}\n >\n
    \n
    {format(resources.shoppingAsText, this.customerName)}
    \n
    {resources.switchCustomerLinkText}
    \n
    \n \n )\n );\n }\n\n private getBusinessPartnerSelectionUrl(): string | undefined {\n const route = MsDyn365.getUrlSync('businessPartnerSelection', this.props.context.actionContext);\n if (!route || !MsDyn365.msdyn365Commerce.isBrowser) {\n return undefined;\n }\n\n // MsDyn365.getUrlSync persists some params in the route and remove other params.\n // Among the persisted params, we need to remove catalogid.\n const persistedParamToRemove = ['catalogid'];\n const url = new URL(route, window.location.href);\n persistedParamToRemove.forEach(param => url.searchParams.delete(param));\n return url.href;\n }\n\n private _getSigninNotification(\n user: MsDyn365.IRequestContextUser | undefined,\n signUpMultipleCustomerFoundTitle: string,\n signUpCustomerNotFoundTitle: string,\n signInCustomerNotAuthorizedTitle: string\n ): string | undefined {\n if (!user?.retailServerErrorCode) {\n return undefined;\n }\n\n const { signUpCustomerNotFound, signUpMultipleCustomerFound, signInCustomerNotAuthorized } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n const accountAuthorizationError = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\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 } else if (user?.retailServerErrorCode === accountAuthorizationError) {\n return signInCustomerNotAuthorized !== undefined ? signInCustomerNotAuthorized : signInCustomerNotAuthorizedTitle;\n }\n return user?.retailServerErrorMessage;\n }\n\n private _getAccountInfoDropdownButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n
    \n
    {this.displayName}
    \n {MsDyn365.isOboRequest(this.props.context.request) && this.customerName && (\n
    {format(resources.shoppingAsText, this.customerName)}
    \n )}\n
    \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 (!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.\n * All rights reserved. See LICENSE 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 {props.currentDistributor}\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 {signInLink};\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\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, isOboRequest } from '@msdyn365-commerce/core';\nimport { Employee } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Input class for the GetEmployeeInput data action.\n */\nexport class GetEmployeeInput implements IActionInput {\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => 'Employee';\n\n /**\n * Get Cache type Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'Employee';\n\n /**\n * Get Cache type.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the getEmployee.\n * @returns - Input for data action.\n */\nexport const createGetEmployeeInput = (): IActionInput => {\n return new GetEmployeeInput();\n};\n\n/**\n * The action method for the getEmployee data action.\n * @param input -- The action input.\n * @param ctx -- The action context.\n * @returns -- Employee.\n */\nexport async function getEmployeeAction(input: GetEmployeeInput, ctx: IActionContext): Promise {\n // For now, we just need the name information of employee. When we need more information, we will invoke EmployeeDataActions.readAsync retail proxy API.\n if (isOboRequest(ctx.requestContext)) {\n const user = ctx.requestContext.user;\n return {\n StaffId: '',\n Name: user?.firstName || user?.name\n };\n }\n return;\n}\n\n/**\n * The getEmployee data action.\n * Gets the employee.\n * @returns Employee.\n */\nexport const getEmployeeActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-employee',\n action: getEmployeeAction as IAction,\n input: createGetEmployeeInput\n});\n\nexport default getEmployeeActionDataAction;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["context","MsDyn365","isBrowser","window","innerWidth","gridSettings","request","xs","w","sm","md","lg","isExternalLink","url","tmp","document","createElement","href","host","location","canonicalURL","requestContext","_urlParts","requestUrl","origin","path","pathname","toLowerCase","urlParts","split","splice","match","removePipeSignValue","removeKeywords","join","filteredURL","_urlParts2","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","_refinerValue$LeftVal","refinerValueKeyName","LeftValueBoundString","replace","regExSpecialChars","canonicalUrlspecialCharIncludeList","navLinkKeywordRemoval","link","_linkParams$map","_urlParts4","linkBase","linkParams","endsWith","linkParam","map","param","includeConfigList","includeConfig","_includeConfigList$tr","RegExp","NavMenuStateInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","navMenuStateAction","input","ctx","isMenuHasParent","isMobileMenuCollapsed","selectedNavMenu","menuItemData","createObservableDataAction","id","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","_resources$mfrmStoreC","_resources$mfrmStoreC2","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","openDialog","showMapViewLink","onLocationSelected","orgUnitLocation","Promise","resolve","catch","error","telemetry","message","debug","__decorate","observer","Logo","super","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","attributes","getTelemetryAttributes","_this$props$link","_this$props$link2","_this$props$link3","_this$props$link4","_this$props$link5","_this$props$link6","preventDefault","isExternal","linkUrl","destinationUrl","eventName","eventCategory","internalDestinationUrl","internalLocalUrl","Msdyn365","eventAction","eventLabel","ariaLabel","_this$props$link7","_this$props$link8","_this$props$link9","openInNewTab","open","_renderLogo","assign","target","_renderImage","defaultImageSettings","viewports","q","h","xl","lazyload","disableLazyLoad","image","imageSettings","loadFailureBehavior","editProps","key","headerView","_props$data$navMenuSt","_props$data$accountIn","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","_link$linkText","linkText","includes","hamburgerUtilityLinks","showUnderHamburger","hamburgerTabUtilityLinks","hideFromTab","navMenuParentActive","navMenuState","secondaryNavConfig","get","menuItemLimit","menuItemsLimitMobile","menuItemsLimitDesktop","secondaryNavLimit","secondaryNavItems","customer","accountInformation","getTelemetryObject","telemetryPageName","friendlyName","stickyNavigation","_document$getElements","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","_document$getElements2","mobileTopBarSize","bottom","_storeLocatorSize","_document$getElements3","storeLocatorSize","_mainMenuScroll","removeEventListener","actionContext","update","setTimeout","Invoca","PNAPI","run","toggleModal","prevState","toggle","headerType","phoneNumber","cart","headerLogo","phoneIcon","headerCartIcon","newHeaderEnable","checkoutHeaderTitle","Module","Node","isHeaderSticky","targetLink","tabIndex","Image","src","logoUrl","altText","TotalItems","totalItemsInCart","logo","ifModuleAvailable","_props$modules","_props$modules2","cartIconModule","searchModule","HeaderContainer","title","event_type","HeaderTopBarContainer","logoLink","logoImage","secondaryLogoLink","secondaryLogoImage","index","isChat","eval","isPhoneNum","startsWith","eventType","isOpenInNewTab","navIcon","_renderReactFragment","role","Modal","autoFocus","fade","horizontalPosition","verticalPosition","zIndex","applicationNode","modalClassName","ModalHeader","ModalBody","_renderDesktopAccountBlock","MobileMenuLinksContainer","accountHeading","accountLinks","_signInButton","user","signOutLink","_signUpButton","navUrl","slice","_props$data$accountIn2","AccountInfoDropdownParentContainer","signInLink","signUpLink","warning","items","slot","pageScrollValue","scrollTop","SignUp","signupUrl","modifiedAuthUrl","signUpUrl","Button","signUpLinkText","signUpLinkAriaText","onTelemetryClick","SignIn","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__","_objectSpread","viewDictionary","cn","BaseStoreSelectorStateManager","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","value","_readFromToCookie","storeInfo","_unused","_context","storeId","selectedStoreLocationId","storeName","writeToCookie","arguments","StoreName","Latitude","Longitude","_writeToCookie","stringify","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","setItem","cookieValue","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","_document","StringExtensions","isNullOrEmpty","getElementById","currentWindowAPI","mapAPIReady","isMapApiLoaded","lang","market","reject","_document2","_document3","type","defer","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","modalCloseButtonRef","_findPreferredStoreOnClick","ArrayExtensions","hasElements","ref","parentElementRef","rel","moduleType","typeName","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","isExpanded","targetId","Header","isB2BSite","handleLinkTextChange","linkIndex","_this$props$config$my","myAccountLinks","popOverRef","_toggleNavbar","bind","_togglePopover","_keydown","state","signinPopoverOpen","hasSigninerror","isChannelTypeB2B","_this$props$context$r","workerName","customerName","_this$props$data$empl","worker","employee","Name","_this$props$data$acco","FirstName","componentDidMount","reaction","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","signInCustomerNotAuthorizedTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","componentWillUnmount","wishlists","cartLabel","cartQtyLabel","shouldShowWishlistCount","disableTooltip","headerToggleClass","headerClassName","navbarKey","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","currentDistributorSlot","CommerceListLines","viewProps","wishListIconDesktop","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","wishListIconMobile","cartIcon","CartIconComponent","siteOptions","headerAriaLabel","Divider","MobileMenuContainer","wrapClassName","MobileMenuHeader","MobileMenuBodyContainer","AccountInfoDropdownPopoverConentContainer","displayName","Popover","placement","_getSigninButton","_getSignOutButton","isOBORequest","switchCustomerLink","_getSwitchCustomerButton","accountInfoDropdownButton","_getAccountInfoDropdownButton","_getAccountLinks","currentDistributor","renderView","slotName","_user$signOutUrl","SignOut","signOutLinkText","signOutUrl","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","cookies","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","removeAccountSelectionCookie","format","shoppingAsText","route","URL","searchParams","delete","retailServerErrorCode","signUpCustomerNotFound","signUpMultipleCustomerFound","signInCustomerNotAuthorized","retailServerErrorMessage","MyProfile","innerRef","cta","contentAction","etext","editableLink","additionalProperties","onTextChange","setState","keyCode","KeyCodes","Escape","GetEmployeeInput","createGetEmployeeInput","getEmployeeAction","isOboRequest","StaffId","firstName","getEmployeeActionDataAction","module","exports","ReactDOM"],"sourceRoot":""}