{"version":3,"file":"static/js/6856747ff6ce5fd7a502.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/herbal-top-header/components/herbal-top-header-preferred-store.tsx?fc6d","webpack://Msdyn365.Commerce.Online/./src/modules/herbal-top-header/components/logo.tsx?af94","webpack://Msdyn365.Commerce.Online/./src/modules/herbal-top-header/components/nav-icon.tsx?4e20","webpack://Msdyn365.Commerce.Online/./src/modules/herbal-top-header/herbal-top-header.tsx?8ad2","webpack://Msdyn365.Commerce.Online/./src/modules/herbal-top-header/herbal-top-header.view.tsx?5584","webpack://Msdyn365.Commerce.Online/./src/themes/herbal-adventureworks/views/components/wishlist-icon.component.tsx?c0ff","webpack://Msdyn365.Commerce.Online/./lib/herbal-top-header/module-registration.js?38c4","webpack://Msdyn365.Commerce.Online/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://Msdyn365.Commerce.Online/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://Msdyn365.Commerce.Online/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IHerbalTopHeaderData } from '../herbal-top-header.data';\r\nimport { IHerbalTopHeaderProps } from '../herbal-top-header.props.autogenerated';\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 private readonly modalCloseButtonRef: React.RefObject = React.createRef();\r\n\r\n public handleClick = () => {\r\n return this._findPreferreStoreOnClick(this.props);\r\n };\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 if (slots && slots.storeSelector && slots.storeSelector.length > 0) {\r\n const storeName =\r\n storeSelectorStateManager!.preferredStore && storeSelectorStateManager!.preferredStore.StoreName\r\n ? storeSelectorStateManager!.preferredStore.StoreName\r\n : resources.headerPreferredStoreText;\r\n\r\n return (\r\n
\r\n \r\n {storeName}\r\n \r\n {slots.storeSelector}\r\n
\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private async _findPreferreStoreOnClick(props: IHerbalTopHeaderProps): 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 if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n storeSelectorStateManager\r\n .openDialog({\r\n id: storeSelectorId,\r\n showMapViewLink: false,\r\n parentElementRef: this.modalCloseButtonRef,\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 * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\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 typeName?: string;\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 readonly 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\r\n public render(): JSX.Element {\r\n return
{this._renderLogo(this.props)}
;\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 // eslint-disable-next-line react/jsx-no-target-blank\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=132&h=28&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=160&h=48&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n return (\r\n // @ts-ignore\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 * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IHerbalTopHeaderResources } from '../herbal-top-header.props.autogenerated';\r\n\r\nexport interface INavIconProps {\r\n resources: IHerbalTopHeaderResources;\r\n isExpanded: boolean;\r\n targetId: string;\r\n telemetryContent?: ITelemetryContent;\r\n toggleNavBar(): void;\r\n}\r\n\r\n/**\r\n *\r\n * NavIcon component.\r\n * @extends {React.PureComponent}\r\n */\r\n\r\n@observer\r\nexport class NavIcon extends React.PureComponent {\r\n private readonly attributes?: Msdyn365.IDictionary;\r\n\r\n constructor(props: INavIconProps) {\r\n super(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\r\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CartIconComponent } from '@msdyn365-commerce/components';\r\nimport * as MsDyn365 from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IModuleProps,\r\n INodeProps,\r\n ITelemetryContent,\r\n KeyCodes,\r\n Modal,\r\n ModalBody,\r\n ModalHeader,\r\n onTelemetryClick,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed, reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { HeaderPreferredStore, NavIcon } from './components';\r\nimport { IHerbalTopHeaderData } from './herbal-top-header.data';\r\nimport { IHerbalTopHeaderProps, IHerbalTopHeaderResources, IMyAccountLinksData } from './herbal-top-header.props.autogenerated';\r\nimport { WishListIconComponent } from '../../themes/herbal-adventureworks/views/components/wishlist-icon.component';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport interface IHeaderState {\r\n mobileMenuCollapsed: boolean;\r\n signinPopoverOpen: boolean;\r\n hasSigninerror?: boolean;\r\n}\r\n\r\nexport interface IExtraLinksData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface IHeaderViewProps extends IHerbalTopHeaderProps, IHeaderState {\r\n wishListIconDesktop: React.ReactNode;\r\n wishListIconMobile: React.ReactNode;\r\n cartIcon: React.ReactNode;\r\n navIcon: React.ReactNode;\r\n className: string;\r\n menuBar: React.ReactNode[];\r\n search: React.ReactNode[];\r\n siteOptions: React.ReactNode[];\r\n HeaderTag: IModuleProps;\r\n HeaderContainer: INodeProps;\r\n MobileMenuContainer: INodeProps;\r\n MobileMenuHeader: React.ReactNode;\r\n MobileMenuBodyContainer: INodeProps;\r\n MobileMenuLinksContainer: INodeProps;\r\n HeaderTopBarContainer: INodeProps;\r\n Divider: INodeProps;\r\n\r\n AccountInfoDropdownParentContainer?: INodeProps;\r\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\r\n accountInfoDropdownButton?: React.ReactNode;\r\n\r\n signOutLink?: React.ReactNode;\r\n signInLink?: React.ReactNode;\r\n accountLinks?: React.ReactNode[];\r\n myAccountButton?: React.ReactNode[];\r\n extraLinks?: JSX.Element;\r\n preferredStore?: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * Header component.\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nclass Header extends React.PureComponent, IHeaderState> {\r\n private readonly popOverRef: React.RefObject;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private cart: ICartState | undefined;\r\n private originURL: string = '';\r\n\r\n @computed public get displayName(): Readonly {\r\n const customer = this.props.data.accountInformation?.result;\r\n return customer ? customer.FirstName || customer.Name : undefined;\r\n }\r\n\r\n constructor(props: IHerbalTopHeaderProps) {\r\n super(props);\r\n this.popOverRef = React.createRef();\r\n this._toggleNavbar = this._toggleNavbar.bind(this);\r\n this._togglePopover = this._togglePopover.bind(this);\r\n this._keydown = this._keydown.bind(this);\r\n this.state = {\r\n mobileMenuCollapsed: true,\r\n signinPopoverOpen: false,\r\n hasSigninerror: false\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n window.addEventListener('keydown', this._keydown);\r\n }\r\n reaction(\r\n () => this.props.data.cart.result,\r\n () => {\r\n this.cart = this.props.data.cart.result;\r\n }\r\n );\r\n this.originURL =\r\n this.props.context.actionContext.requestContext.app.config.ecomBaseUrl &&\r\n this.props.context.actionContext.requestContext.app.config.ecomBaseUrl;\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n window.removeEventListener('keydown', this._keydown, false);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line complexity -- Disabled complexity.\r\n public render(): JSX.Element | null {\r\n const {\r\n id,\r\n typeName,\r\n data: {\r\n accountInformation,\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n context: {\r\n request: { user }\r\n },\r\n context,\r\n resources: { cartLabel, cartQtyLabel, signUpCustomerNotFoundTitle, signUpMultipleCustomerFoundTitle, closeNotificationLabel }\r\n } = this.props;\r\n const signinNotificationError = this._getSigninNotification(user, signUpMultipleCustomerFoundTitle, signUpCustomerNotFoundTitle);\r\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\r\n // For signup show simple error notification.\r\n NotificationsManager.instance().addNotification(new ErrorNotification(signinNotificationError, closeNotificationLabel));\r\n this.setState({ hasSigninerror: true });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- app config is generic\r\n const disableTooltip = this.props.context.app.config.disableTooltip || false;\r\n const headerToggleClass = this.state.mobileMenuCollapsed ? '' : 'ms-header-open';\r\n const headerClassName = classnames('ms-header', this.props.config.className, headerToggleClass);\r\n const navbarKey = 'header-nav-mobile';\r\n const customer = accountInformation && accountInformation.result;\r\n const cartIconSlot = this._getSlot('cartIcon');\r\n const menuBarSlot = this._getSlot('menuBar');\r\n const searchSlot = this._getSlot('search');\r\n const siteOptionsSlot = this._getSlot('siteOptions');\r\n const preferredStoreSlot = this._getSlot('storeSelector');\r\n if (!customer) {\r\n // @ts-ignore\r\n return null;\r\n }\r\n // @ts-ignore\r\n const viewProps: IHeaderViewProps = {\r\n ...(this.props as IHerbalTopHeaderProps),\r\n ...this.state,\r\n wishListIconDesktop: (\r\n \r\n ),\r\n wishListIconMobile: (\r\n \r\n ),\r\n cartIcon:\r\n !customer && cartIconSlot && cartIconSlot.length > 0 ? (\r\n cartIconSlot[0]\r\n ) : (\r\n \r\n ),\r\n navIcon: (\r\n \r\n ),\r\n menuBar: (menuBarSlot && menuBarSlot.length && menuBarSlot) || [],\r\n search: (searchSlot && searchSlot.length && searchSlot) || [],\r\n siteOptions: (siteOptionsSlot && siteOptionsSlot.length && siteOptionsSlot) || [],\r\n className: headerClassName,\r\n HeaderTag: {\r\n moduleProps: this.props,\r\n className: classnames(headerClassName),\r\n tag: 'header'\r\n },\r\n HeaderContainer: {\r\n className: classnames('ms-header__container')\r\n },\r\n HeaderTopBarContainer: {\r\n className: classnames('ms-header__topbar')\r\n },\r\n Divider: {\r\n className: classnames('ms-header__divider')\r\n },\r\n MobileMenuContainer: {\r\n tag: Modal,\r\n id: navbarKey,\r\n className: 'ms-header__mobile-hamburger',\r\n isOpen: !this.state.mobileMenuCollapsed,\r\n wrapClassName: 'ms-header__modal',\r\n toggle: this._toggleNavbar\r\n },\r\n MobileMenuHeader: ,\r\n MobileMenuBodyContainer: {\r\n tag: ModalBody,\r\n className: 'ms-header__mobile-hamburger-menu-body'\r\n },\r\n MobileMenuLinksContainer: {\r\n className: 'ms-header__mobile-hamburger-menu-links'\r\n },\r\n AccountInfoDropdownParentContainer: {\r\n className: 'ms-header__account-info'\r\n },\r\n signInLink: this._getSigninButton(customer, user, this.props.resources),\r\n signOutLink: this._getSignOutButton(customer, user, this.props.resources),\r\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(customer),\r\n myAccountButton: this._getMyAccountButton(customer),\r\n extraLinks: this._getExtraLink(),\r\n preferredStore: preferredStoreSlot && preferredStoreSlot.length && storeSelectorStateManager && (\r\n \r\n )\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /* Handle link text change*/\r\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent) => {\r\n if (this.props.config.myAccountLinks && this.props.config.myAccountLinks[linkIndex]) {\r\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\r\n }\r\n };\r\n\r\n private _getSlot(slotName: string): React.ReactNode[] | null {\r\n const { slots } = this.props;\r\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\r\n }\r\n\r\n private _getSigninButton(\r\n customer: Customer | undefined,\r\n user: MsDyn365.IRequestContextUser | undefined,\r\n resources: IHerbalTopHeaderResources\r\n ): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n const { signInButtonText } = this.props.config;\r\n const loginCallback = Msdyn365.getUrlSync('logincallback', this.props.context.actionContext);\r\n const signInUrl =\r\n user &&\r\n (loginCallback && loginCallback !== '/logincallback'\r\n ? `${user.signInUrl}?ru=${this.originURL}${loginCallback}`\r\n : user.signInUrl);\r\n return (\r\n !customer && (\r\n \r\n \r\n {signInButtonText}\r\n \r\n \r\n )\r\n );\r\n }\r\n\r\n private _getSignOutButton(\r\n customer: Customer | undefined,\r\n user: MsDyn365.IRequestContextUser | undefined,\r\n resources: IHerbalTopHeaderResources\r\n ): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n const { signOutButtonText } = this.props.config;\r\n const loginCallback = Msdyn365.getUrlSync('logincallback', this.props.context.actionContext);\r\n const signOutUrl =\r\n user &&\r\n (loginCallback && loginCallback !== '/logincallback'\r\n ? `${user.signOutUrl}?ru=${this.originURL}${loginCallback}`\r\n : user.signOutUrl);\r\n return (\r\n customer &&\r\n this.displayName && (\r\n \r\n \r\n {signOutButtonText}\r\n \r\n \r\n )\r\n );\r\n }\r\n\r\n private _getMyAccountButton(customer: Customer | undefined): React.ReactNode[] | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n const { myAccountButtonLinks, myAccountButtonImage } = this.props.config;\r\n if (!customer || !myAccountButtonLinks || myAccountButtonLinks.length === 0) {\r\n return undefined;\r\n }\r\n return myAccountButtonLinks.map((cta: IMyAccountLinksData, index: number) => {\r\n payLoad.contentAction.etext = cta.linkText;\r\n const editableLink: MsDyn365.ILinksData = {\r\n ariaLabel: cta.ariaLabel,\r\n className: 'ms-signin-info__my-account-button-link',\r\n linkText: cta.linkText,\r\n linkUrl: cta.linkUrl.destinationUrl,\r\n openInNewTab: cta.openInNewTab,\r\n role: 'button',\r\n additionalProperties: attributes\r\n };\r\n\r\n // @ts-ignore\r\n return (\r\n // eslint-disable-next-line react/jsx-key\r\n \r\n \r\n \r\n );\r\n });\r\n }\r\n\r\n private _getExtraLink(): JSX.Element | undefined {\r\n const { extraLinks } = this.props.config;\r\n const linkItems =\r\n extraLinks &&\r\n extraLinks.map((cta: IExtraLinksData, index: number) => {\r\n const editableLink: MsDyn365.ILinksData = {\r\n ariaLabel: cta.ariaLabel,\r\n className: 'ms-nav__list__item__link',\r\n linkText: cta.linkText,\r\n linkUrl: cta.linkUrl.destinationUrl,\r\n openInNewTab: cta.openInNewTab,\r\n role: 'link'\r\n };\r\n\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n });\r\n if (linkItems) {\r\n return
      {linkItems}
    ;\r\n }\r\n return undefined;\r\n }\r\n\r\n private _getSigninNotification(\r\n user: MsDyn365.IRequestContextUser | undefined,\r\n signUpMultipleCustomerFoundTitle: string,\r\n signUpCustomerNotFoundTitle: string\r\n ): string | undefined {\r\n const { signUpCustomerNotFound, signUpMultipleCustomerFound } = this.props.config;\r\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\r\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\r\n\r\n if (user?.retailServerErrorCode === notFoundError) {\r\n return signUpCustomerNotFound !== undefined ? signUpCustomerNotFound : signUpCustomerNotFoundTitle;\r\n } else if (user?.retailServerErrorCode === multipleAccountError) {\r\n return signUpMultipleCustomerFound !== undefined ? signUpMultipleCustomerFound : signUpMultipleCustomerFoundTitle;\r\n }\r\n return undefined;\r\n }\r\n\r\n private _getAccountInfoDropdownButton(customer: Customer | undefined): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return (\r\n customer &&\r\n this.displayName && (\r\n \r\n {this.displayName}\r\n \r\n )\r\n );\r\n }\r\n\r\n private _toggleNavbar(): void {\r\n this.setState({\r\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\r\n });\r\n }\r\n\r\n private _togglePopover(): void {\r\n this.setState({\r\n signinPopoverOpen: !this.state.signinPopoverOpen\r\n });\r\n }\r\n\r\n private _keydown(e: KeyboardEvent): void {\r\n if (e.keyCode === KeyCodes.Escape) {\r\n this.setState({ mobileMenuCollapsed: true });\r\n }\r\n }\r\n}\r\n\r\nexport default Header;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IHeaderViewProps } from './herbal-top-header';\r\n\r\nconst headerView: React.FC = props => {\r\n const {\r\n HeaderTag,\r\n HeaderContainer,\r\n HeaderTopBarContainer,\r\n MobileMenuContainer,\r\n MobileMenuBodyContainer,\r\n MobileMenuLinksContainer,\r\n Divider,\r\n extraLinks\r\n } = props;\r\n return (\r\n \r\n \r\n \r\n
    \r\n {extraLinks}\r\n {_renderReactFragment(props.search)}\r\n
    \r\n
    \r\n {props.navIcon}\r\n {props.myAccountButton}\r\n {props.preferredStore}\r\n {props.wishListIconDesktop}\r\n \r\n {props.cartIcon}\r\n {props.signOutLink}\r\n {_renderReactFragment(props.siteOptions)}\r\n
    \r\n
    \r\n \r\n \r\n {props.MobileMenuHeader}\r\n {_renderReactFragment(props.menuBar)}\r\n \r\n {props.myAccountButton}\r\n {props.siteOptions}\r\n {props.wishListIconMobile}\r\n {props.signOutLink}\r\n \r\n \r\n \r\n {_renderReactFragment(props.menuBar)}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\r\n return (\r\n <>\r\n {items && items.length > 0\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\nexport default headerView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { getUrlSync, IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport * as React from 'react';\r\n\r\nexport interface IWishlistIconComponentProps extends IComponentProps<{}> {\r\n className?: string;\r\n wishlistTooltipText: string;\r\n showButtonTooltip?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface IWishlistIconComponent extends IComponent {\r\n}\r\n\r\nconst WishlistIconComponentActions = {};\r\n\r\n/**\r\n * WishlistIcon component.\r\n * @param props\r\n * @extends {React.PureComponent}\r\n */\r\nconst WishlistIcon: React.FC = (props: IWishlistIconComponentProps) => {\r\n const wishlistIconRef: React.RefObject = React.createRef();\r\n const text = props.wishlistTooltipText;\r\n // const showButtonIconTooltip = props.showButtonTooltip;\r\n const wishlistUrl = getUrlSync('wishlist', props.context.actionContext);\r\n const signInUrl = `${props.context.request.user.signInUrl}?ru=${wishlistUrl}`;\r\n const url = props.context.request.user.isAuthenticated ? `${wishlistUrl}?activeTab=tab:2` : signInUrl;\r\n // const showTooltip = showButtonIconTooltip !== undefined ? showButtonIconTooltip : true;\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, text, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n \r\n \r\n {text}\r\n \r\n \r\n {/* { showTooltip && \r\n {text}\r\n } */}\r\n \r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const WishListIconComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'WishListIcon',\r\n { component: WishlistIcon, ...WishlistIconComponentActions }\r\n);\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['herbal-top-header'] = {\n c: () => require('partner/modules/herbal-top-header/herbal-top-header.tsx'),\n $type: 'containerModule',\n da: [{name:'accountInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action', runOn: 1},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'herbal-top-header',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/herbal-top-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/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__|modules|herbal-top-header|herbal-top-header'] = {\n c: () => require('partner/modules/herbal-top-header/herbal-top-header.view.tsx'),\n cn: '__local__-__local__-herbal-top-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 // 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","module.exports = React;","module.exports = ReactDOM;"],"names":["HeaderPreferredStore","React","constructor","modalCloseButtonRef","handleClick","this","_findPreferreStoreOnClick","props","render","data","storeSelectorStateManager","result","slots","resources","storeSelector","length","storeName","preferredStore","StoreName","headerPreferredStoreText","className","color","headerPreferredStoreAriaLabel","onClick","ref","modules","storeSelectorId","Object","keys","id","openDialog","showMapViewLink","parentElementRef","onLocationSelected","orgUnitLocation","Promise","resolve","catch","error","telemetry","message","debug","__decorate","observer","NavIcon","super","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","attributes","getTelemetryAttributes","Button","assign","toggleNavBar","title","mobileHamburgerAriaLabel","isExpanded","targetId","Header","originURL","handleLinkTextChange","linkIndex","event","config","myAccountLinks","linkText","target","value","popOverRef","_toggleNavbar","bind","_togglePopover","_keydown","state","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","getTelemetryObject","context","request","telemetryPageName","friendlyName","_this$props$data$acco","customer","accountInformation","FirstName","Name","undefined","componentDidMount","MsDyn365","isBrowser","window","addEventListener","reaction","cart","actionContext","requestContext","app","ecomBaseUrl","componentWillUnmount","removeEventListener","typeName","user","cartLabel","cartQtyLabel","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","setState","disableTooltip","headerToggleClass","headerClassName","classnames","navbarKey","cartIconSlot","_getSlot","menuBarSlot","searchSlot","siteOptionsSlot","preferredStoreSlot","viewProps","_objectSpread","wishListIconDesktop","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishListIconMobile","cartIcon","CartIconComponent","navIcon","menuBar","search","siteOptions","HeaderTag","moduleProps","tag","HeaderContainer","HeaderTopBarContainer","Divider","MobileMenuContainer","Modal","isOpen","wrapClassName","toggle","MobileMenuHeader","ModalHeader","MobileMenuBodyContainer","ModalBody","MobileMenuLinksContainer","AccountInfoDropdownParentContainer","signInLink","_getSigninButton","signOutLink","_getSignOutButton","accountInfoDropdownButton","_getAccountInfoDropdownButton","myAccountButton","_getMyAccountButton","extraLinks","_getExtraLink","renderView","slotName","SignIn","signInButtonText","loginCallback","Msdyn365","signInUrl","href","signInLinkAriaText","onTelemetryClick","SignOut","signOutButtonText","signOutUrl","displayName","signOutLinkAriaText","MyProfile","myAccountButtonLinks","myAccountButtonImage","map","cta","index","contentAction","etext","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","role","additionalProperties","alt","altText","src","height","width","linkItems","key","link","signUpCustomerNotFound","signUpMultipleCustomerFound","retailServerErrorCode","innerRef","e","keyCode","KeyCodes","Escape","computed","_renderReactFragment","items","slot","Module","Node","msdyn365Commerce","createComponent","component","wishlistIconRef","text","wishlistUrl","getUrlSync","url","isAuthenticated","classname","binding","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","BaseStoreSelectorStateManager","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","_readFromToCookie","storeInfo","JSON","parse","_unused","_context","input","storeId","selectedStoreLocationId","writeToCookie","arguments","StoreId","Latitude","Longitude","_writeToCookie","stringify","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","localStorage","removeItem","setItem","cookieValue","getItem","observable","action","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","channel","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","trim","query","encodeURI","geolocationApiUrl","requestUrl","script","document","createElement","setAttribute","remove","resourceSets","point","coordinates","body","appendChild","_document","StringExtensions","isNullOrEmpty","getElementById","lang","market","reject","_document2","_document3","type","async","defer","mapAPIReady","isMapApiLoaded","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","createObservableDataAction","getGenericAction","inputData","module","exports","ReactDOM"],"sourceRoot":""}