{"version":3,"file":"static/js/17.2e01525ba1ba042470bf.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/krannich-portal/krannich-portal.tsx?fe65","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-portal/krannich-portal.view.tsx?7e56","webpack://Msdyn365.Commerce.Online/./src/themes/krannich/views/cart-icon.view.tsx?3cb2","webpack://Msdyn365.Commerce.Online/./src/themes/krannich/views/cookie-compliance.view.tsx?aeb8","webpack://Msdyn365.Commerce.Online/./src/themes/krannich/views/footer-item.view.tsx?d46d","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.tsx?797a","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/rng.js?7d39","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/regex.js?255d","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/validate.js?f4cd","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/stringify.js?688d","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/v4.js?0bec","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/proactive-chat-trigger.ts?ab51","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-amount-trigger.ts?b0a3","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-number-of-items-trigger.ts?5c1e","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-specific-product-trigger.ts?5985","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/helpers/consts.ts?4dc3","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/date-range-trigger.ts?d574","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/from-specific-page-trigger.ts?37c0","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/page-visits-trigger.ts?66a6","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-CountryRegion-trigger.ts?5c72","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-page-trigger.ts?9295","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/wait-on-time-trigger.ts?63fd","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/proactive/index.ts?ef6c","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/helpers/ContextProvider.ts?20ff","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/helpers/StyleComposers.ts?0cc6","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/helpers/CommerceChatStore.ts?9abc","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/components/ChatCore.tsx?1b5f","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/components/Chat.tsx?5004","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.view.tsx?cb2f","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/components/accept-button.tsx?8e73","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/components/links.tsx?97b8","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/cookie-compliance.tsx?02ac","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/cookie-compliance.view.tsx?a33f","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/order-details.view.tsx?1ce1","webpack://Msdyn365.Commerce.Online/./src/modules/iframe/iframe.tsx?65fe","webpack://Msdyn365.Commerce.Online/./src/modules/iframe/iframe.view.tsx?a7d6","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-pickup-option-list.tsx?7a25","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-location-lines.tsx?87ff","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-search-form.tsx?fb9a","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-small-components.tsx?4335","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/pickup-option-list.tsx?dae0","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?fe27","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?923d","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/selected-store/selected-store.tsx?bfbc","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/store-selector.tsx?e416","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/store-selector.view.tsx?71a6","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/b2b-requests-status.view.tsx?de3b","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/cart.view.tsx?3909","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/order-details.view.tsx?027b","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/sign-in.view.tsx?048a","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/store-selector.view.tsx?ccdd"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\n\r\nimport { IKrannichPortalData } from './krannich-portal.data';\r\nimport MsDyn365, { IActionContext, ICookieContext, ICoreContext } from '@msdyn365-commerce/core';\r\nimport actionAddressFromZipCode, { GetAddressFromZipCodeInput } from '../../actions/get-address-from-zip-code.action';\r\nimport { IKrannichPortalProps, IKrannichPortalConfig, IKrannichPortalResources } from './krannich-portal.props.autogenerated';\r\nimport { getMainDomain } from '../../utils/helper';\r\n\r\nexport interface IModalRouterPortalProps {\r\n actionContext: IActionContext;\r\n cookies: ICookieContext;\r\n resources: IKrannichPortalResources;\r\n config: IKrannichPortalConfig;\r\n context: ICoreContext;\r\n}\r\n\r\ninterface IZipCode {\r\n Locality: string;\r\n Pcode: number;\r\n State: string;\r\n Territory: string;\r\n}\r\n\r\n/**\r\n * KrannichPortal functional component\r\n */\r\n\r\nconst KrannichPortal: React.FC> = props => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [zipCode, setZipCode] = useState('');\r\n const [error, setError] = useState('');\r\n const [alertActive, setAlertActive] = useState(false);\r\n const modalBtn = useRef();\r\n const inputRef = useRef(null);\r\n const enableGenericTerritories = props.config.enableGenericTerritories || false;\r\n\r\n const territory_data = props.config?.territoryData!;\r\n const notFoundError =\r\n props?.context?.actionContext?.requestContext?.apiSettings?.oun !== props.context.app.config.ounNumberForUsSite\r\n ? props.resources.notFound\r\n : props.resources.notFoundZipcode;\r\n\r\n const toggle = () => {\r\n setIsOpen(!isOpen);\r\n };\r\n\r\n useEffect(() => {\r\n const addressFromZip = props.context.request.cookies.get('addressFromZip');\r\n\r\n if (!enableGenericTerritories) {\r\n if (addressFromZip.status === 'FOUND') {\r\n const { value } = addressFromZip;\r\n const territory = value?.Territory;\r\n let isTerritoryMatched;\r\n const pathName = props?.context?.actionContext?.requestContext?.url?.requestUrl?.pathname;\r\n const hostName = props?.context?.actionContext?.requestContext?.url?.requestUrl?.hostname;\r\n if (\r\n territory === 'KAUM' &&\r\n (pathName?.includes(territory.toLocaleLowerCase()) || pathName?.includes('aus-mb') || hostName?.includes('aus-mb'))\r\n ) {\r\n isTerritoryMatched = true;\r\n } else if (\r\n territory === 'KAUB' &&\r\n (pathName?.includes(territory.toLocaleLowerCase()) || pathName?.includes('aus-br') || hostName?.includes('aus-br'))\r\n ) {\r\n isTerritoryMatched = true;\r\n } else {\r\n isTerritoryMatched = false;\r\n }\r\n !isTerritoryMatched && __reditectTo(territory);\r\n } else {\r\n toggle();\r\n }\r\n } else {\r\n if (addressFromZip.status === 'FOUND' && territory_data?.length > 0) {\r\n const { value } = addressFromZip;\r\n const territory = value?.Territory;\r\n\r\n let isTerritoryMatched;\r\n const pathName = props?.context?.actionContext?.requestContext?.url?.requestUrl?.pathname;\r\n const hostName = props?.context?.actionContext?.requestContext?.url?.requestUrl?.hostname;\r\n\r\n for (const item of territory_data) {\r\n if (\r\n territory === item.name &&\r\n (pathName?.includes(territory.toLocaleLowerCase()) ||\r\n pathName?.includes(item.pathKeyword) ||\r\n hostName?.includes(item.pathKeyword))\r\n ) {\r\n isTerritoryMatched = true;\r\n break;\r\n }\r\n }\r\n !isTerritoryMatched && __reditectTo(territory ?? '');\r\n } else {\r\n toggle();\r\n }\r\n }\r\n }, []);\r\n\r\n const __reditectTo = (territory: string | undefined) => {\r\n if (!enableGenericTerritories) {\r\n const { brBaseUrl, mbBaseUrl } = props.config;\r\n let redirectURL = null;\r\n if (territory?.toUpperCase() === 'KAUM') {\r\n redirectURL = mbBaseUrl;\r\n }\r\n if (territory?.toUpperCase() === 'KAUB') {\r\n redirectURL = brBaseUrl;\r\n }\r\n MsDyn365.isBrowser && (window.location.href = redirectURL!);\r\n } else {\r\n let redirectURL = '';\r\n const matchingTerritory = territory_data?.find(item => item.name === territory?.toUpperCase());\r\n\r\n if (matchingTerritory) {\r\n redirectURL = matchingTerritory.redirectURL;\r\n MsDyn365.isBrowser && (window.location.href = redirectURL!);\r\n } else {\r\n toggle();\r\n }\r\n }\r\n };\r\n\r\n const _handleZipCode = async (event: React.FormEvent) => {\r\n if (!enableGenericTerritories) {\r\n const { apiException } = props.resources;\r\n event.preventDefault();\r\n if (zipCode.length === 0) {\r\n setError(notFoundError);\r\n setAlertActive(true);\r\n }\r\n try {\r\n const getAddressFromZipCode = await actionAddressFromZipCode(\r\n new GetAddressFromZipCodeInput(zipCode, props.config.defaultTerritory),\r\n props.context.actionContext\r\n );\r\n if (Object.keys(getAddressFromZipCode).length === 0) {\r\n setError(notFoundError);\r\n setAlertActive(true);\r\n } else {\r\n if (MsDyn365.isBrowser) {\r\n const currentHostname = window.location.hostname;\r\n // TODO: List of known production hostnames which we will make dynamic after Go Alive.\r\n const productionHostnames = [\r\n // Todo: for local testing, need to remove later on\r\n // 'localhost:4000',\r\n 'aus.krannich-shop.com',\r\n 'aus-mb.krannich-shop.com',\r\n 'aus-br.krannich-shop.com'\r\n ];\r\n const isProdEnv = productionHostnames.includes(currentHostname);\r\n if (isProdEnv) {\r\n props?.context?.request?.cookies.set('addressFromZip', JSON.stringify(getAddressFromZipCode), {\r\n domain: '.krannich-shop.com',\r\n path: '/'\r\n });\r\n } else {\r\n props?.context?.request?.cookies.set('addressFromZip', JSON.stringify(getAddressFromZipCode));\r\n }\r\n setIsOpen(false);\r\n setAlertActive(false);\r\n __reditectTo(getAddressFromZipCode?.Territory);\r\n }\r\n }\r\n } catch (e) {\r\n setError(apiException);\r\n setAlertActive(true);\r\n }\r\n setZipCode('');\r\n } else {\r\n event.preventDefault();\r\n if (zipCode.length === 0) {\r\n setError(notFoundError);\r\n setAlertActive(true);\r\n }\r\n try {\r\n const getAddressFromZipCode = await actionAddressFromZipCode(\r\n new GetAddressFromZipCodeInput(zipCode, props.config.defaultTerritory),\r\n props.context.actionContext\r\n );\r\n if (Object.keys(getAddressFromZipCode).length === 0) {\r\n setError(notFoundError);\r\n setAlertActive(true);\r\n } else {\r\n if (MsDyn365.isBrowser) {\r\n const currentHostname = window.location.hostname;\r\n const mainDomain = getMainDomain(currentHostname);\r\n if (currentHostname === 'localhost') {\r\n props.context.request.cookies.set('addressFromZip', JSON.stringify(getAddressFromZipCode));\r\n } else if (mainDomain) {\r\n props.context.request.cookies.set('addressFromZip', JSON.stringify(getAddressFromZipCode), {\r\n domain: `.${mainDomain}`,\r\n path: '/'\r\n });\r\n } else {\r\n props.context.request.cookies.set('addressFromZip', JSON.stringify(getAddressFromZipCode), {\r\n domain: '.krannich-shop.com',\r\n path: '/'\r\n });\r\n }\r\n setIsOpen(false);\r\n setAlertActive(false);\r\n __reditectTo(getAddressFromZipCode?.Territory);\r\n }\r\n }\r\n } catch (e) {\r\n setError(props.resources.apiException);\r\n setAlertActive(true);\r\n }\r\n setZipCode('');\r\n }\r\n };\r\n const viewProps = {\r\n ...props,\r\n isOpen,\r\n inputRef,\r\n zipCode,\r\n setZipCode,\r\n error,\r\n alertActive,\r\n toggle,\r\n _handleZipCode,\r\n modalBtn\r\n };\r\n return props.renderView(viewProps) as React.ReactElement;\r\n};\r\n\r\nexport default KrannichPortal;\r\n","import React from 'react';\r\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport { RichTextComponent } from '@msdyn365-commerce/core';\r\nimport { IKrannichPortalConfig, IKrannichPortalResources } from './krannich-portal.props.autogenerated';\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n config: IKrannichPortalConfig;\r\n resources: IKrannichPortalResources;\r\n inputRef: any;\r\n zipCode: string;\r\n setZipCode: React.Dispatch>;\r\n error: string;\r\n alertActive: boolean;\r\n _handleZipCode: (event: React.FormEvent) => Promise;\r\n modalBtn: any;\r\n}\r\n\r\nconst PortalModal: React.FC = props => {\r\n const { alertActive, config, error, inputRef, isOpen, modalBtn, resources, setZipCode, _handleZipCode, zipCode } = props;\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n {config.logoImage?.altText}\r\n
\r\n
\r\n \r\n

{config.headingWebShop}

\r\n
\r\n
\r\n \r\n {config.newZealandZipCodeMsg &&

{config.newZealandZipCodeMsg}

}\r\n setZipCode(e.target.value)}\r\n maxLength={10}\r\n />\r\n {alertActive &&

{error}

}\r\n {\r\n setZipCode(inputRef.current?.value!);\r\n }}\r\n type='submit'\r\n >\r\n {resources.submitBtnLabel}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default PortalModal;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartIconViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart-icon/cart-icon';\r\nimport { IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart-icon/components/flyout-cart-line-items';\r\n\r\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n return cartLines.map((cartLine, index) => {\r\n return (\r\n \r\n {cartLine.cartline}\r\n {cartLine.storeLocation}\r\n {cartLine.remove}\r\n \r\n );\r\n });\r\n};\r\n\r\nconst CartIconView: React.FC = (props: ICartIconViewProps) => {\r\n //VSI customization for custom veiw shopping cart button start\r\n const cartItem = props?.cartlines?.length!;\r\n const customGoToCartButton =\r\n props.goToCartButton &&\r\n React.cloneElement(props.goToCartButton as JSX.Element, {\r\n title: `View Shopping Cart (${cartItem !== undefined ? cartItem : 0})`,\r\n children: `View Shopping Cart (${cartItem !== undefined ? cartItem : 0})`\r\n });\r\n //VSI customization end\r\n return (\r\n \r\n {props.cartIcon}\r\n {props.FlyoutContainer ? (\r\n \r\n {props.flyoutTitle}\r\n {props.checkoutBlockedDueToUnavailableFunds}\r\n {_renderCartlines(props.cartlines, props)}\r\n {props.totalPrice}\r\n {/* {VSI customization to hide checkout/guest checkout} */}\r\n {/* {props.checkoutAsSignInUserButton} */}\r\n {/* {props.checkoutAsGuestButton} */}\r\n {customGoToCartButton}\r\n \r\n ) : (\r\n false\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CartIconView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Alert, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICookieComplianceViewProps } from '@msdyn365-commerce-modules/cookie-compliance/src/modules/cookie-compliance/./cookie-compliance';\r\nimport { ICookieComplianceProps as ICookieComplianceExtensionProps } from './../definition-extensions/cookie-compliance.ext.props.autogenerated';\r\n\r\ndeclare global {\r\n interface Window {\r\n CookieConsent: {\r\n consent: {\r\n necessary: boolean;\r\n };\r\n };\r\n }\r\n}\r\n\r\nconst CookieComplianceView: React.FC> = props => {\r\n const { CookieComplianceBanner, AlertProps, Content, acceptButton, text, links } = props;\r\n\r\n const { config, context } = props;\r\n const { externalConsent } = config;\r\n\r\n React.useEffect(() => {\r\n if (externalConsent) {\r\n const consentChoosed = () => {\r\n if (context && context.request && context.request.cookies) {\r\n context.request.cookies.setConsentCookie();\r\n location.reload();\r\n }\r\n };\r\n if (window?.CookieConsent?.consent?.necessary) {\r\n context.request.cookies.setConsentCookie();\r\n location.reload();\r\n }\r\n window.addEventListener(\r\n 'CookiebotOnAccept',\r\n () => {\r\n window.CookieConsent.consent.necessary && consentChoosed();\r\n },\r\n false\r\n );\r\n }\r\n }, []);\r\n\r\n return (\r\n <>\r\n {!externalConsent && (\r\n \r\n \r\n \r\n {text}\r\n {links}\r\n \r\n {acceptButton}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\nexport default CookieComplianceView;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IFooterViewProps } from '@msdyn365-commerce-modules/footer/src/modules/footer-item';\r\n\r\n/**\r\n *\r\n * FooterItemView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class FooterItemView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n const {\r\n FooterItem,\r\n Link,\r\n context: {\r\n actionContext: {\r\n requestContext: {\r\n user: { isAuthenticated }\r\n }\r\n }\r\n }\r\n } = this.props;\r\n //VSI CUSTOMIZATION START Hide register now link in case of logged in user\r\n if (Link?.title === 'Become a Valued Customer' && isAuthenticated) {\r\n return null;\r\n }\r\n return {this._renderElement(this.props)};\r\n }\r\n\r\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\r\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\r\n if (heading) {\r\n return {heading} ;\r\n } else if (Link && image) {\r\n return (\r\n \r\n {linkText}\r\n {image}\r\n \r\n );\r\n } else if (Link) {\r\n return EditableLink;\r\n }\r\n return (\r\n <>\r\n {text}\r\n {image}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FooterItemView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport { isOboRequest } from '@msdyn365-commerce/core-internal';\nimport { IMsdyn365PvaChatConnectorData } from './msdyn365-pva-chat-connector.data';\nimport { IMsdyn365PvaChatConnectorConfig, IMsdyn365PvaChatConnectorProps } from './msdyn365-pva-chat-connector.props.autogenerated';\n\nexport interface IPvaChatConnectorViewProps extends IMsdyn365PvaChatConnectorProps {\n config: IMsdyn365PvaChatConnectorConfig;\n}\n\n/**\n * PvaChatConnector component\n * @extends {React.PureComponent>}\n */\nclass PvaChatConnector extends React.PureComponent> {\n // Loads CDN version of Botframework-Webchat library\n public componentDidMount(): void {\n if (isOboRequest(this.props.context.request)) {\n return;\n }\n\n const url = this.props.config.botFrameworkCDNURL || this.props.context.app.config.pvaChatConnectorBotFrameworkCDNURL;\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n script.crossOrigin = 'anonymous';\n document.body.appendChild(script);\n }\n\n public render(): JSX.Element | null {\n if (isOboRequest(this.props.context.request)) {\n return null;\n }\n\n return this.props.renderView(this.props);\n }\n}\n\nexport default PvaChatConnector;\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProactiveChatTrigger } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\n\n/**\n * ProactiveChatTrigger class - checks if Proactive Chat should be triggered, starts the chat and sets context\n */\nabstract class ProactiveChatTrigger implements IProactiveChatTrigger {\n public props: IPvaChatConnectorViewProps;\n public context: IChatContext;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n this.props = props;\n this.context = context;\n }\n\n /**\n * Generates Chat Context with included properties related to Proactive Chat\n * @returns TContextProvider - Chat Context\n */\n public abstract getContextProvider(): TContextProvider;\n\n /**\n * Generates chat welcome message to be used if Proactive Chat is triggered\n * @returns string - chat welcome message\n */\n public abstract getMessage(): string;\n\n /**\n * Validate specific trigger conditions if Proactive Chat should be initiated\n * @returns boolean (TRUE if Proactive Chat should be triggered)\n */\n public abstract validate(): Promise;\n}\n\nexport default ProactiveChatTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartAmountTrigger class - proactive chat is triggered if cArt amount is in preset boundaries (config.proactiveOnCartAmountMin, config.proactiveOnCartAmountMax)\n */\nclass CartAmountTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private totalInCart: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartAmountMin;\n this.max = this.props.config.proactiveOnCartAmountMax;\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Cart amount proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartAmountTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.totalInCart = cart.cart.TotalAmount || 0;\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.totalInCart && this.totalInCart <= this.max;\n } else {\n retVal = this.min <= this.totalInCart;\n }\n } else {\n if (this.max) {\n retVal = this.totalInCart <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Validation result: '${retVal}'; Cart total: '${this.totalInCart}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Amount',\n eCommerceCustProactiveShoppingCartAmount: `${this.totalInCart}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartAmountMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartAmountTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartNumberOfItemsTrigger class - proactive chat is triggered if Cart Number of Items is in preset boundaries (config.proactiveOnCartNoOfItemsMin, config.proactiveOnCartNoOfItemsMax)\n */\nclass CartNumberOfItemsTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private numberOfItems: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartNoOfItemsMin;\n this.max = this.props.config.proactiveOnCartNoOfItemsMax;\n\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Cart number of items proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartNumberOfItemsTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.numberOfItems = cart.cart.TotalItems || 0;\n\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.numberOfItems && this.numberOfItems <= this.max;\n } else {\n retVal = this.min <= this.numberOfItems;\n }\n } else {\n if (this.max) {\n retVal = this.numberOfItems <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Validation result: '${retVal}'; Number of items in cart: '${this.numberOfItems}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Number of Items',\n eCommerceCustProactiveShoppingCartNumberOfItems: `${this.numberOfItems}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartNoOfItemsMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartNumberOfItemsTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartSpecificProductTrigger class - proactive chat is triggered if a Product in the Cart is in preset list of products (config.proactiveOnCartSpecificProductList)\n */\nclass CartSpecificProductTrigger extends ProactiveChatTrigger {\n private product: string = '';\n\n public async validate(): Promise {\n let isValid = false;\n const cart = await this._getCart();\n if (!cart.isEmpty) {\n if (cart.cart.CartLines) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart line items was '${cart.cart.CartLines?.length}'`\n );\n for (let i = 0; i < cart.cart.CartLines?.length; i++) {\n if (cart.cart.CartLines[i]) {\n if (this.props.config.proactiveOnCartSpecificProductList) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart specific products was configured for proactive chat was '${this.props.config.proactiveOnCartSpecificProductList?.length}'`\n );\n // Find first item, from user-defined list of products, that matches the cart lines' itemId in the cart.\n for (let j = 0; j < (this.props.config.proactiveOnCartSpecificProductList?.length || 0); j++) {\n if (\n this.props.config.proactiveOnCartSpecificProductList &&\n cart.cart.CartLines[i].ItemId &&\n this.props.config.proactiveOnCartSpecificProductList[j] === cart.cart.CartLines[i].ItemId\n ) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Matched cart line item ID '${cart.cart.CartLines[i].ItemId}' against user-defined list of specific products for proactive chat.`\n );\n isValid = true;\n break;\n }\n }\n }\n } else {\n // Rest of the CartLines are undefined\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart did not contain any cart lines.`);\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart was empty.`);\n }\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Specific Product',\n eCommerceCustProactiveShoppingCartSpecificProduct: `${this.product}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartSpecificProductMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartSpecificProductTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum ProactiveChatNames {\n DateRange = 'Date Range',\n FromSpecificPage = 'From Specific Page',\n PageVisits = 'Page Visits',\n SpecificLocation = 'Specific Location',\n SpecificPage = 'Specific Page',\n WaitOnTime = 'Wait On Time'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * DateRangeTrigger class - proactive chat is triggered if current date is in preset date boundaries (config.proactiveOnDateRangeStart, config.proactiveOnDateRangeEnd)\n */\nclass DateRangeTrigger extends ProactiveChatTrigger {\n private start?: Date;\n private end?: Date;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.start = this._toDate(this.props.config.proactiveOnDateRangeStart);\n this.end = this._toDate(this.props.config.proactiveOnDateRangeEnd);\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Proactive chat initialized with startDate: '${this.start}'; max: '${this.end}'.`\n );\n }\n\n public async validate(): Promise {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n\n let retVal = false;\n if (this.start) {\n if (this.end) {\n retVal = this.start.getTime() <= now.getTime() && now.getTime() <= this.end.getTime();\n } else {\n retVal = this.start.getTime() <= now.getTime();\n }\n } else if (this.end) {\n retVal = now.getTime() <= this.end.getTime();\n }\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Validation result: '${retVal}'; Current date used to compare: '${now}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.DateRange,\n eCommerceCustProactiveFromDate: this.start ? this.start.toUTCString() : '',\n eCommerceCustProactiveToDate: this.end ? this.end.toUTCString() : ''\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnDateRangeMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Converts string(us-en) to date\n * @param date string (mm/dd/yyyy)\n * @returns Date or undefined\n */\n private _toDate(date?: string): Date | undefined {\n if (date) {\n const dateParts = date.split('/');\n return new Date(+dateParts[2], +dateParts[1] - 1, +dateParts[0]);\n } else {\n return undefined;\n }\n }\n}\n\nexport default DateRangeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * FromSpecificPageTrigger class - proactive chat is triggered if user has come from specific page (the one listed in config.proactiveOnFromSpecificPageList)\n */\nclass FromSpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnFromSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Number of items in user-defined list of 'From Specific Page' was '${this.props.config.proactiveOnFromSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnFromSpecificPageList?.length || 0); i++) {\n const fromSpecificPageTrimmed: string = this.props.config.proactiveOnFromSpecificPageList[i].trim();\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] Current page URL: '${window.document.referrer}'.`\n );\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Current item from user-defined list of 'From Specific Page': '${fromSpecificPageTrimmed}'.`\n );\n\n if (window.document.referrer.indexOf(fromSpecificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] User-defined 'From Specific Page' list was undefined.`\n );\n }\n this.props.context.telemetry.debug(`[Chat][${FromSpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.FromSpecificPage,\n eCommerceCustProactiveCameFromPage: window.document.referrer\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnFromSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default FromSpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICookieContext } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/ICookieContext';\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * PageVisitTrigger class - proactive chat is triggered if user has visited current page for (config.proactiveOnPageVisitNumber) or more times\n */\nclass PageVisitTrigger extends ProactiveChatTrigger {\n public visits: number = 0;\n private cookieName: string = 'TimesPageVisited';\n private expdate: Date;\n private cookies: ICookieContext;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.cookies = this.props.context.request.cookies;\n this.expdate = new Date();\n // Set expiry date to 365 days.\n this.expdate.setTime(this.expdate.getTime() + 24 * 60 * 60 * 1000 * 365);\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie expiry date set to: '${this.expdate}'.`);\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie context is given: '${this.cookies.isConsentGiven()}'.`);\n if (this.cookies.isConsentGiven()) {\n this.cookies.setConsentCookie();\n }\n\n this._updateVisitCounter();\n }\n\n public async validate(): Promise {\n let retVal: boolean = false;\n\n if (this.props.config.proactiveOnPageVisitNumber) {\n retVal = this.visits >= this.props.config.proactiveOnPageVisitNumber;\n }\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Validation result: '${retVal}'.`);\n return retVal;\n }\n\n public clear(): void {\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Clearing cookie for page visit counter.`);\n this.cookies.set(this.cookieName, 0, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.PageVisits,\n eCommerceCustProactiveNumberOfVisits: `${this.visits}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnPageVisitMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private _updateVisitCounter(): void {\n this.visits = this.cookies.get(this.cookieName).value || 0;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter BEFORE update: '${this.visits}.`);\n ++this.visits;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter AFTER update: '${this.visits}.`);\n\n this.cookies.set(this.cookieName, this.visits, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n}\n\nexport default PageVisitTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IExtendedRequest } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if user geographically uses the website from specific country/regions(config.proactiveOnSpecificCountryRegionCountry)\n */\nclass SpecificCountryRegionTrigger extends ProactiveChatTrigger {\n private customerCountryCode: string;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.customerCountryCode = (this.props.context.request).suggestedMarket || 'n/a';\n this.props.context.telemetry.debug(\n `[${SpecificCountryRegionTrigger.name}] Customer country code set to: '${this.customerCountryCode}.'`\n );\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.props.config.proactiveOnSpecificLocation\n ? this.props.config.proactiveOnSpecificLocation.toLowerCase().indexOf(this.customerCountryCode.toLowerCase()) > -1\n : false;\n this.props.context.telemetry.debug(`[Chat][${SpecificCountryRegionTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveCountryCode: this.props.config.proactiveOnSpecificLocation || '',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificLocation\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificCountryRegionMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificCountryRegionTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if current page is listed in config.proactiveOnSpecificPageList\n */\nclass SpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${SpecificPageTrigger.name}] Number of items in user-defined list of 'Specific Pages' was '${this.props.config.proactiveOnSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnSpecificPageList?.length || 0); i++) {\n const specificPageTrimmed: string = this.props.config.proactiveOnSpecificPageList[i].trim();\n this.props.context.telemetry.debug(`[] Current location URL: ${window.location.href}.`);\n this.props.context.telemetry.debug(`[] Current item from user-defined list of 'Specific Page': ${specificPageTrimmed}.`);\n if (window.location.href.indexOf(specificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] User-defined 'Specific Page' list was undefined.`);\n }\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificPage\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * WaitOnTimeTrigger - proactive chat is triggered if user stays on current page for more than (config.proactiveOnWaitTimeSeconds) seconds\n */\nclass WaitOnTimeTrigger extends ProactiveChatTrigger {\n private waitTimeInMilliseconds: number | undefined;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n if (this.props.config.proactiveOnWaitTimeSeconds && !isNaN(this.props.config.proactiveOnWaitTimeSeconds)) {\n this.waitTimeInMilliseconds = Number(this.props.config.proactiveOnWaitTimeSeconds) * 1000;\n this.props.context.telemetry.debug(\n `[Chat][${WaitOnTimeTrigger.name}] Wait time (ms) set to: '${this.waitTimeInMilliseconds}'.`\n );\n }\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.waitTimeInMilliseconds !== undefined;\n this.props.context.telemetry.debug(`[Chat][${WaitOnTimeTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n const triggerTime = Date.now() + (this.waitTimeInMilliseconds || 0);\n return () => {\n return triggerTime > Date.now()\n ? this.context\n : {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.WaitOnTime,\n eCommerceCustProactiveTimeOnPage: `${this.waitTimeInMilliseconds ? this.waitTimeInMilliseconds : 0}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnWaitTimeMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default WaitOnTimeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport CartAmountTrigger from './triggers/cart-amount-trigger';\nimport CartNumberOfItemsTrigger from './triggers/cart-number-of-items-trigger';\nimport CartSpecificProductTrigger from './triggers/cart-specific-product-trigger';\nimport DateRangeTrigger from './triggers/date-range-trigger';\nimport FromSpecificPageTrigger from './triggers/from-specific-page-trigger';\nimport PageVisitTrigger from './triggers/page-visits-trigger';\nimport SpecificCountryRegionTrigger from './triggers/specific-CountryRegion-trigger';\nimport SpecificPageTrigger from './triggers/specific-page-trigger';\nimport WaitOnTimeTrigger from './triggers/wait-on-time-trigger';\n\ntype ProactiveChat =\n | typeof DateRangeTrigger\n | typeof SpecificPageTrigger\n | typeof FromSpecificPageTrigger\n | typeof PageVisitTrigger\n | typeof SpecificCountryRegionTrigger\n | typeof CartAmountTrigger\n | typeof CartNumberOfItemsTrigger\n | typeof CartSpecificProductTrigger\n | typeof WaitOnTimeTrigger;\n\n/**\n * List of Proactive Chat Validators in order of validation (first proactive chat that pass validation is triggered, the rest are ommited)\n */\nexport const ProactiveTriggers: ProactiveChat[] = [\n DateRangeTrigger,\n SpecificPageTrigger,\n FromSpecificPageTrigger,\n PageVisitTrigger,\n SpecificCountryRegionTrigger,\n CartAmountTrigger,\n CartNumberOfItemsTrigger,\n CartSpecificProductTrigger,\n WaitOnTimeTrigger\n];\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContextUser } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/IRequestContext';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ProactiveTriggers } from '../proactive';\nimport ProactiveChatTrigger from '../proactive/triggers/proactive-chat-trigger';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { IProactiveData } from './../interfaces';\nimport { IChatContext, TContextProvider } from '../../interfaces';\n\n/**\n *\n * ContextProvider class - generates chat context, and checks for proactive triggers\n */\nclass ContextProvider {\n public data: IProactiveData;\n public props: IPvaChatConnectorViewProps;\n private user: IRequestContextUser;\n private userId: string;\n private context: IChatContext;\n private provider: TContextProvider | undefined;\n\n constructor(props: IPvaChatConnectorViewProps) {\n this.props = props;\n this.user = this.props.context.request.user;\n this.userId = `dl_${uuidv4()}`;\n this.context = this._getContext();\n // Proactive Chat related data\n this.data = {\n enabled: false,\n timeout: this.props.config.proactiveOnWaitTimeSeconds || 0,\n message: this.props.config.proactiveDefaultMessage\n };\n }\n\n /**\n * Executes Proactive Chat validation\n * @returns TContextProvider - a function returning IChatContext object\n */\n public async init(): Promise {\n try {\n await this._proactiveCheck();\n } catch (e) {\n // Use ?debug=true to see telemetry\n // If previous block fails, chat will still be available (no need to display any errors to user)\n this.props.telemetry.exception(e);\n }\n return this.provider || this._getProvider();\n }\n\n /**\n * Returns TContextProvider - a function returning IChatContext object\n */\n private _getProvider(): TContextProvider {\n return () => {\n return {\n eCommerceOperatingUnitNumber: this.props.context.request.apiSettings.oun,\n eCommerceBaseUrl: this.props.context.request.apiSettings.baseUrl,\n eCommerceDataAreaId: this.props.context.request.channel?.InventLocationDataAreaId,\n UserId: this.userId,\n // eCommerceCust...\n AccountNumber: this.user.customerAccountNumber ? this.user.customerAccountNumber : 'N/A',\n Email: this.user.emailAddress ? this.user.emailAddress : 'N/A',\n FirstName: this.user.firstName ? this.user.firstName : this.props.config.anonymousUserName,\n LastName: this.user.lastName ? this.user.lastName : 'N/A',\n Name: this.user.name ? this.user.name : this.props.config.anonymousUserName,\n eCommerceCustPageURL: window.location.href,\n eCommerceCustChatType: 'pva',\n // Proactive chat\n eCommerceCustIsProactiveChat: 'False',\n eCommerceCustProactiveType: 'N/A',\n // Date Range\n eCommerceCustProactiveFromDate: 'N/A',\n eCommerceCustProactiveToDate: 'N/A',\n // From Specific Page\n eCommerceCustProactiveCameFromPage: 'N/A',\n // No. Page Visits\n eCommerceCustProactiveNumberOfVisits: 'N/A',\n // Specific CountryRegion\n eCommerceCustProactiveCountryCode: 'N/A',\n // Specific Page => eCommerceCustPageURL\n // eCommerceCustProactiveSpecificPage: 'N/A',\n // Wait On Time\n eCommerceCustProactiveTimeOnPage: 'N/A',\n // Shopping cart amount\n eCommerceCustProactiveShoppingCartAmount: 'N/A',\n // Shopping cart number of items\n eCommerceCustProactiveShoppingCartNumberOfItems: 'N/A',\n // Shopping cart specific product\n eCommerceCustProactiveShoppingCartSpecificProduct: 'N/A'\n };\n };\n }\n\n /**\n * Returns default IChatContext object\n */\n private _getContext(): IChatContext {\n return this._getProvider()();\n }\n\n /**\n * Validates proactive triggers to check if proactive chat should be initialized\n */\n private async _proactiveCheck(): Promise {\n if (this.props.config.proactiveChatEnabled) {\n for (let i = 0; i < ProactiveTriggers.length; i++) {\n const proactive = new ProactiveTriggers[i](this.props, this.context);\n // Only first detected proactive trigger gets executed\n if (await this._isProactive(proactive)) {\n this.props.context.telemetry.debug(`First detected proactive trigger to be executed: ${proactive}`);\n break;\n }\n }\n }\n }\n\n /**\n * Validates if proactive chat should be triggered for given ProactiveTrigger\n * @param proactive ProactiveChatTrigger\n * @returns boolean\n */\n private async _isProactive(proactive: ProactiveChatTrigger): Promise {\n this.data.enabled = await proactive.validate();\n if (this.data.enabled) {\n this.provider = proactive.getContextProvider();\n this.data.message = proactive.getMessage();\n }\n return this.data.enabled;\n }\n}\n\nexport default ContextProvider;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Style generating functions\n */\nimport { IAvatarStyling, IBubbleStyling, IChatCustomStyle, IChatStyling, IOtherStyling, ISuggestedActionStyling } from '../interfaces';\nimport { IMsdyn365PvaChatConnectorConfig } from '../msdyn365-pva-chat-connector.props.autogenerated';\n\nconst getChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n position: config.position || 'inherit',\n top: config.top ? config.top : 'inherit',\n right: config.right ? config.right : 'inherit',\n bottom: config.bottom ? config.bottom : 'inherit',\n left: config.left ? config.left : 'inherit',\n zIndex: 1000,\n display: 'flex',\n justifyContent: 'flex-end'\n };\n};\n\nconst getMaximizedChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig, isMobileDevice: boolean): React.CSSProperties => {\n if (isMobileDevice) {\n return {\n height: '90%',\n width: '100%',\n bottom: '0.5em',\n right: '0',\n padding: '5px'\n };\n }\n return {\n height: config.chatHeight ? config.chatHeight : '80%',\n width: config.chatWidth ? config.chatWidth : 'inherit'\n };\n};\n\nconst getChatButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: config.startChatButtonBackgroundColor || 'white',\n color: config.startChatButtonTextColor || 'inherit',\n borderColor: config.startChatButtonBorderColor || 'inherit',\n borderRadius: config.startChatButtonBorderRadius || '0px',\n borderStyle: config.startChatButtonBorderStyle || 'solid',\n borderWidth: config.startChatButtonBorderWidth ? config.startChatButtonBorderWidth : '0px',\n padding: config.storeLogoURL ? '2px 20px 2px 2px' : '10px 20px 10px 20px',\n cursor: 'pointer',\n outlineStyle: 'none',\n alignSelf: 'flex-end',\n boxShadow: '0 0 4px rgba(102,102,102,.5)',\n WebkitBoxShadow: '0 0 4px rgba(102,102,102,.5)',\n MozBoxShadow: '0 0 4px rgba(102,102,102,.5)'\n };\n};\n\nconst getButtonStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n marginRight: '12px',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n margin: '5px 12px 5px 5px',\n alignSelf: 'center',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatMessagesStyle = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean): React.CSSProperties => {\n return {\n display: minimized ? 'none' : 'block',\n backgroundColor: config.backgroundColor || 'White',\n height: '100%',\n width: '100%',\n boxSizing: 'border-box',\n position: 'relative'\n };\n};\n\nconst getChatMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n width: '100%',\n position: 'absolute',\n top: config.chatHeaderHeight ? `-${config.chatHeaderHeight}` : '',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getMinimizeButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n borderTop: 'none',\n borderLeft: 'none',\n borderRight: 'none',\n borderBottom: `solid 2px ${config.headerTextColor || 'White'}`,\n backgroundColor: 'transparent',\n padding: '5px 10px 3px 10px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getCloseButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n border: 'none',\n color: config.headerTextColor || 'White',\n backgroundColor: 'transparent',\n padding: '0px 0px 0px 7px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getChatMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n height: '100%',\n width: '100%',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n flexDirection: 'column',\n display: 'flex',\n justifyContent: 'flex-end',\n backgroundColor: config.backgroundColor || 'White'\n };\n};\n\nconst getProactiveMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n boxSizing: 'border-box',\n width: '100%',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n width: '100%',\n padding: '10px 20px',\n boxSizing: 'border-box',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n color: config.headerTextColor || 'inherit',\n cursor: 'pointer',\n padding: '5px 10px',\n outline: 'none',\n border: 'none',\n backgroundColor: config.headerBackgroundColor || 'inherit',\n borderRadius: '25px'\n };\n};\n\nconst getRedDotStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n background: 'Red',\n borderRadius: '50%',\n height: '5px',\n width: '5px',\n position: 'absolute',\n right: '10px',\n bottom: '33px'\n };\n};\n\n/**\n * Generates styles for the chat wrapper, and proactive chat parts\n * @param config IMsdyn365PvaChatConnectorConfig\n * @param minimized boolean\n * @returns IChatCustomStyle\n */\nexport const getChatStyling = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean, isMobileDevice: boolean): IChatCustomStyle => {\n return {\n ChatWrapperStyle: getChatWrapperStyle(config),\n MaximizedChatWrapperStyle: getMaximizedChatWrapperStyle(config, isMobileDevice),\n ChatButtonStyle: getChatButtonStyle(config),\n ButtonStoreLogoStyle: getButtonStoreLogoStyle(config),\n ChatStoreLogoStyle: getChatStoreLogoStyle(config),\n ChatMessagesStyle: getChatMessagesStyle(config, minimized),\n ChatMessageHeader: getChatMessageHeader(config),\n MinimizeButtonStyle: getMinimizeButtonStyle(config),\n CloseButtonStyle: getCloseButtonStyle(config),\n ChatMessageContent: getChatMessageContent(config),\n ProactiveWrapperStyle: getProactiveWrapperStyle(config),\n ProactiveMessageHeader: getProactiveMessageHeader(config),\n ProactiveMessageContent: getProactiveMessageContent(config),\n ProactiveButtonStyle: getProactiveButtonStyle(config),\n RedDotStyle: getRedDotStyle(config)\n };\n};\n\nconst fontFormat = (font?: string): string | undefined => {\n if (font && font.length > 0) {\n const arr = font.split(',');\n for (let i = 0; i < arr.length; i++) {\n arr[i] = `'${arr[i].trim()}'`;\n }\n font = arr.join(', ');\n } else {\n font = \"'Calibri', 'Helvetica Neue', 'Arial', 'sans-serif'\";\n }\n\n return font;\n};\n\nconst getBubbleStyling = (config: IMsdyn365PvaChatConnectorConfig): IBubbleStyling => {\n return {\n bubbleBackground: config.bubbleBackground || 'White',\n bubbleTextColor: config.bubbleTextColor || 'Black',\n bubbleBorderColor: config.bubbleBorderColor || '#e6e6e6',\n bubbleBorderRadius: config.bubbleBorderRadius || '2',\n bubbleBorderStyle: config.bubbleBorderStyle || 'solid',\n bubbleBorderWidth: config.bubbleBorderWidth || '1',\n bubbleFromUserBackground: config.bubbleFromUserBackground || 'White',\n bubbleFromUserTextColor: config.bubbleFromUserTextColor || 'Black',\n bubbleFromUserBorderColor: config.bubbleFromUserBorderColor || '#e6e6e6',\n bubbleFromUserBorderRadius: config.bubbleFromUserBorderRadius || '2',\n bubbleFromUserBorderStyle: config.bubbleFromUserBorderStyle || 'solid',\n bubbleFromUserBorderWidth: config.bubbleFromUserBorderWidth || '1'\n };\n};\n\n// eslint-disable-next-line complexity\nconst getOtherStyling = (config: IMsdyn365PvaChatConnectorConfig): IOtherStyling => {\n return {\n groupTimestamp: config.groupTimestamp || true,\n sendTimeout: config.sendTimeout || '20000',\n sendTimeoutForAttachments: config.sendTimeoutForAttachments || '120000',\n timestampColor: config.timestampColor || 'undefined',\n timestampFormat: config.timestampFormat || 'undefined',\n notificationDebounceTimeout: config.notificationDebounceTimeout || '400',\n hideToaster: config.hideToaster || true,\n toasterHeight: config.toasterHeight || '32',\n toasterMaxHeight: config.toasterMaxHeight || '32 * 5',\n toasterSingularMaxHeight: config.toasterSingularMaxHeight || '50',\n toastFontSize: config.toastFontSize || '87.5%',\n toastIconWidth: config.toastIconWidth || '36',\n toastSeparatorColor: config.toastSeparatorColor || '#E8EAEC',\n toastTextPadding: config.toastTextPadding || '6',\n toastErrorBackgroundColor: config.toastErrorBackgroundColor || '#FDE7E9',\n toastErrorColor: config.toastErrorColor || '#A80000',\n toastInfoBackgroundColor: config.toastInfoBackgroundColor || '#CEF1FF',\n toastInfoColor: config.toastInfoColor || '#105E7D',\n toastSuccessBackgroundColor: config.toastSuccessBackgroundColor || '#DFF6DD',\n toastSuccessColor: config.toastSuccessColor || '#107C10',\n toastWarnBackgroundColor: config.toastWarnBackgroundColor || '#FFF4CE',\n toastWarnColor: config.toastWarnColor || '#3B3A39',\n typingAnimationBackgroundImage: config.typingAnimationBackgroundImage || 'undefined',\n typingAnimationDuration: config.typingAnimationDuration || '5000',\n typingAnimationHeight: config.typingAnimationHeight || '20',\n typingAnimationWidth: config.typingAnimationWidth || '64',\n videoHeight: config.videoHeight || '270',\n markdownExternalLinkIconImage:\n config.markdownExternalLinkIconImage ||\n 'url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjUwMSA0LjUwMDE3SDEwLjc0OTVDMTEuMTYzNyA0LjUwMDE3IDExLjQ5OTUgNC44MzU5NiAxMS40OTk1IDUuMjUwMTdDMTEuNDk5NSA1LjYyOTg2IDExLjIxNzMgNS45NDM2NiAxMC44NTEzIDUuOTkzMzJMMTAuNzQ5NSA2LjAwMDE3SDcuMjQ5NzRDNi4wNzA3OSA1Ljk5OTYxIDUuMTAzNDkgNi45MDY1NiA1LjAwNzg2IDguMDYxMTJMNS4wMDAyOCA4LjIyMDAzTDUuMDAzMTIgMTYuNzUwN0M1LjAwMzQzIDE3Ljk0MTUgNS45Mjg4NSAxOC45MTYxIDcuMDk5NjYgMTguOTk0OUw3LjI1MzcxIDE5LjAwMDFMMTUuNzUxOCAxOC45ODg0QzE2Ljk0MTUgMTguOTg2OCAxNy45MTQ1IDE4LjA2MiAxNy45OTM1IDE2Ljg5MjNMMTcuOTk4NyAxNi43Mzg0VjEzLjIzMjFDMTcuOTk4NyAxMi44MTc5IDE4LjMzNDUgMTIuNDgyMSAxOC43NDg3IDEyLjQ4MjFDMTkuMTI4NCAxMi40ODIxIDE5LjQ0MjIgMTIuNzY0MyAxOS40OTE4IDEzLjEzMDNMMTkuNDk4NyAxMy4yMzIxVjE2LjczODRDMTkuNDk4NyAxOC43NDA3IDE3LjkyOTMgMjAuMzc2OSAxNS45NTI4IDIwLjQ4MjlMMTUuNzUzOCAyMC40ODg0TDcuMjU4MjcgMjAuNTAwMUw3LjA1NDk1IDIwLjQ5NDlDNS4xNDIzOSAyMC4zOTU0IDMuNjA4OTUgMTguODYyNyAzLjUwODM3IDE2Ljk1MDJMMy41MDMxMiAxNi43NTExTDMuNTAwODkgOC4yNTI3TDMuNTA1MjkgOC4wNTAyQzMuNjA1MzkgNi4xMzc0OSA1LjEzODY3IDQuNjA0NDkgNy4wNTA5NiA0LjUwNTI3TDcuMjUwMSA0LjUwMDE3SDEwLjc0OTVINy4yNTAxWk0xMy43NDgxIDMuMDAxNDZMMjAuMzAxOCAzLjAwMTk3TDIwLjQwMTQgMy4wMTU3NUwyMC41MDIyIDMuMDQzOTNMMjAuNTU5IDMuMDY4MDNDMjAuNjEyMiAzLjA5MTIyIDIwLjY2MzQgMy4xMjE2MyAyMC43MTExIDMuMTU4ODVMMjAuNzgwNCAzLjIyMTU2TDIwLjg2NDEgMy4zMjAxNEwyMC45MTgzIDMuNDEwMjVMMjAuOTU3IDMuNTAwNTdMMjAuOTc2MiAzLjU2NDc2TDIwLjk4OTggMy42Mjg2MkwyMC45OTkyIDMuNzIyODJMMjAuOTk5NyAxMC4yNTU0QzIwLjk5OTcgMTAuNjY5NiAyMC42NjM5IDExLjAwNTQgMjAuMjQ5NyAxMS4wMDU0QzE5Ljg3IDExLjAwNTQgMTkuNTU2MiAxMC43MjMyIDE5LjUwNjUgMTAuMzU3MUwxOS40OTk3IDEwLjI1NTRMMTkuNDk4OSA1LjU2MTQ3TDEyLjI3OTcgMTIuNzg0N0MxMi4wMTM0IDEzLjA1MSAxMS41OTY4IDEzLjA3NTMgMTEuMzAzMSAxMi44NTc1TDExLjIxOSAxMi43ODQ5QzEwLjk1MjcgMTIuNTE4NyAxMC45Mjg0IDEyLjEwMjEgMTEuMTQ2MiAxMS44MDg0TDExLjIxODggMTEuNzI0M0wxOC40MzY5IDQuNTAxNDZIMTMuNzQ4MUMxMy4zNjg0IDQuNTAxNDYgMTMuMDU0NiA0LjIxOTMxIDEzLjAwNSAzLjg1MzI0TDEyLjk5ODEgMy43NTE0NkMxMi45OTgxIDMuMzcxNzcgMTMuMjgwMyAzLjA1Nzk3IDEzLjY0NjQgMy4wMDgzMUwxMy43NDgxIDMuMDAxNDZaIiBmaWxsPSIjMjEyMTIxIiAvPjwvc3ZnPg==)',\n markdownRespectCRLF: config.markdownRespectCRLF || 'true',\n internalLiveRegionFadeAfter: config.internalLiveRegionFadeAfter || '1000',\n accent: config.accent || '#0063B1',\n subtle: config.subtle || '#767676'\n };\n};\n\nconst getAvatarStyling = (config: IMsdyn365PvaChatConnectorConfig): IAvatarStyling => {\n return {\n avatarBorderRadius: config.avatarBorderRadius || '50%',\n avatarSize: config.avatarSize || '40',\n botAvatarBackgroundColor: config.botAvatarBackgroundColor || 'undefined',\n botAvatarImage: config.botAvatarImage || '',\n botAvatarInitials: config.botAvatarInitials || '',\n userAvatarBackgroundColor: config.userAvatarBackgroundColor || 'undefined',\n userAvatarImage: config.userAvatarImage || '',\n userAvatarInitials: config.userAvatarInitials || '',\n showAvatarInGroup: config.showAvatarInGroup || 'status'\n };\n};\n\nconst getSuggestedActionStyling = (config: IMsdyn365PvaChatConnectorConfig): ISuggestedActionStyling => {\n return {\n suggestedActionLayout: config.suggestedActionLayout || 'carousel',\n suggestedActionBackground: config.suggestedActionBackground || 'White',\n suggestedActionTextColor: config.suggestedActionTextColor || '',\n suggestedActionBorderColor: config.suggestedActionBorderColor || '',\n suggestedActionBorderRadius: config.suggestedActionBorderRadius || '0',\n suggestedActionBorderStyle: config.suggestedActionBorderStyle || 'solid',\n suggestedActionBorderWidth: config.suggestedActionBorderWidth || '2',\n suggestedActionDisabledBorderStyle: config.suggestedActionDisabledBorderStyle || 'solid',\n suggestedActionDisabledBorderWidth: config.suggestedActionDisabledBorderWidth || '2',\n suggestedActionDisabledTextColor: config.suggestedActionDisabledTextColor || '',\n suggestedActionHeight: config.suggestedActionHeight || '40',\n suggestedActionImageHeight: config.suggestedActionImageHeight || '20',\n suggestedActionsCarouselFlipperCursor: config.suggestedActionsCarouselFlipperCursor || '',\n suggestedActionsCarouselFlipperBoxWidth: config.suggestedActionsCarouselFlipperBoxWidth || '40',\n suggestedActionsCarouselFlipperSize: config.suggestedActionsCarouselFlipperSize || '20',\n suggestedActionsFlowMaxHeight: config.suggestedActionsFlowMaxHeight || '',\n suggestedActionsStackedHeight: config.suggestedActionsStackedHeight || '',\n suggestedActionsStackedOverflow: config.suggestedActionsStackedOverflow || '2',\n suggestedActionsStackedLayoutButtonMaxHeight: config.suggestedActionsStackedLayoutButtonMaxHeight || '',\n suggestedActionsStackedLayoutButtonTextWrap: config.suggestedActionsStackedLayoutButtonTextWrap || false\n };\n};\n\n/**\n * Generates style options for the Botframework-WebChat widget\n * @param config IMsdyn365PvaChatConnectorConfig\n * @returns IChatStyling\n */\nexport const getChatStyleOptions = (config: IMsdyn365PvaChatConnectorConfig): IChatStyling => {\n const bubbleStyling = getBubbleStyling(config);\n const avatarStyling = getAvatarStyling(config);\n const suggestedActionStyling = getSuggestedActionStyling(config);\n const otherStyling = getOtherStyling(config);\n return {\n hideUploadButton: true,\n primaryFont: fontFormat(config.primaryFont),\n backgroundColor: config.backgroundColor || 'White',\n ...bubbleStyling,\n ...avatarStyling,\n ...suggestedActionStyling,\n ...otherStyling\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\nimport { IAction, IDispatch, INext } from '../interfaces';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\n\nexport class CommerceChatStore {\n private props: IPvaChatConnectorViewProps;\n private setNewMessageAction: React.Dispatch>;\n private provider?: TContextProvider;\n\n /**\n * Gets conversation token\n * @param props IPvaChatConnectorViewProps\n */\n public static async getDirectLineToken(props: IPvaChatConnectorViewProps): Promise {\n if (props.config.powervaDirectlineTokenURL && props.config.botID && props.config.tenantID) {\n // use direct line token url, bot id and tenant id from module config to get conversation token\n const url = `${props.config.powervaDirectlineTokenURL}?botId=${props.config.botID}&tenantId=${props.config.tenantID}`;\n const options = { method: 'GET' };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n // use direct line token url, bot id and tenant id from app config to get conversation token\n const url = `${props.context.app.config.pvaChatConnectorPowervaDirectlineTokenURL}?botId=${props.context.app.config.pvaChatConnectorBotID}&tenantId=${props.context.app.config.pvaChatConnectorTenantID}`;\n const options = {\n method: 'GET'\n };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n /**\n * Creates a new instance of commerce store for WebChat\n * @param props IPvaChatConnectorViewProps\n * @param provider TContextProvider\n * @param setNewMessage React.Dispatch>\n */\n constructor(\n props: IPvaChatConnectorViewProps,\n provider: TContextProvider | undefined,\n setNewMessage: React.Dispatch>\n ) {\n this.props = props;\n this.provider = provider;\n this.setNewMessageAction = setNewMessage;\n }\n\n /**\n * Handles custom chat actions\n * @param param0 {\n * dispatch: IDispatch;\n * next: INext;\n * action: IAction;\n * }\n */\n public async actionHandler({ dispatch, next, action }: { dispatch: IDispatch; next: INext; action: IAction }): Promise {\n const atype = action.type;\n\n switch (atype) {\n case 'DIRECT_LINE/CONNECT_FULFILLED': {\n // sets language\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'webchat/join',\n value: { language: window.navigator.language }\n }\n });\n break;\n }\n case 'DIRECT_LINE/INCOMING_ACTIVITY': {\n const activity = action.payload.activity;\n if (activity?.from?.role === 'bot') {\n // Sets flag for new message (will be use to indicate new messages from bot when chat is minimized)\n this.setNewMessageAction(true);\n }\n break;\n }\n case 'DIRECT_LINE/POST_ACTIVITY_FULFILLED': {\n switch (action.payload.activity.name) {\n case 'webchat/join':\n {\n if (this.provider !== undefined) {\n // Sets Chat Context\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'pvaSetContext',\n value: this.provider()\n }\n });\n }\n }\n break;\n case 'pvaSetContext':\n {\n if (this.props.config.triggerQuery) {\n // Initialize chat after Chat Context is set\n dispatch({\n type: 'WEB_CHAT/SEND_MESSAGE_BACK',\n payload: {\n text: this.props.config.triggerQuery\n }\n });\n }\n }\n break;\n default: {\n // default nothing\n }\n }\n break;\n }\n default: {\n // default nothing\n }\n }\n\n return next(action);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useMemo, useState } from 'react';\nimport { getChatStyleOptions } from '../helpers/StyleComposers';\nimport { IChatCoreProps, IAction, IDispatch } from '../interfaces';\nimport { CommerceChatStore } from '../helpers/CommerceChatStore';\n\n/**\n * Just a core Chat component\n * @param props\n */\n\nconst ChatCore: FunctionComponent = (props: IChatCoreProps) => {\n const { ReactWebChat } = window.WebChat;\n\n const [userId, setUserId] = useState('');\n useMemo(() => {\n if (props.provider) {\n const ctx = props.provider();\n if (ctx.UserId) {\n setUserId(typeof ctx.UserId === 'string' ? ctx.UserId : ctx.UserId.value.toString());\n }\n }\n }, [props.provider]);\n\n const directLine = useMemo(() => {\n return window.WebChat.createDirectLine({ token: props.directLineToken });\n }, [props.directLineToken]);\n\n const commerceChatStore = useMemo(() => {\n if (directLine && props.provider) {\n return new CommerceChatStore(props.config, props.provider, props.setNewMessage);\n }\n return undefined;\n }, [props.provider, directLine]);\n\n const store = useMemo(() => {\n return window.WebChat.createStore(\n {},\n ({ dispatch }: { dispatch: IDispatch }) => (next: (action: IAction) => IDispatch) => (action: IAction) => {\n commerceChatStore?.actionHandler({ dispatch, next, action });\n }\n );\n }, [commerceChatStore]);\n const styleOptions = getChatStyleOptions(props.config.config);\n\n return props.directLineToken !== '' ? (\n \n ) : (\n

Please wait while we are connecting.

\n );\n};\n\nexport default ChatCore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useEffect, useState } from 'react';\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport ContextProvider from '../helpers/ContextProvider';\nimport { getChatStyling } from '../helpers/StyleComposers';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { CommerceChatStore } from '../helpers';\nimport ChatCore from './ChatCore';\n\nconst INVALID_TOKEN = 'INVALID_TOKEN';\nconst CLOSE_IMG_DATA =\n 'M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4 L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1 c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1 c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z';\n\n/**\n * Outer chat component, displays chat button, and proactive chat, and handles custom actions\n * @param props IPvaChatConnectorViewProps\n */\nconst Chat: FunctionComponent = (props: IPvaChatConnectorViewProps) => {\n const [loaded, setLoaded] = useState(false); // loaded & minimized are needed as ChatWidget should not be removed from DOM (it resets chat)\n const [minimized, setMinimized] = useState(true);\n const [newMessage, setNewMessage] = useState(false); // TODO: use this to indicate new message in minimized chat\n const [token, setToken] = useState(''); // holds conversation token for WebChat\n const [isProactive, setIsProactive] = useState(false); // if proactive chat is triggered\n const [proactiveMessage, setProactiveMessage] = useState(props.config.proactiveDefaultMessage);\n const [closed, setClosed] = useState(false);\n const [provider, setProvider] = useState();\n const isMobileDevice =\n isMobile({ variant: VariantType.Browser, context: props.context.request }) === 'xs' ||\n isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n const chatStyle = getChatStyling(props.config, minimized, isMobileDevice); // generates chat style objects based on configuration\n const handleMaximizeButtonClick = () => {\n setLoaded(true);\n setMinimized(false);\n setNewMessage(false);\n };\n const handleMinimizeButtonClick = () => {\n setMinimized(true);\n setNewMessage(false);\n };\n const handleCloseButtonClick = () => {\n setClosed(true);\n setLoaded(false);\n setMinimized(true);\n setNewMessage(false);\n setIsProactive(false);\n };\n useEffect(() => {\n if (loaded) {\n CommerceChatStore.getDirectLineToken(props)\n .then(directLineToken => {\n setToken(directLineToken);\n })\n .catch(e => {\n setToken(INVALID_TOKEN);\n props.telemetry.exception(e);\n });\n }\n }, [loaded]);\n useEffect(() => {\n (async () => {\n const contextProvider = new ContextProvider(props); // Generates context (provider) and checks for proactive chat triggers\n const prov = await contextProvider.init();\n if (contextProvider.data.enabled) {\n props.context.telemetry.debug(`[Chat] Proactive chat was enabled: '${contextProvider.data.enabled}'.`);\n // if proactive chat is triggered\n const timeout = contextProvider.data.timeout * 1000; // timeout is there only for WaitOnTime trigger\n setTimeout(() => {\n if (!loaded) {\n props.context.telemetry.debug(`[Chat] Proactive chat was loaded: ${loaded}.`);\n setProactiveMessage(contextProvider.data.message);\n setIsProactive(true);\n }\n }, timeout);\n }\n setProvider(() => prov);\n })().catch(e => props.telemetry.exception(e));\n }, []);\n useEffect(() => {\n if (closed) {\n setClosed(false);\n }\n }, [token, provider]);\n const isValidToken = (): boolean => {\n return `${token}` !== INVALID_TOKEN;\n };\n return (\n \n {minimized && (!isProactive || (isProactive && loaded)) && (\n \n )}\n {minimized && isProactive && !loaded && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n
\n
\n

{proactiveMessage}

\n \n
\n
\n )}\n {loaded && isValidToken() && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n \n
\n
\n \n
\n
\n )}\n {!isValidToken() &&
{props.config.unableToLoadChatMessage}
}\n
\n );\n};\n\nexport default Chat;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport Chat from './components/Chat';\nimport { IPvaChatConnectorViewProps } from './msdyn365-pva-chat-connector';\n\nexport default (props: IPvaChatConnectorViewProps) => {\n // Only for CDN loading check, won't be needed with npm package of Botframework-WebChat\n const [loaded, setLoaded] = React.useState(false);\n const p = {\n ...props\n };\n\n // Just to verify that CDN Chat Widget js lib is loaded\n // Remove this block if moving to npm package of Botframework-WebChat\n const interval = setInterval(() => {\n const t = typeof window;\n if (t !== 'undefined' && window.WebChat) {\n setLoaded(true);\n clearInterval(interval);\n }\n }, 100);\n\n return
{loaded && }
;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICookieComplianceAcceptButton {\n acceptCookiesButtonText?: string;\n acceptCookiesButtonAriaLabel?: string;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const CookieComplianceAcceptButton: React.FC = ({\n acceptCookiesButtonText,\n acceptCookiesButtonAriaLabel,\n telemetryContent,\n onClose\n}) => {\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, 'accept cookies');\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n {acceptCookiesButtonText}\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 * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IActionLinksData } from '../cookie-compliance.props.autogenerated';\n\nexport interface ICookieComplianceLinks {\n links: IActionLinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent}\n */\nexport class CookieComplianceLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n }\n\n private readonly _mapEditableLinks = (linkdata: IActionLinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\n\nexport default CookieComplianceLinks;\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IAlertProps, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { CookieComplianceAcceptButton, CookieComplianceLinks } from './components';\nimport { ICookieComplianceConfig, ICookieComplianceProps } from './cookie-compliance.props.autogenerated';\n\n/**\n * Alert state interface.\n */\nexport interface IAlertState {\n visible: boolean;\n}\n\n/**\n * Cookie compliance view props interface.\n */\nexport interface ICookieComplianceViewProps extends ICookieComplianceProps<{}> {\n CookieComplianceBanner: IModuleProps;\n AlertProps: IAlertProps;\n Content: INodeProps;\n text?: React.ReactNode;\n links?: React.ReactNode;\n acceptButton?: React.ReactNode;\n className: string;\n onDismiss(): void;\n}\n\n/**\n *\n * CookieCompliance component.\n * @extends {React.PureComponent>}\n */\nclass CookieCompliance extends React.PureComponent, IAlertState> {\n private readonly cookieRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public constructor(props: ICookieComplianceProps) {\n super(props);\n this.state = { visible: false };\n this.cookieRef = React.createRef();\n this._onDismiss = this._onDismiss.bind(this);\n }\n\n public componentDidMount(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies && !context.request.cookies.isConsentGiven()) {\n this.setState({ visible: true });\n }\n }\n\n public render(): JSX.Element | null {\n const { config, context, resources, telemetry } = this.props;\n const { acceptCookiesButtonText, acceptCookiesAriaLabel } = resources;\n const { visible } = this.state;\n\n const isConsentGiven = context && context.request && context.request.cookies && context.request.cookies.isConsentGiven();\n let moduleConfig: ICookieComplianceConfig;\n\n try {\n moduleConfig = config;\n } catch (error) {\n telemetry.error(`Something went wrong while rendering the alert module ------${error}`);\n return
{error}
;\n }\n\n if (isConsentGiven && !visible) {\n this.props.context.telemetry.error('Cookie Compliance content is empty, module wont render.');\n return null;\n }\n\n if (!MsDyn365.msdyn365Commerce.isBrowser) {\n return <>;\n }\n\n const viewProps = {\n ...this.props,\n onDismiss: this._onDismiss,\n CookieComplianceBanner: {\n moduleProps: this.props,\n className: classnames('ms-cookie-compliance', moduleConfig.className),\n ref: this.cookieRef\n },\n AlertProps: {\n className: 'ms-cookie-compliance__container',\n color: 'white',\n fade: false\n },\n Content: {\n className: 'ms-cookie-compliance__content'\n },\n text: moduleConfig.content && (\n \n ),\n links: ArrayExtensions.hasElements(moduleConfig.actionLinks) && (\n \n ),\n acceptButton: (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles Link content change event.\n * @param linkIndex - Index of link in linkarray.\n * @returns Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.actionLinks?.[linkIndex]) {\n this.props.config.actionLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Handles content change event.\n * @param event - Event.\n */\n public handleContentChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.content = event.target.value;\n };\n\n private _onDismiss(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies) {\n context.request.cookies.setConsentCookie();\n location.reload();\n }\n this.setState({ visible: false });\n }\n}\n\nexport default CookieCompliance;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICookieComplianceViewProps } from './cookie-compliance';\n\nconst CookieComplianceView: React.FC = props => {\n const { CookieComplianceBanner, AlertProps, Content, acceptButton, text, links } = props;\n\n return (\n \n \n \n {text}\n {links}\n \n {acceptButton}\n \n \n );\n};\nexport default CookieComplianceView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IGroup,\n IGroupDelivery,\n IGroups,\n IHelp,\n IOrderDetailsViewProps,\n IOrderInformation,\n IOrderSummary,\n IPaymentMethods,\n ISalesLine\n} from '@msdyn365-commerce-modules/order-management';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport const OrderInfomation: React.FC = ({\n orderInformationProps,\n salesId,\n receiptId,\n createdDate,\n count,\n amount,\n channelReferenceId,\n channelName,\n channelAddress\n}) => (\n \n {channelName}\n {channelAddress}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n \n);\n\nexport const SalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton, errors }) => (\n \n {salesLine}\n {buyAgainButton}\n {errors}\n \n);\n\nexport const GroupDelivery: React.FC = ({ deliveryProps, heading, count }) => (\n \n {heading}\n {count}\n \n);\n\nexport const Group: React.FC = ({ groupProps, delivery, address, salesLinesProps, salesLines, isCashAndCarryTransaction }) => (\n \n {delivery && }\n \n {salesLines && (\n \n {salesLines.map(salesLine => (\n \n {salesLine.data.deliveryType === 'ship' && salesLine.data.shipment ? salesLine.trackingInfo : null}\n \n {!isCashAndCarryTransaction && salesLine.salesStatus}\n \n ))}\n \n )}\n {!delivery.showTimeslot && address}\n {delivery.showTimeslot && (\n \n {address}\n {delivery.pickupDateTimeslot}\n \n )}\n \n \n);\n\nexport const Groups: React.FC = ({ groupsProps, groups }) => (\n \n {groups.map((group, index) => (\n \n ))}\n \n);\n\nexport const OrderSummary: React.FC = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n \n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n \n);\n\nexport const Payment: React.FC = ({ paymentMethodsProps, title, methods }) => (\n \n {title}\n {methods}\n \n);\n\nexport const Help: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n \n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n \n);\n\nconst OrderDetailsView: React.FC = ({\n moduleProps,\n viewModes,\n tableViewActions,\n table,\n placedBy,\n heading,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n \n {placedBy}\n {heading}\n {alert}\n {loading}\n {orderInfomation && }\n {tableViewActions}\n {viewModes}\n {table}\n {groups && }\n \n {orderSummary && }\n {payment && }\n \n {help && }\n \n );\n};\n\nexport default OrderDetailsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Heading, IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IHeadingData, IIframeConfig, IIframeProps } from './iframe.props.autogenerated';\n\nexport interface IIframeViewProps extends IIframeProps {\n Heading: React.ReactNode;\n IframeContainer: IModuleProps;\n IFrame: React.ReactNode;\n alert?: React.ReactNode;\n cookieConsentAccepted?: boolean;\n}\n\n/**\n *\n * Iframe component.\n * @extends {React.PureComponent}\n */\nclass Iframe extends React.PureComponent> {\n private readonly iframeRef: React.RefObject;\n\n constructor(props: IIframeProps) {\n super(props);\n this.iframeRef = React.createRef();\n }\n\n public render(): JSX.Element | null {\n const { config, resources } = this.props;\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n if (!(config && config.target && config.target.destinationUrl)) {\n return null;\n }\n\n let srcURL;\n try {\n srcURL = new URL(config.target.destinationUrl);\n } catch (error) {\n this.props.telemetry.exception(error);\n return null;\n }\n\n if (srcURL && srcURL.protocol && srcURL.protocol.toLocaleLowerCase() !== 'https:') {\n return null;\n }\n const iframeClassName = classnames('ms-iframe', config.className);\n\n let viewProps: IIframeViewProps = {\n ...(this.props as IIframeProps),\n Heading: this._createHeading(config.heading!),\n IframeContainer: {\n moduleProps: this.props,\n className: iframeClassName\n },\n IFrame: this._createIframe()\n };\n\n if (!isConsentGiven) {\n viewProps = {\n ...viewProps,\n alert: this._renderAlert(resources.cookieConsentRequiredMessage)\n };\n } else {\n viewProps = {\n ...viewProps,\n cookieConsentAccepted: true\n };\n }\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\n if (!heading || !heading.text || heading.text.length === 0) {\n return null;\n }\n\n return ;\n }\n\n private _renderAlert(message: string): React.ReactNode | null {\n return (\n

\n {message}\n

\n );\n }\n\n private _createIframe(): React.ReactNode | null {\n const { config } = this.props;\n const targetURL = config.target.destinationUrl;\n\n return (\n \n );\n }\n}\n\nexport default Iframe;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IIframeViewProps } from './iframe';\n\n/**\n *\n * IFrameView component.\n * @extends {React.PureComponent}\n */\nexport class IFrameView extends React.PureComponent {\n public render(): JSX.Element | null {\n const { Heading, IframeContainer, IFrame, alert, cookieConsentAccepted } = this.props;\n\n return (\n \n {alert}\n {cookieConsentAccepted && cookieConsentAccepted ? (\n <>\n {Heading}\n {IFrame}\n \n ) : null}\n \n );\n }\n}\nexport default IFrameView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Store Pickup option list interface.\n */\nexport interface IStorePickUpOptionListProps {\n productPickupListOptionMenuText?: string;\n productPickupModeList?: DeliveryOption[];\n defaultOptionText?: string;\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Store Pickup option state interface.\n */\nexport interface IStorePickOptionListState {\n isFilterExpanded: boolean;\n selectedPickupMode?: string;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class StorePickUpOptionList extends React.PureComponent {\n private readonly _storePickupListOptionMenu: React.RefObject;\n\n public constructor(props: IStorePickUpOptionListProps) {\n super(props);\n this._storePickupListOptionMenu = React.createRef();\n this.state = {\n isFilterExpanded: false,\n selectedPickupMode: ''\n };\n }\n\n public render(): JSX.Element {\n const { productPickupListOptionMenuText, productPickupModeList, defaultOptionText } = this.props;\n const selectedPickupModeDesc = defaultOptionText\n ? defaultOptionText\n : productPickupModeList?.find((delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\n const role = 'menu';\n return (\n
\n \n {this.state.isFilterExpanded ? (\n
    \n {productPickupModeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Method to call when drop dwon get selected.\n */\n private readonly _rendeDeliveryOptions = () => {\n const isExpandOptionsState = this.state.isFilterExpanded;\n this.setState({\n isFilterExpanded: !isExpandOptionsState\n });\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onKeyDown = async (event: React.KeyboardEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\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 { DeliveryOption, ItemAvailability, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources } from '../store-selector.props.autogenerated';\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './store-selector-location-line-item';\n\n/**\n * Store selector location lines props interface.\n */\nexport interface IStoreSelectorLocationLinesProps {\n locations?: IFullOrgUnitAvailability[];\n resources: IStoreSelectorResources;\n preferredDistanceUnit?: string;\n\n alreadySelectedLocation?: OrgUnitLocation;\n outOfStockThreshold: number;\n enableOutOfStockCheck: boolean;\n storeLocatorView?: boolean;\n selectedStoreLocationId?: string;\n isPreferredStoreEnabled?: boolean;\n displayList?: boolean;\n isLocationDisabled?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n onClick: (locationId: string | undefined) => void;\n preferredStoreLocationId: string | null;\n onSetAsPreferredStore: (locationId: string | undefined) => void;\n onRemovePreferredStore: () => void;\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onLocationSelected(location: OrgUnitLocation | undefined): void;\n}\n\n/**\n * Displays all the location line items, or null if none exists.\n */\n@observer\nexport class StoreSelectorLocationLines extends React.PureComponent {\n @observable private _stores: IFullOrgUnitAvailability[] | undefined;\n\n private readonly selectedLocationRef: React.RefObject;\n\n private storeCounter: number;\n\n public constructor(props: IStoreSelectorLocationLinesProps) {\n super(props);\n this.selectedLocationRef = React.createRef();\n this.storeCounter = 0;\n }\n\n public componentDidUpdate(previousProps: IStoreSelectorLocationLinesProps): void {\n if (this.props.selectedStoreLocationId !== previousProps.selectedStoreLocationId) {\n this._scrollIntoView();\n }\n }\n\n public componentDidMount(): void {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n\n reaction(\n () => this.props.locations,\n () => {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n }\n );\n }\n\n public render(): JSX.Element | null {\n if (!ArrayExtensions.hasElements(this._stores)) {\n return null;\n }\n\n this.storeCounter = 0;\n\n return (\n
\n {this._stores.map((store, index) => {\n return this._renderStoreLocation(store, index);\n })}\n
\n );\n }\n\n /**\n * On click Handler function.\n * @param orgUnitLocation -OrgUnit location.\n * @returns Click action on orgUnit Location.\n */\n private readonly onClickHandler = (orgUnitLocation: OrgUnitLocation | undefined) => () => {\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\n };\n\n private _renderStoreLocation(store: IFullOrgUnitAvailability, index: number): JSX.Element | undefined {\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\n const deliveryOptions = store?.OrgUnitPickUpDeliveryModes;\n const defaultAriaSetsize = 0;\n if (orgUnitLocation) {\n ++this.storeCounter;\n return (\n \n \n
\n );\n }\n return undefined;\n }\n\n /**\n * Sort store.\n * @param stores - Array of stores data.\n * @returns Sorted stores array.\n */\n private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\n /**\n * IsPreferredStore.\n * @param value - Array of stores data.\n * @returns IsPreferred store boolean value.\n */\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n this.props.isPreferredStoreEnabled &&\n this.props.preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === this.props.preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Scroll into view.\n */\n private readonly _scrollIntoView = () => {\n const selectedLocationDiv = this.selectedLocationRef.current;\n const parent = selectedLocationDiv?.parentElement;\n if (selectedLocationDiv && parent) {\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\n parent.scrollTop = selectedLocationDiv.offsetTop;\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\n }\n }\n };\n\n /**\n * Is current location.\n * @param location - Org unit location.\n * @returns The current location.\n */\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\n (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\n false;\n\n /**\n * Check the product is in stock or not.\n * @param itemAvailabilities - Item availabilities.\n * @returns If the product is in stock.\n */\n private readonly _isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\n if (!this.props.enableOutOfStockCheck) {\n return true;\n }\n\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > 0 : false;\n }\n\n return false;\n };\n\n /**\n * Get the stock inventory label.\n * @param availabilityWithHours - Full org unit availability.\n * @returns The stock label.\n */\n private readonly _stockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\n for (let i = 0; i < availabilityWithHours.ProductInventoryInformation.length; i++) {\n if (\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n availabilityWithHours.ProductInventoryInformation[i].InventLocationId\n ) {\n return availabilityWithHours.ProductInventoryInformation[i].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n\n /**\n * Map resources.\n * @param resources - Store resources.\n * @returns Resources.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n pickupDeliveryOptionErrorMessage: resources.pickupDeliveryOptionErrorMessage,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\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 * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n KeyCodes,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { StorePickUpOptionList } from './store-pickup-option-list';\n\n/**\n * Store Selector Search Form Props interface.\n */\nexport interface IStoreSelectorSearchFormProps {\n resources: {\n searchInputAriaLabel: string;\n searchButtonAriaLabel: string;\n searchPlaceholderText: string;\n seeAllStoresText: string;\n viewListText: string;\n viewMapText: string;\n pickupFilterByHeading?: string;\n pickupFilterMenuHeading?: string;\n };\n\n id: string;\n value: string;\n isMapDisabled?: boolean;\n showAllStores?: boolean;\n displayList?: boolean;\n locatorView?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n hasEnabledPickupFilterToShowStore?: boolean;\n filteredPickupMode?: string;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onShowAllStores(): void;\n onToggleListMapViewState(): void;\n performSearch(searchTerm: string): Promise;\n searchTermChanged(searchTerm: string): Promise;\n filterPickupModeSelected(pickupMode: string): void;\n}\n\n/**\n * Simple search form consisting of search text and a search button.\n */\nexport class StoreSelectorSearchForm extends React.PureComponent {\n private readonly searchBoxRef: React.RefObject = React.createRef();\n\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly showAllStoreAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly toggleMapViewAttributes: Msdyn365.IDictionary | undefined;\n\n private previousValue: string = '';\n\n private isSearchResultOpened: boolean = false;\n\n public constructor(props: IStoreSelectorSearchFormProps) {\n super(props);\n this.state = { value: '' };\n this._handleKeyPressPrev = this._handleKeyPressPrev.bind(this);\n const payLoad: IPayLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SearchStore);\n this.storeSearchAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ShowAllStore;\n this.showAllStoreAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ToggleMapView;\n this.toggleMapViewAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n const {\n resources: {\n searchButtonAriaLabel,\n searchPlaceholderText,\n seeAllStoresText,\n viewListText,\n viewMapText,\n pickupFilterByHeading,\n pickupFilterMenuHeading\n },\n id,\n value,\n isMapDisabled,\n showAllStores,\n displayList,\n locatorView,\n onShowAllStores,\n productPickUpDeliveryOptions,\n hasEnabledPickupFilterToShowStore\n } = this.props;\n\n const toggleButtonText = displayList ? viewMapText : viewListText;\n\n return (\n
\n \n
\n )}\n {this.renderPickupModesList(\n this.props,\n toggleButtonText,\n productPickUpDeliveryOptions,\n pickupFilterMenuHeading,\n locatorView,\n pickupFilterByHeading,\n hasEnabledPickupFilterToShowStore,\n displayList\n )}\n \n );\n }\n\n /**\n * Handles the key press on the input box.\n * @param event - Event object.\n */\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\n // In order to avoid that. Checking if the search result is open or not.\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\n if (activeDescedantValue) {\n if (this.previousValue === '') {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n return;\n }\n\n if (activeDescedantValue !== this.previousValue) {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n } else {\n this.isSearchResultOpened = false;\n }\n }\n }\n };\n\n /**\n * Calls method display result.\n * @param event - The first number.\n */\n private readonly _handleKeyPressPrev = (event: React.KeyboardEvent): void => {\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Space) {\n this.props.onShowAllStores();\n }\n };\n\n /**\n * Method called on search text changed.\n * @param event - Input value.\n */\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\n const inputValue: string = event.target.value;\n\n await this.props.searchTermChanged(inputValue);\n };\n\n /**\n * Method called on search submit.\n * @param event - Input value.\n */\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\n event.preventDefault(); // Prevents form submission\n this.searchBoxRef.current?.blur();\n if (!this.isSearchResultOpened) {\n await this.props.performSearch(this.props.value);\n }\n this.isSearchResultOpened = false;\n };\n\n /**\n * Method called on product pickup option change.\n * @returns - Void.\n */\n private readonly _onChangeHandler = () => async (deliveryCode: string): Promise => {\n this.props.filterPickupModeSelected(deliveryCode);\n return Promise.resolve();\n };\n\n /**\n * Method to render pickup mode list.\n * @param props - Store selector search form props.\n * @param toggleButtonText - Locator view button text.\n * @param productPickUpDeliveryOptions - Product DeliveryOption List.\n * @param pickupFilterMenuHeading - Pickup store button text.\n * @param locatorView - Locator View is on\\off.\n * @param pickupFilterByHeading - Pickup list label text.\n * @param hasEnabledPickupFilterToShowStore - Flag to check header filter is enabled.\n * @param shouldDisplayList - Display List.\n * @returns Jsx component.\n */\n private readonly renderPickupModesList = (\n props: IStoreSelectorSearchFormProps,\n toggleButtonText: string,\n productPickUpDeliveryOptions: DeliveryOption[] | undefined,\n pickupFilterMenuHeading: string | undefined,\n locatorView: boolean | undefined,\n pickupFilterByHeading: string | undefined,\n hasEnabledPickupFilterToShowStore: boolean | undefined,\n shouldDisplayList?: boolean\n ): JSX.Element | null => {\n const toggleButtonClass = shouldDisplayList ? 'view-map' : 'list-view';\n if (hasEnabledPickupFilterToShowStore) {\n return (\n
\n {locatorView && (\n \n {toggleButtonText}\n \n )}\n \n
{pickupFilterByHeading}
\n
\n );\n }\n if (locatorView) {\n return (\n \n {toggleButtonText}\n \n );\n }\n return null;\n };\n}\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 { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources, ITermsOfServiceLinkData } from '../store-selector.props.autogenerated';\n\nexport interface IStoreSelectorEmptyMessageProps {\n resources: IStoreSelectorResources;\n}\nexport const StoreSelectorEmptyMessage: React.FC = ({ resources }) => (\n
\n

{resources.emptyLocationsText}

\n
\n);\n\nexport const StoreSelectorWaiting: React.FC = () =>
;\n\nexport interface IStoreSelectorTermsOfServiceProps {\n link?: ITermsOfServiceLinkData;\n requestContext: Msdyn365.IRequestContext;\n onTextChange?(event: Msdyn365.ContentEditableEvent): void;\n}\n\nexport const StoreSelectorTermsOfService: React.FC = ({ link, requestContext, onTextChange }) => {\n if (link) {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-store-select__terms-link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link'\n };\n\n return (\n
\n \n
\n );\n }\n return null;\n};\n\nexport interface IStoreSelectorFoundLocationsMessage {\n resources: IStoreSelectorResources;\n locations?: IFullOrgUnitAvailability[];\n searchRadius: number;\n preferredDistanceUnit: string;\n isSeeAllStore: boolean;\n}\nexport const StoreSelectorFoundLocationsMessage: React.FC = ({\n locations,\n searchRadius,\n resources,\n isSeeAllStore,\n preferredDistanceUnit\n}) => {\n if (locations) {\n const storeCountMessage =\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n return (\n
\n {isSeeAllStore\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\n
\n );\n }\n\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Interface Pickup option list.\n */\nexport interface IPickUpOptionListProps {\n pickupListOptionMenuText: string;\n pickupmodeList?: DeliveryOption[];\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Interface pickup option list state.\n */\nexport interface IPickOptionListState {\n expandSiteOptions: boolean;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class PickUpOptionList extends React.PureComponent {\n private readonly _pickupListOptionMenu: React.RefObject;\n\n private readonly _pickupListOptionButton: React.RefObject;\n\n private readonly eventsToBeBind = ['click', 'touchstart'];\n\n public constructor(props: IPickUpOptionListProps) {\n super(props);\n this._renderDeliveryOptions = this._renderDeliveryOptions.bind(this);\n this._pickupListOptionMenu = React.createRef();\n this._pickupListOptionButton = React.createRef();\n this.state = {\n expandSiteOptions: false\n };\n }\n\n public componentDidMount(): void {\n for (const event of this.eventsToBeBind) {\n window.addEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public componentWillUnmount(): void {\n for (const event of this.eventsToBeBind) {\n window.removeEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public render(): JSX.Element {\n const { pickupListOptionMenuText, pickupmodeList } = this.props;\n\n return (\n
\n \n {pickupListOptionMenuText}\n \n \n {this.state.expandSiteOptions ? (\n
    \n {pickupmodeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Handle the document click.\n * @param event -- Event object.\n */\n private readonly handleDocumentClick = (event: Event): void => {\n const htmlElement = event.target as HTMLElement;\n if (\n !(\n (this._pickupListOptionButton.current !== null &&\n (event.target === this._pickupListOptionButton.current ||\n this._pickupListOptionButton.current.contains(htmlElement))) ||\n (this._pickupListOptionMenu.current !== null &&\n (event.target === this._pickupListOptionMenu.current || this._pickupListOptionMenu.current.contains(htmlElement)))\n )\n ) {\n this.setState({\n expandSiteOptions: false\n });\n }\n };\n\n private _renderDeliveryOptions(event: React.MouseEvent): void {\n event.stopPropagation();\n const isExpandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !isExpandSiteOptionsState\n });\n }\n\n /**\n * Select Delivery option.\n * @param event -- Event Object.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode && deliveryCode.length > 0) {\n await this.props.onChange(deliveryCode);\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 { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\n\nimport { IStoreSelectorLocationLineItemResources } from '.';\n\nexport interface IHoursDisplayInfo {\n startDayShort: string;\n startDayFull: string;\n endDayShort?: string;\n endDayFull?: string;\n timeRange: string;\n}\n\ninterface IHoursInfo {\n isClosed: boolean;\n openTime?: number;\n closeTime?: number;\n}\n\ntype DayType = 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN';\n\nexport const secondsToTime = (seconds: number | undefined): string | undefined => {\n if (seconds === undefined) {\n return undefined;\n }\n let hours = Math.floor(seconds / (60 * 60));\n const ampm = hours >= 12 ? 'pm' : 'am';\n hours %= 12;\n hours = hours ? hours : 12;\n const divisorForMinutes = seconds % (60 * 60);\n const minutes = Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\n return `${hours}:${minutes} ${ampm}`;\n};\n\nconst getShortTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.monday;\n case 'TUE':\n return resources.days.tuesday;\n case 'WED':\n return resources.days.wednesday;\n case 'THU':\n return resources.days.thursday;\n case 'FRI':\n return resources.days.friday;\n case 'SAT':\n return resources.days.saturday;\n default:\n // Case 'SUN':\n return resources.days.sunday;\n }\n};\n\nconst getFullTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.mondayFull;\n case 'TUE':\n return resources.days.tuesdayFull;\n case 'WED':\n return resources.days.wednesdayFull;\n case 'THU':\n return resources.days.thursdayFull;\n case 'FRI':\n return resources.days.fridayFull;\n case 'SAT':\n return resources.days.saturdayFull;\n default:\n // Case 'SUN':\n return resources.days.sundayFull;\n }\n};\n\nconst buildHoursDisplayInfo = (\n startDay: DayType,\n endDay: DayType,\n hoursInfo: string,\n resources: IStoreSelectorLocationLineItemResources\n): IHoursDisplayInfo => {\n return {\n startDayShort: getShortTimeString(startDay, resources),\n startDayFull: getFullTimeString(startDay, resources),\n endDayShort: startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,\n endDayFull: startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,\n timeRange: hoursInfo\n };\n};\n\nconst shouldMergeLines = (firstLine: IHoursInfo, secondLine: IHoursInfo): boolean => {\n if (firstLine.isClosed && secondLine.isClosed) {\n return true;\n }\n\n if (!firstLine.isClosed && !secondLine.isClosed) {\n return firstLine.openTime === secondLine.openTime && firstLine.closeTime === secondLine.closeTime;\n }\n\n return false;\n};\n\nconst getStoreHoursData = (storeHours: RegularStoreHours, dateForLookup: string): IHoursInfo => {\n return {\n isClosed: get(storeHours, `IsClosedOn${dateForLookup}`, false),\n openTime: get(storeHours, `${dateForLookup}OpenTime`, undefined),\n closeTime: get(storeHours, `${dateForLookup}CloseTime`, undefined)\n };\n};\n\nconst buildStoreHoursString = (hoursInfo: IHoursInfo, resources: IStoreSelectorLocationLineItemResources): string => {\n if (hoursInfo.isClosed) {\n return resources.closedText;\n }\n const openFrom: string | undefined = secondsToTime(hoursInfo.openTime);\n const openTo: string | undefined = secondsToTime(hoursInfo.closeTime);\n\n return `${openFrom}–${openTo}`;\n};\n\nexport const buildStoreHours = (storeHours: RegularStoreHours, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo[] => {\n const storeHoursList: IHoursDisplayInfo[] = [];\n\n const mondayHours = getStoreHoursData(storeHours, 'Monday');\n const tuesdayHours = getStoreHoursData(storeHours, 'Tuesday');\n const wednesdayHours = getStoreHoursData(storeHours, 'Wednesday');\n const thursdayHours = getStoreHoursData(storeHours, 'Thursday');\n const fridayHours = getStoreHoursData(storeHours, 'Friday');\n const saturdayHours = getStoreHoursData(storeHours, 'Saturday');\n const sundayHours = getStoreHoursData(storeHours, 'Sunday');\n\n let periodStart: DayType = 'MON';\n let periodEnd: DayType = 'MON';\n\n if (!shouldMergeLines(mondayHours, tuesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(mondayHours, resources), resources));\n\n periodStart = 'TUE';\n }\n periodEnd = 'TUE';\n\n if (!shouldMergeLines(tuesdayHours, wednesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(tuesdayHours, resources), resources));\n\n periodStart = 'WED';\n }\n periodEnd = 'WED';\n\n if (!shouldMergeLines(wednesdayHours, thursdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(wednesdayHours, resources), resources));\n\n periodStart = 'THU';\n }\n periodEnd = 'THU';\n\n if (!shouldMergeLines(thursdayHours, fridayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(thursdayHours, resources), resources));\n\n periodStart = 'FRI';\n }\n periodEnd = 'FRI';\n\n if (!shouldMergeLines(fridayHours, saturdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(fridayHours, resources), resources));\n\n periodStart = 'SAT';\n }\n periodEnd = 'SAT';\n\n if (!shouldMergeLines(saturdayHours, sundayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(saturdayHours, resources), resources));\n\n periodStart = 'SUN';\n }\n periodEnd = 'SUN';\n\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(sundayHours, resources), resources));\n\n return storeHoursList;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\n\n/**\n * Store Locator line item resources.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n\n closedText: string;\n\n outOfStock: string;\n inStock: string;\n\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n pickupDeliveryOptionErrorMessage?: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * Store Locator line item props.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n };\n}\n\n/**\n * Store Locator line item action component.\n */\nconst storeSelectorLocationLineItemComponentActions = {\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\n props.handlers.onSelected(props.location, deliveryMode);\n },\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\n },\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onRemovePreferredStore();\n }\n};\n\n/**\n * Function to render store hours.\n * @param storeHours - Store Hours object.\n * @param location - Store Unit.\n * @param resources - Resources.\n * @returns - Jsx element.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n location: OrgUnitLocation,\n resources: IStoreSelectorLocationLineItemResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day houts\n if (storeHours?.RegularStoreHours) {\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\n\n return (\n
\n {storeHoursList.map(displayTime => (\n
\n {displayTime.endDayShort ? (\n
\n {displayTime.startDayShort}–\n {displayTime.endDayShort}\n
\n ) : (\n
\n {displayTime.startDayShort}\n
\n )}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string | undefined = secondsToTime(location.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\n\n return (\n
\n {storeOpenFrom}-{storeOpenTo}\n
\n );\n};\n\n/**\n * Function to return distance measure unit.\n * @param distance - Store location within radius.\n * @param preferredDistanceUnit - Unit configuration.\n * @param isLocationDisabled - Flag to check user location.\n * @returns - Unit of distance.\n */\nexport const buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n isLocationDisabled?: boolean\n): string | undefined => {\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < 1) {\n return `(<1 ${preferredDistanceUnit})`;\n }\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\n};\n\n/**\n * Function to store contact.\n * @param contacts - Store location within radius.\n * @returns - Return primary contact number of store.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\n return Promise.resolve();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: IStoreSelectorLocationLineItemProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns DeliveryOptionList.\n */\nexport const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n const deliveryOption: DeliveryOption[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n });\n\n return deliveryOption;\n};\n\n/**\n * Renders store location line items.\n * @param props - Store location line items props.\n * @returns - HTML.\n */\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\n const {\n hideStockStatus,\n isCurrentLocation,\n isInStock,\n location,\n resources,\n storeHours,\n stockStatusLabel,\n storeLocatorView,\n index,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n shouldShowIndex\n } = props;\n\n const storeName: string | undefined = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = hideStockStatus || isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [isError, setError] = React.useState(false);\n\n const pickUpButtonClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n if (deliveryOptionList.length === 0) {\n setError(true);\n } else {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\n }\n };\n\n /* eslint-disable prettier/prettier */\n return (\n
\n
\n {(shouldShowIndex || storeLocatorView) && {index}}\n {storeName}\n {distanceAsString ? \n {' '}\n {distanceAsString}\n : false}\n
\n
\n
\n

{resources.contactInfoHeader}

\n {storeAddress && (\n
\n \n {storeAddress}\n
\n )}\n {phoneNumber && (\n
\n \n {phoneNumber}\n
\n )}\n
\n
\n

{resources.storeHoursHeader}

\n {renderStoreHours(storeHours, location, resources)}\n
\n {!storeLocatorView && (\n
\n {!hideStockStatus &&

{resources.availabilityInfoHeader}

}\n {stockText &&

{stockText}

}\n {isCurrentLocation ? (\n

{resources.currentLocation}

\n ) : canSelectLocation ? (\n deliveryOptionList.length === 0 ? (\n \n {pickupInStoreButtonText}\n \n ) : (\n renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel)\n )\n ) : (\n false\n )}\n
\n )}\n {isPreferredStoreEnabled ? (\n isPreferredStore ? (\n \n {resources.preferredStoreText}\n \n ) : (\n \n {resources.setAsPreferredStoreText}\n \n )\n ) : null}\n
\n {isError ? (\n \n \n ) : ('')}\n
\n );\n};\n\n/**\n * Store location line item component.\n */\nexport const StoreSelectorLocationLineItemComponent = storeSelectorLocationLineItem as (\n props: IStoreSelectorLocationLineItemProps\n) => JSX.Element;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildDistanceString, matchDeliveryOptions } from '../store-selector-location-line-item';\n\n/**\n * Store Locator line item resources.\n */\nexport interface ISelectedStoreResources {\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreProps {\n className?: string;\n shouldHideStockStatus?: boolean;\n isCurrentLocation?: boolean;\n isInStock?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n resources: ISelectedStoreResources;\n stockStatusLabel?: string;\n preferredStoreLocationId: string | null;\n isPreferredStoreEnabled?: boolean;\n isLocationDisabled?: boolean;\n telemetryContent?: ITelemetryContent;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n preferredDistanceUnit: string;\n filteredPickupMode?: string;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreViewProps {\n isCurrentLocation?: boolean;\n canSelectLocation?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n deliveryOptions?: DeliveryOption[];\n isPreferredStore?: boolean;\n resources: ISelectedStoreResources;\n\n storeDetailsMain: INodeProps;\n storeHeader: INodeProps;\n storeName: React.ReactNode;\n storeDistance: React.ReactNode;\n storeDetailsAvailabilityContainer: INodeProps;\n productAvailability: React.ReactNode;\n stockStatus: React.ReactNode;\n currentLocation: React.ReactNode;\n pickUpDeliveryOptionButton: React.ReactNode;\n pickupModes?: React.ReactNode;\n preferredStoreButton?: React.ReactNode;\n removePreferredStoreButton?: React.ReactNode;\n storeDetailsCloseButton?: React.ReactNode;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupInStoreClickHandler = (props: ISelectedStoreProps) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation);\n }\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onSetAsPreferredStore(props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: ISelectedStoreProps) => async (deliveryCode: string): Promise => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, deliveryCode);\n }\n return Promise.resolve();\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onRemovePreferredStore();\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: ISelectedStoreProps, pickupMode?: string) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, pickupMode);\n }\n};\n\n/**\n * On store details close functionality.\n * @param props -Store locator location items.\n * @returns Void promise.\n */\nconst storeDetailsModalHandler = (props: ISelectedStoreProps) => async (): Promise => {\n await props.handlers.closeStoreDetailsModal();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: ISelectedStoreProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Renders selected store details.\n * @param props - Store location details props.\n * @returns - Selected Store view props.\n */\nconst selectedStoreDetails = (props: ISelectedStoreProps): ISelectedStoreViewProps => {\n const {\n className,\n shouldHideStockStatus,\n isCurrentLocation,\n isInStock,\n selectedStore,\n resources,\n stockStatusLabel,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n preferredDistanceUnit\n } = props;\n\n const parentClassName = className ? className : 'ms-store-select__map__selected_store';\n const storeName: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\n const location = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const distanceAsString: string | undefined = buildDistanceString(location?.Distance, preferredDistanceUnit, isLocationDisabled);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n // eslint-disable-next-line no-nested-ternary -- Required to check stock Label\n const stockText: string | undefined = shouldHideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = !shouldHideStockStatus && isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\n const isPreferredStore = preferredStoreLocationId === location?.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n\n const viewProps: ISelectedStoreViewProps = {\n selectedStore,\n isCurrentLocation,\n canSelectLocation,\n isPreferredStore,\n resources,\n deliveryOptions: deliveryOptionList,\n storeDetailsMain: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__main`\n },\n storeHeader: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__header`\n },\n storeName: {storeName},\n storeDetailsCloseButton: \n ),\n pickupModes: renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel),\n preferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.preferredStoreText}\n \n ) : null,\n removePreferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.setAsPreferredStoreText}\n \n ) : null,\n handlers: {\n onSelected: props.handlers.onSelected,\n onSetAsPreferredStore: props.handlers.onSetAsPreferredStore,\n onRemovePreferredStore: props.handlers.onRemovePreferredStore,\n closeStoreDetailsModal: props.handlers.closeStoreDetailsModal\n }\n };\n\n return viewProps;\n};\n\n/**\n * Store location line item component.\n */\nexport const SelectedStoreComponent = selectedStoreDetails as (props: ISelectedStoreProps) => ISelectedStoreViewProps;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/// \n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreInfo, IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n getOrgUnitLocationsByArea,\n GetOrgUnitLocationsByAreaInput,\n IFullOrgUnitAvailability\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n NodeTag,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n StoreSelectorEmptyMessage,\n StoreSelectorFoundLocationsMessage,\n StoreSelectorLocationLines,\n StoreSelectorSearchForm,\n StoreSelectorTermsOfService,\n StoreSelectorWaiting\n} from './components';\nimport { ISelectedStoreProps, ISelectedStoreViewProps, SelectedStoreComponent } from './components/selected-store/selected-store';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './components/store-selector-location-line-item/date-time-helpers';\nimport { IStoreSelectorData } from './store-selector.data';\nimport {\n IStoreSelectorProps,\n IStoreSelectorResources,\n mode as modeEnum,\n searchRadiusUnit as SearchRadiusUnit,\n style as styleEnum\n} from './store-selector.props.autogenerated';\n\n/**\n * StoreSelector State Interface.\n */\nexport interface IStoreSelectorState {\n isSearchInProgress: boolean;\n searchTerm?: string;\n isSeeAllStoreValue: boolean;\n isLocationDisabled?: boolean;\n filteredPickupMode?: string;\n}\n\n/**\n * StoreSelector View Props Interface.\n */\nexport interface IStoreSelectorViewProps extends IStoreSelectorProps {\n state: IStoreSelectorState;\n\n // Containers:\n ModuleProps: IModuleProps;\n BodyContainerProps: INodeProps;\n FooterContainerProps: INodeProps;\n HeaderContainerProps: INodeProps;\n HeaderProps?: React.ReactNode;\n\n // Components\n locationsMessage?: React.ReactNode;\n search?: React.ReactNode;\n spinner?: React.ReactNode;\n locationsList?: React.ReactNode;\n selectedLocation?: ISelectedStoreViewProps;\n noLocationsMessage?: React.ReactNode;\n terms?: React.ReactNode;\n headerText?: React.ReactNode;\n sortLocations?: IFullOrgUnitAvailability[];\n locationListProps?: IStoreSelectorLocationLineItemProps[];\n bodyWrapperProps?: INodeProps;\n storeResultContainerProps?: INodeProps;\n mapContainerProps?: INodeProps;\n maps?: React.ReactNode;\n isMobileView?: boolean;\n storeDetailsModal?: INodeProps;\n\n callbacks: {\n closeDialog(): Promise;\n searchTermChanged(searchTerm: string): Promise;\n performSearch(searchTerm: string): Promise;\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\n getAndUpdateUserLocation(): Promise;\n attachMapAutoSuggest(): Promise;\n onSuggestionSelected(result: Microsoft.Maps.ISuggestionResult): Promise;\n setPreferredStore(storeId: string | undefined): Promise;\n removePreferredStore(): Promise;\n setSelectedStore(storeId: string | undefined): Promise;\n setOrgUnitStoreInformation(location: OrgUnitLocation | undefined): Promise;\n };\n}\n\n/**\n * StoreSelectorLocation Line Resources Interface.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * ILocationHours Interface.\n */\nexport interface ILocationHours {\n openFrom?: string;\n openTo?: string;\n}\n\n/**\n * StoreSelectorLocation Line Item Props Interface.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n storeHoursList?: IHoursDisplayInfo[];\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n selectedStoreLocationId?: string;\n locationOpen?: ILocationHours;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n onClick: (locationId: string | undefined) => void;\n}\n\n/**\n *\n * Pick Up In Store module.\n * @extends React.Component>}\n */\n@observer\nclass StoreSelector extends React.Component, IStoreSelectorState> {\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private storeCounter: number;\n\n private isPreferredStoreEnabled?: boolean;\n\n public constructor(props: IStoreSelectorProps) {\n super(props);\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.state = { isSearchInProgress: true, searchTerm: '', isSeeAllStoreValue: false, filteredPickupMode: undefined };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.storeCounter = 0;\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\n } = this.props;\n\n // Adding Timeout to make sure it loads the data based upon the preferred store.\n setTimeout(() => {\n this._getAndUpdateStoreLocation();\n }, 0);\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isDialogOpen,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context?.id === this.props.id) {\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (!context || context.id === this.props.id) {\n await this._searchTermChanged('');\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\n await this.props.data.storeSelectorStateManager.result.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\n });\n }\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\n () => {\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context.actionContext.requestContext.channel?.ChannelCountryRegionISOCode\n });\n }\n );\n\n reaction(\n () => this.props.data.availabilitiesWithHours.result,\n async () => {\n if (this.props.data.storeSelectorStateManager.result?.isDialogOpen) {\n const storeLocationList = this.props.data.availabilitiesWithHours.result;\n if (storeLocationList) {\n await this._setOrgUnitStoreInformation(storeLocationList);\n }\n }\n }\n );\n\n if (isAutoSuggestionEnabled) {\n when(\n () => {\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\n return isMapApiLoaded && isDialogOpen && isSameContext;\n },\n () => {\n setTimeout(async () => {\n await this._attachMapAutoSuggest();\n }, 0);\n }\n );\n }\n }\n\n public shouldComponentUpdate(): boolean {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n if (context && context.id === this.props.id) {\n return true;\n }\n return false;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element {\n const {\n config: {\n termsOfServiceLink,\n className,\n heading,\n mode,\n style,\n setAsPreferredStore: shouldSetAsPreferredStore,\n showAllStores: shouldShowAllStores,\n lookupRadius,\n enablePickupFilterToShowStore: hasEnablePickupFilterToShowStore,\n searchRadiusUnit\n },\n context: {\n telemetry,\n app: { config: appConfig },\n actionContext: {\n requestContext: { channel, cookies }\n }\n },\n slots: { maps: mapSlot },\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n this.storeCounter = 0;\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n const isMapDisabled = !(channel?.BingMapsApiKey && channel.BingMapsEnabled);\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const isDialogOpen: boolean = storeSelectorStateManager\n ? storeSelectorStateManager.isDialogOpen && context?.id === this.props.id\n : false;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const isInlineView = styleDefault === styleEnum.inline;\n const isLocatorView = modeDefault === modeEnum.findStores;\n const shouldHideInventory = isLocatorView;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\n this.isPreferredStoreEnabled = shouldSetAsPreferredStore && cookies?.isConsentGiven();\n const canShowLocationView =\n context && (context.showMapViewLink === undefined || context.showMapViewLink) && storeSelectorStateManager?.isMapModuleLoaded;\n\n const storeSelectorActions = {\n async toggleListMapViewState(): Promise {\n await storeSelectorStateManager?.toggleListMapViewState();\n }\n };\n\n if (!channel?.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n }\n\n const configHeading = heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText;\n const preferredDistanceUnit =\n searchRadiusUnit === SearchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n let storeLocationList: IFullOrgUnitAvailability[] | undefined = shouldHideInventory ? storeLocations : availabilitiesWithHours;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Reading value from app config.\n const isEnableOutofStock: boolean = appConfig?.enableStockCheck || false;\n const alreadySelectedLocation = context ? context.alreadySelectedLocation : undefined;\n const productPickUpOptionList = storeSelectorStateManager?.context?.deliveryOptions?.DeliveryOptions;\n if (this.state.filteredPickupMode && storeLocationList) {\n storeLocationList = this.onFilterLocations(storeLocationList, this.state.filteredPickupMode);\n }\n\n let sortLocation = null;\n if (storeLocationList) {\n sortLocation = this._sortStores(storeLocationList, this.isPreferredStoreEnabled, preferredLocationId);\n }\n\n const locationListProps = this._getStoreLocationListProps(\n isEnableOutofStock,\n isLocatorView,\n preferredLocationId,\n this.isPreferredStoreEnabled,\n selectedStoreLocationId,\n sortLocation ?? null,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n\n const hasMapSlot = ArrayExtensions.hasElements(mapSlot);\n const dialogClassName = hasMapSlot ? 'ms-store-select__map' : '';\n const viewProps: IStoreSelectorViewProps = {\n ...(this.props as IStoreSelectorProps),\n state: this.state,\n maps: hasMapSlot ? mapSlot[0] : undefined,\n\n ModuleProps: {\n tag: isInlineView ? ('div' as NodeTag) : Modal,\n moduleProps: this.props,\n className: classname(\n `ms-store-${isInlineView ? 'locate' : 'select'}`,\n className,\n dialogClassName,\n isInlineView ? '' : 'msc-modal-input-required'\n ),\n autoFocus: true,\n fade: true,\n isOpen: isDialogOpen,\n 'aria-label': configHeading,\n onClosed: this._closeDialog,\n horizontalPosition: 'center',\n verticalPosition: 'center',\n toggle: this._closeDialog\n },\n isMobileView: isMobileDevice,\n HeaderContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalHeader,\n className: `ms-store-select__${isInlineView ? 'header' : 'modal-header'}`,\n toggle: this._closeDialog\n },\n HeaderProps: configHeading && (\n \n ),\n FooterContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalFooter,\n className: `ms-store-select__${isInlineView ? 'footer' : 'modal-footer'} ${!shouldDisplayList ? 'map-only-view' : ''}`\n },\n BodyContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalBody,\n className: `ms-store-select__${isInlineView ? 'body' : 'modal-body'}`\n },\n bodyWrapperProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__body_wrapper'\n },\n storeResultContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__store_container'\n },\n mapContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__map_container'\n },\n storeDetailsModal: {\n tag: 'div' as NodeTag,\n className: `ms-store-select__map__selected_store__modal ${\n selectedStoreLocationId && isDialogOpen && !shouldDisplayList ? 'show' : 'hide'\n }`\n },\n locationsMessage: !this.state.isLocationDisabled && (\n \n ),\n selectedLocation: this.renderSelectedStore(\n shouldHideInventory,\n preferredDistanceUnit,\n preferredStore,\n this.isPreferredStoreEnabled,\n isEnableOutofStock,\n productPickUpOptionList,\n shouldDisplayList\n ),\n search: (\n \n ),\n spinner: ,\n locationsList: ArrayExtensions.hasElements(storeLocationList) ? (\n \n ) : (\n undefined\n ),\n noLocationsMessage: ,\n terms: (\n \n ),\n\n // Not being used in current context, we can use it here to pass more props.\n headerText: (\n {heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText}\n ),\n sortLocations: sortLocation,\n locationListProps,\n callbacks: {\n searchTermChanged: this._searchTermChanged,\n performSearch: this._performSearch,\n closeDialog: this._closeDialog,\n selectedLocation: this._onOrgUnitLocationSelected,\n getAndUpdateUserLocation: async () => {\n this._getAndUpdateStoreLocation();\n return Promise.resolve();\n },\n attachMapAutoSuggest: this._attachMapAutoSuggest,\n onSuggestionSelected: this._onOrgUnitLocationSelected,\n setPreferredStore: this._setPreferredStore,\n removePreferredStore: this._removePreferredStore,\n setSelectedStore: this._setSelectedStore,\n setOrgUnitStoreInformation: this._setOrgUnitStoreInformation\n }\n } as IStoreSelectorViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Render the selected store for the mobile devices.\n * @param shouldHideInventory -- Hide Inventory.\n * @param preferredDistanceUnit -- Preferred Distance Unit.\n * @param preferredStore -- Preferred Store.\n * @param isPreferredStoreEnabled -- Is Preferred Store Enabled.\n * @param hasEnabledOutOfStockCheck -- Stock check is enabled or not.\n * @param productPickUpOptionList -- Product pickup option list.\n * @param shouldDisplayList - Should Display list.\n * @returns -- Returns the view props.\n */\n public renderSelectedStore = (\n shouldHideInventory: boolean,\n preferredDistanceUnit: string,\n preferredStore: IStoreInfo | undefined,\n isPreferredStoreEnabled: boolean | undefined,\n hasEnabledOutOfStockCheck: boolean,\n productPickUpOptionList?: DeliveryOption[],\n shouldDisplayList?: boolean\n ): ISelectedStoreViewProps | undefined => {\n const {\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const selectedStore = (shouldHideInventory ? storeLocations : availabilitiesWithHours)?.find(\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === selectedStoreLocationId\n );\n const orgUnitLocation = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreResources = this._mapResources(resources);\n\n if (!shouldDisplayList && selectedStore) {\n const selectedProps: ISelectedStoreProps = {\n shouldHideStockStatus: shouldHideInventory,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, context?.alreadySelectedLocation),\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, selectedStore.OrgUnitAvailability?.ItemAvailabilities),\n selectedStore,\n resources: selectedStoreResources,\n stockStatusLabel: this._stockInventoryLabel(selectedStore),\n preferredStoreLocationId: preferredStore?.StoreId ? preferredStore.StoreId : '',\n isPreferredStoreEnabled,\n isLocationDisabled: this.state.isLocationDisabled,\n telemetryContent: this.telemetryContent,\n storePickUpOptionList: selectedStore.OrgUnitPickUpDeliveryModes?.DeliveryOptions,\n productPickUpOptionList,\n preferredDistanceUnit,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n\n return SelectedStoreComponent(selectedProps);\n }\n\n return undefined;\n };\n\n /**\n * Method to be called on link text change.\n * @param event -Content Edit Event.\n */\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.termsOfServiceLink) {\n this.props.config.termsOfServiceLink.linkText = event.target.value;\n }\n };\n\n /**\n * Method to be called on heading change.\n * @param event -Content Edit Event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading = event.target.value;\n };\n\n /**\n * Show all stores handler function.\n */\n private readonly onShowAllStoresHandler = () => {\n this._getAndUpdateStoreLocation(true);\n this.setState({ filteredPickupMode: undefined });\n };\n\n /**\n * Method to be called for filtered the store location based on the filter selected by the user.\n * @param stores -All the stores from the API.\n * @param filteredPickupMode -Filter selected by the user.\n * @returns -Filtered stores.\n */\n private readonly onFilterLocations = (stores: IFullOrgUnitAvailability[], filteredPickupMode: string) => {\n return stores.filter(location => {\n return location.OrgUnitPickUpDeliveryModes?.DeliveryOptions?.some(deliveryOption => {\n return deliveryOption.Code === filteredPickupMode;\n });\n });\n };\n\n /**\n * Filter Store by pickup mode.\n * @param deliveryCode -Delivery Code.\n */\n private readonly onFilteredPickupMode = (deliveryCode: string) => {\n this.setState({ filteredPickupMode: deliveryCode });\n };\n\n /**\n * Method will sort all stores.\n * @param stores -Stores List.\n * @param isPreferredStoreEnabled -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @returns List of Stores.\n */\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\n private _sortStores(\n stores: IFullOrgUnitAvailability[],\n isPreferredStoreEnabled: boolean | undefined,\n preferredStoreLocationId: string\n ): IFullOrgUnitAvailability[] {\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n isPreferredStoreEnabled &&\n preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Method will list of store selector location line.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param stores -Store Id.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns List of StoreSelectorLocation Line.\n */\n private _getStoreLocationListProps(\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n stores: IFullOrgUnitAvailability[] | null,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps[] {\n const storeList: IStoreSelectorLocationLineItemProps[] = [];\n if (ArrayExtensions.hasElements(stores)) {\n stores.map((store, index: number) => {\n const storeLineProps = this._createStoreLocationList(\n store,\n index,\n hasEnabledOutOfStockCheck,\n isStoreLocatorView,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n selectedStoreLocationId,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n if (storeLineProps) {\n storeList.push(storeLineProps);\n }\n });\n }\n return storeList;\n }\n\n /**\n * Initialize Map AutoSuggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n config: { autoSuggestOptions },\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\n /**\n * Callback for the autosuggest API.\n */\n callback: () => {\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\n this.autoSuggestManager.attachAutosuggest(\n `#ms-store-select__search-box_${this.props.id}`,\n `#ms-store-select__search-box-container_${this.props.id}`,\n this._onSuggestionSelected\n );\n },\n\n /**\n * Error call back for autosuggest API.\n */\n errorCallback: () => {\n if (telemetry) {\n telemetry.debug('Unable to attach map auto suggest.');\n }\n },\n credentials: channel?.BingMapsApiKey\n });\n }\n };\n\n /**\n * On Selecting Location Suggestion.\n * @param result - Map Suggestions List.\n */\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context && context.id === this.props.id) {\n await this._searchTermChanged(result.formattedSuggestion);\n await this._performSearch(result.formattedSuggestion);\n }\n };\n\n /**\n * On Selecting Preferred Store.\n * @param storeId - Store Id.\n */\n private readonly _setPreferredStore = async (storeId: string | undefined): Promise => {\n if (!storeId) {\n return;\n }\n\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n config: { mode },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations },\n availabilitiesWithHours: { result: availabilitiesWithHours }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n\n let stores: IFullOrgUnitAvailability[];\n if (modeDefault === modeEnum.findStores && storeLocations) {\n stores = storeLocations;\n } else {\n stores = availabilitiesWithHours!;\n }\n\n const preferredStore = stores.find(store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === storeId);\n\n await storeSelectorStateManager.setPreferredStoreLocation(\n storeId,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\n cookies.isConsentGiven(),\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude\n );\n };\n\n /**\n * On Removing Preferred Store.\n */\n private readonly _removePreferredStore = async (): Promise => {\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.clearPreferredStore(cookies.isConsentGiven());\n };\n\n /**\n * Method called to close the store details modal that comes up on clicking the pushpin.\n * @returns Void promise.\n */\n private readonly _closeStoreDetailModal = async (): Promise => {\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\n };\n\n /**\n * On Selecting Store for pickup.\n * @param storeId - Store Id.\n */\n private readonly _setSelectedStore = async (storeId: string | undefined): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.setSelectedStoreLocationId(storeId);\n };\n\n /**\n * Method to be called on search.\n * @param searchTerm - Search string.\n */\n private readonly _performSearch = async (searchTerm: string): Promise => {\n const {\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!searchTerm || !storeSelectorStateManager) {\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\n\n if (location) {\n await this._updateLocations(location.latitude, location.longitude);\n } else {\n await this._updateLocations();\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n };\n\n /**\n * Method to be called on search term changed.\n * @param searchTerm - Search string.\n */\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\n this.setState({ searchTerm });\n };\n\n /**\n * Method to be called updating the store location.\n * @param shouldShowAllStores - Flag to show all stores.\n */\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\n const {\n config: { style },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n\n if (styleDefault !== styleEnum.inline && (!storeSelectorStateManager || !storeSelectorStateManager.isDialogOpen)) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n if (navigator?.geolocation) {\n navigator.geolocation.getCurrentPosition(\n async position => {\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\n this.setState({ isLocationDisabled: false, isSearchInProgress: true });\n if (shouldShowAllStores) {\n this.setState({ isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(position.coords.latitude, position.coords.longitude, 0);\n } else {\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n async error => {\n // If the location setting is turned off\n if (error.PERMISSION_DENIED) {\n this.setState({ isLocationDisabled: true, isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(0, 0, 0);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n { timeout: 5000 }\n );\n } else {\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n }\n };\n\n /**\n * Method to be called closing the store selector dialog.\n * @returns Void promise.\n */\n private readonly _closeDialog = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n this.setState({ searchTerm: '' });\n\n if (storeSelectorStateManager) {\n storeSelectorStateManager.context?.parentElementRef?.current?.focus();\n return storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method to set store info.\n * @param orgUnitStoreInformation - Store Info Object.\n * @returns Void promise.\n */\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n config: { style },\n telemetry\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n const context = storeSelectorStateManager.context;\n const moduleId: string = context?.id ? context.id : this.props.id;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n let input: IStoreSelectionStateContext = {\n /**\n * On Location selected.\n * @returns - Returns promise.\n */\n onLocationSelected: async () => {\n // TO-DO handle event for when location in selected\n return Promise.resolve();\n }\n };\n\n if (storeSelectorStateManager.context) {\n input = storeSelectorStateManager.context;\n }\n\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager.preferredStore;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n const storeLocationList = this._sortStores(orgUnitStoreInformation, this.isPreferredStoreEnabled, preferredLocationId);\n\n input = {\n ...input,\n id: moduleId,\n showMapViewLink: context?.showMapViewLink,\n parentElementRef: context?.parentElementRef,\n isDialog: styleDefault === styleEnum.dialog,\n orgUnitStoreInformation: storeLocationList,\n product: context?.product\n };\n\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\n if (telemetry) {\n telemetry.error(error.message);\n telemetry.debug('Unable to Update store location state');\n }\n });\n };\n\n /**\n * Method to update user location.\n * @param latitude - User location.\n * @param longitude - User location.\n * @param radius - Search Criteria Radius.\n * @returns Void promise.\n */\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\n const {\n config: { mode, lookupRadius, style, searchRadiusUnit },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.kilometers ? 1 : 0;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n let localLatitude = this.state.searchTerm || !preferredStore?.Latitude ? latitude : preferredStore.Latitude;\n let long = this.state.searchTerm || !preferredStore?.Longitude ? longitude : preferredStore.Longitude;\n if (styleDefault === styleEnum.inline) {\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\n if (lastInlineStoreLocation && !this.state.searchTerm) {\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\n }\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\n }\n\n if (modeDefault === modeEnum.findStores) {\n await this.getOrgUnitLocationByArea(calRadius, distanceUnitValue, localLatitude, long);\n return;\n }\n\n await this.getFullAvailableInventoryNearby(calRadius, distanceUnitValue, localLatitude, long);\n };\n\n /**\n * Get org unit location by area.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getOrgUnitLocationByArea = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n context: { actionContext }\n } = this.props;\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\n latitude,\n longitude,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\n if (orgUnitLocations) {\n await this._setOrgUnitStoreInformation(orgUnitLocations);\n await this._setSelectedStore(undefined);\n }\n };\n\n /**\n * Get full available inventory nearby.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getFullAvailableInventoryNearby = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n telemetry,\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager || !storeSelectorStateManager.context) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n if (!storeSelectorStateManager.context.product) {\n // TODO: Use alternative search method here to not make inventory check\n return;\n }\n\n const input = new GetFullAvailableInventoryNearbyInput(\n storeSelectorStateManager.context.product.RecordId,\n latitude ?? 0,\n longitude ?? 0,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n await getFullAvailableInventoryNearby(input, actionContext).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get full available inventory near by');\n });\n };\n\n /**\n * Method to called on store selected.\n * @param location - Store Info.\n * @param deliveryMode - Pickup mode.\n * @returns Void promise.\n */\n private readonly _onOrgUnitLocationSelected = async (location: OrgUnitLocation | undefined, deliveryMode?: string): Promise => {\n const {\n telemetry,\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager) {\n if (location && storeSelectorStateManager.context) {\n // Want to eat exceptions here so that the dialog still closes even if the onLocationSelected call goes wrong\n await storeSelectorStateManager.context.onLocationSelected(location, deliveryMode).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get on org unit location selected');\n });\n }\n\n await storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method will list of store selector location line.\n * @param store -Store Info.\n * @param index - List index.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns StoreSelectorLocation Line Prop.\n */\n private _createStoreLocationList(\n store: IFullOrgUnitAvailability,\n index: number,\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps | undefined {\n const orgUnitLocation = store.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocation = selectedStoreLocationId;\n const deliveryOptions = store.OrgUnitPickUpDeliveryModes;\n const lineResources = this._mapResources(this.props.resources);\n const storeOpenFrom: string | undefined = secondsToTime(orgUnitLocation?.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(orgUnitLocation?.OpenTo);\n const storeHours = store.StoreHours;\n\n if (orgUnitLocation) {\n ++this.storeCounter;\n return {\n location: orgUnitLocation,\n selectedStoreLocationId: selectedStoreLocation,\n storeHours,\n resources: lineResources,\n preferredDistanceUnit: preferredDistanceUnit!,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, alreadySelectedLocation),\n hideStockStatus: !hasEnabledOutOfStockCheck,\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, store.OrgUnitAvailability?.ItemAvailabilities),\n stockStatusLabel: this._stockInventoryLabel(store),\n storeLocatorView: isStoreLocatorView,\n index: this.storeCounter.toString(),\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n telemetryContent: this.telemetryContent,\n isLocationDisabled: this.state.isLocationDisabled,\n storePickUpOptionList: deliveryOptions?.DeliveryOptions,\n productPickUpOptionList,\n locationOpen: { openFrom: storeOpenFrom, openTo: storeOpenTo },\n storeHoursList: storeHours?.RegularStoreHours ? buildStoreHours(storeHours.RegularStoreHours, lineResources) : [],\n onClick: this._setSelectedStore,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n }\n return undefined;\n }\n\n /**\n * Method to map resources with Location Item.\n * @param resources - List of strings for module.\n * @returns Resources for StoreSelector location line.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined, selectedLocation?: OrgUnitLocation): boolean =>\n (selectedLocation && location && selectedLocation.OrgUnitNumber === location.OrgUnitNumber) || false;\n\n /**\n * Method to get stock.\n * @param hasEnableOutOfStockCheck - Config to check for stock check enabled.\n * @param itemAvailabilities - Item quantity availability.\n * @returns Boolean value for item stock.\n */\n private readonly _isProductInStock = (\n hasEnableOutOfStockCheck: boolean,\n itemAvailabilities: ItemAvailability[] | undefined\n ): boolean => {\n if (!hasEnableOutOfStockCheck) {\n return true;\n }\n const quantityCount = 0;\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > quantityCount : false;\n }\n\n return false;\n };\n\n /**\n * Method to get stocklevel label.\n * @param isInStock - Stock available in store.\n * @returns Label for stock status.\n */\n private readonly _stockInventoryLabel = (isInStock: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (isInStock?.ProductInventoryInformation && ArrayExtensions.hasElements(isInStock.ProductInventoryInformation)) {\n for (let index = 0; index < isInStock.ProductInventoryInformation.length; index++) {\n if (\n isInStock.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n isInStock.ProductInventoryInformation[index].InventLocationId\n ) {\n return isInStock.ProductInventoryInformation[index].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n}\n\nexport default StoreSelector;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISelectedStoreViewProps } from './components/selected-store/selected-store';\nimport { IStoreSelectorViewProps } from './store-selector';\n\n/**\n * Renders the pickup Delivery options.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderDeliveryOptions: React.FC = props => {\n const { canSelectLocation, deliveryOptions, pickUpDeliveryOptionButton, pickupModes } = props;\n\n return (\n <>\n {/* eslint-disable-next-line no-nested-ternary -- Need this.*/}\n {canSelectLocation ? (ArrayExtensions.hasElements(deliveryOptions) ? pickupModes : pickUpDeliveryOptionButton) : false}\n \n );\n};\n\n/**\n * Render the selected store.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderSelectedStore: React.FC = props => {\n const {\n storeDetailsMain,\n storeHeader,\n storeName,\n storeDetailsCloseButton,\n storeDistance,\n storeDetailsAvailabilityContainer,\n productAvailability,\n stockStatus,\n isCurrentLocation,\n currentLocation,\n isPreferredStore,\n preferredStoreButton,\n removePreferredStoreButton\n } = props;\n\n return (\n \n \n {storeDetailsCloseButton}\n {storeName}\n {storeDistance}\n \n \n {productAvailability}\n {stockStatus}\n \n {isCurrentLocation ? currentLocation : renderDeliveryOptions(props)}\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n \n );\n};\n\n/**\n * Render the body of the popup.\n * @param props -- Store selector view props.\n * @returns -- Returns the html.\n */\nconst renderBody: React.FC = props => {\n const {\n BodyContainerProps,\n locationsMessage,\n search,\n state,\n spinner,\n locationsList,\n noLocationsMessage,\n maps,\n bodyWrapperProps,\n storeResultContainerProps,\n mapContainerProps,\n isMobileView,\n storeDetailsModal,\n selectedLocation\n } = props;\n\n if (isMobileView) {\n return (\n \n {locationsMessage}\n {search}\n \n \n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n {maps}\n {selectedLocation && renderSelectedStore(selectedLocation)}\n \n \n \n );\n }\n\n return (\n \n \n \n {locationsMessage}\n {search}\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n \n {maps}\n \n \n );\n};\n\n/**\n * Store selector view props.\n * @param props - Store selector view props.\n * @returns - HTML.\n */\nconst StoreSelectorView: React.FC = props => {\n const {\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n\n terms\n } = props;\n\n return (\n \n {HeaderProps}\n {renderBody(props)}\n {terms}\n \n );\n};\n\nexport default StoreSelectorView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getUrlSync } from '@msdyn365-commerce/core';\nimport { IB2bRequestsStatusViewProps } from '@msdyn365-commerce-modules/account-management';\nimport { Button, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { IB2bRequestsStatusProps, IB2bRequestsStatusResources } from '../definition-extensions/b2b-requests-status.ext.props.autogenerated';\n\n/**\n * B2b Request status View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file.\nconst B2bRequestsStatusView: React.FC> = props => {\n const { b2bRequestsStatus, heading, table } = props;\n const { continueShoppingButtonTitle } = props.resources;\n const initialCount = 0;\n\n if (props.data.operationRequests.result?.length === initialCount) {\n return (\n \n {heading}\n \n
\n

{props.resources.headingForEmptyRequestStatus}

\n

{props.resources.textForEmptyRequestStatus}

\n \n \n {continueShoppingButtonTitle}\n \n \n
\n
\n
\n );\n }\n return (\n \n {heading}\n {table}\n \n );\n};\n\nexport default B2bRequestsStatusView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICartLineItemViewProps,\n ICartlinesViewProps,\n ICartResources,\n ICartViewProps,\n IOrderSummaryErrors\n} from '@msdyn365-commerce-modules/cart';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartProps as ICartExtensionProps } from '../definition-extensions/cart.ext.props.autogenerated';\n\n/**\n * Toggle Bopis Function.\n * @param cartLine -CartLine.\n * @param isBopisSelected -Boolean.\n * @returns Toggle Bopis.\n */\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * Change Store Function.\n * @param cartLine -CartLine.\n * @returns Toggle Bopis.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const {\n shipInsteadDisplayText,\n shipToAddressDisplayText,\n pickItUpDisplayText,\n pickUpAtStoreWithLocationText,\n changeStoreDisplayText\n } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
\n {isBopisSelected ? (\n {pickUpAtStoreWithLocationText}\n ) : (\n {shipToAddressDisplayText}\n )}\n
\n {isBopisSelected && (\n
\n {cartLine.pickUpInStore.orgUnitName}\n \n
\n )}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n
\n );\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderGroupBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? (\n \n ) : null}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLine = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element => {\n if (cartLine.error === resources.outOfStockErrorMessage) {\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (isMultiplePickUp) {\n return (\n \n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (cartLine.addToOrderTemplate) {\n return (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlinesInternal = (\n cartLines: ICartlinesViewProps[],\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n return cartLines.map((cartLine, index) => {\n const itemIndex = index;\n return (\n
\n {cartLine.cartline}\n \n {isMultiplePickUp\n ? null\n : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {renderCartLine(cartLine, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n
\n );\n });\n};\n\n/**\n * Render Cart Lines.\n * @param props - The cart line props.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param waitingComponent - Waiting component element.\n * @param cartLoadingStatus - Cart loading status string.\n * @param isCartDataResult - Flag to check if there is cart data.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlines = (\n props: ICartViewProps & ICartExtensionProps<{}>,\n cartLines: ICartlinesViewProps[] | undefined,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n isCartDataResult: boolean,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\n if (cartLines) {\n return props.multiplePickUpEnabled ? (\n renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\n ) : (\n \n {renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n );\n }\n\n return isCartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const itemCountOne: number = 1;\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\n const countTitle = `(${count} ${suffix})`;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n

{countTitle}

\n
\n \n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupHeader = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n count: number,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText, payInvoicesDisplayText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (cartLine.data && cartLine.data.cartline.IsInvoiceLine) {\n groupTitle = payInvoicesDisplayText;\n } else if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, resources, count)}\n
\n \n );\n};\n\n/**\n * Returns count of products.\n * @param cartLine - The cart line view props.\n * @returns Number of products.\n */\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n const defaultItemCount = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\n }, defaultItemCount);\n return countItem;\n};\n\n/**\n * Render Cart Lines group.\n * @param props - The cart line view props.\n * @param resources - Module resource strings.\n * @returns JSX Element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n cartlines[0],\n resources,\n countItems(cartlines),\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {renderCartlines(\n props,\n cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\n/**\n * Render error block.\n * @param errorData - Error component.\n * @returns JSX Element.\n */\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Render invoice summary.\n * @param invoiceSummaryLines - Invoice summary component.\n * @param orderSummaryItems - Order summary component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render order summary.\n * @param orderSummaryLines - Order summary component.\n * @param orderSummaryItems - Order summary items component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {orderSummaryLines.subtotal}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render error block.\n * @param promotions - The module view props.\n * @returns JSX Element.\n */\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Render order summary checkout.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.cart?.hasInvoiceLine ? null : props.promoCode}\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n \n {props.createTemplateFromCartButton}\n \n );\n};\n\n/**\n * Render order summary checkout button.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n \n );\n};\n\n/**\n * Render cart view.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\n const totalItemCountOne: number = 1;\n const updatedTitle = (\n

\n {props.resources.cartTitle}\n \n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? 'items' : 'item'})`}\n \n

\n );\n return (\n
\n {props.checkoutBlockedDueToUnavailableFunds}\n {updatedTitle}\n
{props.orderSummaryLineitems?.orderTotal}
\n {renderOrderSummaryCheckoutButton(props)}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\n {props.cart?.hasInvoiceLine || props.multiplePickUpEnabled\n ? renderCartLinesGroup(props, props.resources)\n : renderCartlines(\n props,\n props.cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n {props.orderSummaryHeading && (\n \n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {renderErrorBlock(props.OrderSummaryErrors)}\n \n {renderOrderSummaryCheckout(props)}\n \n )}\n {props.storeSelector}\n
\n );\n};\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IGroup,\n IGroupDelivery,\n IGroups,\n IHelp,\n IOrderDetailsViewProps,\n IOrderInformation,\n IOrderSummary,\n IPaymentMethods,\n ISalesLine\n} from '@msdyn365-commerce-modules/order-management';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport const OrderInfomation: React.FC = ({\n orderInformationProps,\n salesId,\n receiptId,\n createdDate,\n count,\n amount,\n channelReferenceId,\n channelName,\n channelAddress\n}) => (\n \n {channelName}\n {channelAddress}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n \n);\n\nexport const SalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton, errors }) => (\n \n {salesLine}\n {buyAgainButton}\n {errors}\n \n);\n\nexport const GroupDelivery: React.FC = ({ deliveryProps, heading, count }) => (\n \n {heading}\n {count}\n \n);\n\nexport const Group: React.FC = ({ groupProps, delivery, address, salesLinesProps, salesLines, isCashAndCarryTransaction }) => (\n \n {delivery && }\n \n {salesLines && (\n \n {salesLines.map(salesLine => (\n \n {!isCashAndCarryTransaction && salesLine.salesStatus}\n {salesLine.data.deliveryType === 'ship' && salesLine.data.shipment ? salesLine.trackingInfo : null}\n \n \n ))}\n \n )}\n {!delivery.showTimeslot && address}\n {delivery.showTimeslot && (\n \n {address}\n {delivery.pickupDateTimeslot}\n \n )}\n \n \n);\n\nexport const Groups: React.FC = ({ groupsProps, groups }) => (\n \n {groups.map((group, index) => (\n \n ))}\n \n);\n\nexport const OrderSummary: React.FC = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n \n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n \n);\n\nexport const Payment: React.FC = ({ paymentMethodsProps, title, methods }) => (\n \n {title}\n {methods}\n \n);\n\nexport const Help: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n \n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n \n);\n\nconst OrderDetailsView: React.FC = ({\n moduleProps,\n viewModes,\n tableViewActions,\n table,\n placedBy,\n heading,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n \n {placedBy}\n {heading}\n {alert}\n {loading}\n {orderInfomation && }\n {tableViewActions}\n {viewModes}\n {table}\n {groups && }\n \n {orderSummary && }\n {payment && }\n \n {help && }\n \n );\n};\n\nexport default OrderDetailsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ISignInItem,\n ISignInLoading,\n ISignInLocalAccount,\n ISignInSocialAccount,\n ISignInSocialItem,\n ISignInB2BAccount,\n ISignInB2BItem,\n ISignInViewProps,\n ISignInButton\n} from '@msdyn365-commerce-modules/account-management';\n\nimport { ISignInProps, ISignInResources } from '../definition-extensions/sign-in.ext.props.autogenerated';\n\nconst LocalAccount: React.FC = ({ localAccount, items, forgetPassword, disclaimer, error, signInButton }) => {\n return (\n \n {items &&\n items.map((item: ISignInItem) => {\n return (\n \n {item.label}\n {item.error}\n {item.input}\n \n );\n })}\n {forgetPassword}\n {disclaimer}\n {error}\n {signInButton}\n \n );\n};\n\nconst SocialAccount: React.FC = ({ socialAccounts, items }) => {\n return (\n \n {items &&\n items.map((item: ISignInSocialItem) => {\n return (\n \n {item.image}\n {item.text}\n \n );\n })}\n \n );\n};\n\nconst B2BAccount: React.FC = ({ socialAccounts, items }) => {\n return (\n \n {items &&\n items.map((item: ISignInB2BItem) => {\n return (\n item && (\n \n {item.text}\n \n )\n );\n })}\n \n );\n};\n\nconst SignInLoading: React.FC = ({ modal, modalBody, icon, message }) => {\n return (\n \n \n {icon}\n {message}\n \n \n );\n};\nconst SignInButton: React.FC = ({ id, className, text, ariaLabel, telemetryContent, onClick }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {text}\n \n );\n};\n\nconst signUpButton: React.FC> = (\n props: ISignInViewProps & ISignInProps\n) => {\n const {\n resources,\n telemetry,\n friendlyName,\n context: {\n request: { telemetryPageName }\n }\n } = props;\n const telemetryContent = getTelemetryObject(telemetryPageName!, friendlyName, telemetry);\n const attributes = {\n href: '#'\n };\n\n return (\n \n );\n};\n\nconst SignInView: React.FC> = props => {\n const {\n signIn,\n viewState,\n loading,\n defaultAADConainer,\n aadConainer,\n signInSection,\n signUpSection,\n signInSectionHeading,\n signInLocalAccount,\n signInSocialAccount,\n signUpSectionHeading,\n signInB2BAccount,\n signUpDescription\n } = props;\n\n return (\n \n {viewState.isShowLoading && }\n {viewState.isShowLoading && }\n \n \n {signInSectionHeading}\n {LocalAccount(signInLocalAccount)}\n {SocialAccount(signInSocialAccount)}\n \n \n {signUpSectionHeading}\n {signUpDescription}\n {signUpButton(props)}\n \n
\n
\n or\n
\n {B2BAccount(signInB2BAccount)}\n
\n
\n
\n );\n};\n\nexport default SignInView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { RichTextComponent } from '@msdyn365-commerce/core';\nimport {\n ContactInformationType,\n DeliveryOption,\n IDictionary,\n OrgUnitContact,\n OrgUnitLocation,\n StoreHours\n} from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n buildStoreHours,\n IHoursDisplayInfo,\n ILocationHours,\n IStoreSelectorFoundLocationsMessage,\n IStoreSelectorLocationLineItemProps,\n IStoreSelectorLocationLineItemResources,\n IStoreSelectorViewProps,\n secondsToTime\n} from '@msdyn365-commerce-modules/store-selector';\nimport { ISelectedStoreViewProps } from '@msdyn365-commerce-modules/store-selector/src/modules/store-selector/components/selected-store/selected-store';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n isMobile,\n Module,\n Node,\n TelemetryConstant,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IStoreSelectorProps, IStoreSelectorResources } from '../definition-extensions/store-selector.ext.props.autogenerated';\n\n/**\n * PickUpMethodComponent View Props Interface.\n */\nexport interface IPickupComponent extends IStoreSelectorLocationLineItemProps {\n pickUpStatesProps: IStoreSelectorViewProps;\n}\n\nexport interface IPickUpButtonComponent {\n attributes: IDictionary | undefined;\n onPickupInStoreClickHandler?(): void;\n}\n\n/**\n * Found Locations Message component in Store Selector.\n * @param props - The component props.\n * @returns The JSX Element.\n */\nconst StoreSelectorFoundLocationsMessageComponent: React.FC = props => {\n const { locations, searchRadius, resources, isSeeAllStore, preferredDistanceUnit } = props;\n if (locations) {\n const storeCountMessage =\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n\n return (\n ${locations.length.toString()}`\n )\n : storeCountMessage\n .replace(\n '{count}',\n `${locations.length.toString()}`\n )\n .replace(\n '{radius}',\n `${searchRadius.toString()}`\n )\n }\n />\n );\n }\n\n return null;\n};\n\n/**\n * Build distance string.\n * @param distance - The distance.\n * @param preferredDistanceUnit - The preferred distance unit.\n * @param resources - The module resources.\n * @param isLocationDisabled - True if location is disabled.\n * @returns The distance string.\n */\nconst buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n resources: IStoreSelectorResources & IStoreSelectorResources,\n isLocationDisabled?: boolean\n): string | undefined => {\n const closeDistance: number = 1;\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < closeDistance) {\n const closeDistanceString: string = resources.closeDistanceString;\n return closeDistanceString.replace('{preferredDistanceUnit}', preferredDistanceUnit);\n }\n const distanceAsString: string = resources.distanceString;\n return distanceAsString\n .replace('{preferredDistanceUnit}', preferredDistanceUnit)\n .replace('{distance}', Math.floor(distance).toString());\n};\n\n/**\n * Extract phone number.\n * @param contacts - Contacts array.\n * @returns Phone number.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === ContactInformationType.Phone && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * Render Store Hours Day.\n * @param displayTime - Store Hours Information.\n * @param storeHoursDayPeriodString - The string for store hours day period.\n * @param storeHoursDayString - The string for store hours day period.\n * @returns JSX element with store hours day.\n */\nconst buildStoreHoursDay = (displayTime: IHoursDisplayInfo, storeHoursDayPeriodString: string, storeHoursDayString: string) => {\n return (\n ${displayTime.startDayShort}`)\n .replace(\n '{endDay}',\n `${displayTime.endDayShort}`\n )\n : storeHoursDayString.replace(\n '{startDay}',\n `${displayTime.startDayShort}`\n )\n }\n />\n );\n};\n\n/**\n * Render Store Hours.\n * @param storeHours - Store hours.\n * @param storeHoursList - Store hours list.\n * @param locationOpen - Location open.\n * @param resources - The module resources.\n * @returns JSX element with store hours.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n storeHoursList: IHoursDisplayInfo[] | undefined,\n locationOpen: ILocationHours | undefined,\n resources: IStoreSelectorResources & IStoreSelectorResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day hours\n if (storeHours?.RegularStoreHours) {\n return (\n
\n {storeHoursList?.map(displayTime => (\n
\n {buildStoreHoursDay(displayTime, resources.storeHoursDayPeriod, resources.storeHoursDay)}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string = locationOpen?.openFrom ? locationOpen.openFrom : '';\n const storeOpenTo: string = locationOpen?.openTo ? locationOpen.openTo : '';\n return (\n
\n {resources.storeHoursDayPeriod.replace('{startDay}', storeOpenFrom).replace('{endDay}', storeOpenTo)}\n
\n );\n};\n\n/**\n * Match delivery options.\n * @param productDeliveryOptions - The list of product delivery options.\n * @param storePickUpOptionList - The list of store pick up options.\n * @returns Matched delivery option.\n */\nconst matchDeliveryOptions = (\n productDeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n if (!productDeliveryOptions) {\n return [] as DeliveryOption[];\n }\n return productDeliveryOptions\n .map(productDeliveryOption => storePickUpOptionList?.find(delivery => delivery.Code === productDeliveryOption.Code))\n .filter(productDeliveryOption => productDeliveryOption) as DeliveryOption[];\n};\n\n/**\n * PickUpMethod Resources Interface.\n */\nexport interface IPickUpButtonResources {\n pickupInStoreAriaLabel: string;\n pickupInStoreButtonText: string;\n pickupDeliveryOptionErrorMessage: string;\n}\n\n/**\n * PickUpMethod Resources Interface.\n */\nexport interface IPickUpMethodResources {\n selectStoreText: string;\n pickUpMethodLabel: string;\n pickUpOptionPlaceholder: string;\n pickupOptionDropdownError: string;\n pickupButtonAriaLabel: string;\n}\n\n/**\n * PickUp method dropdown component.\n * @param props - The view props.\n * @returns JSX Element.\n */\nconst PickUpMethodDropdownComponent = (props: IPickupComponent & IPickUpMethodResources) => {\n const {\n handlers,\n location,\n pickUpStatesProps,\n selectStoreText,\n pickUpMethodLabel,\n pickUpOptionPlaceholder,\n pickupOptionDropdownError,\n pickupButtonAriaLabel,\n productPickUpOptionList,\n storePickUpOptionList\n } = props;\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [selectedStorePickUpOption, selectStorePickUpOption] = React.useState('');\n const [currentStorePickUpOption, setCurrentStorePickUpOption] = React.useState(pickUpOptionPlaceholder);\n const [isDropdownOpen, toggleDropdown] = React.useState(false);\n const [isError, setError] = React.useState(false);\n\n /**\n * Method to handle the store pickup option change.\n * @param event - Change Event.\n */\n const onChangeHandler = React.useCallback((event: React.MouseEvent) => {\n event.preventDefault();\n selectStorePickUpOption(event.currentTarget.value);\n setCurrentStorePickUpOption(event.currentTarget.dataset.description ? event.currentTarget.dataset.description : '');\n toggleDropdown(false);\n setError(false);\n }, []);\n\n /**\n * Method to render store location line pick up button.\n * @param filteredDeliveryMode - Filtered Delivery Mode.\n * @returns JSX Element.\n */\n const renderLocationLinePickupButton = (filteredDeliveryMode: DeliveryOption | undefined) => {\n return filteredDeliveryMode !== undefined ? (\n
\n \n {filteredDeliveryMode.Description}\n \n
\n ) : null;\n };\n\n /**\n * Method to handle the store pickup option submit.\n */\n const onClickHandler = React.useCallback(() => {\n if (!StringExtensions.isNullOrEmpty(selectedStorePickUpOption)) {\n handlers.onSelected(location, selectedStorePickUpOption);\n } else if (pickUpStatesProps.state.filteredPickupMode !== undefined) {\n handlers.onSelected(location, pickUpStatesProps.state.filteredPickupMode);\n } else {\n toggleDropdown(false);\n setError(true);\n }\n }, [location, selectedStorePickUpOption, handlers, pickUpStatesProps.state.filteredPickupMode]);\n\n const handleDropdownToggle = React.useCallback(() => {\n toggleDropdown(!isDropdownOpen);\n setError(false);\n }, [isDropdownOpen]);\n\n const filterDeliveryOption = deliveryOptionList.find(\n (delivery: DeliveryOption) => delivery.Code === pickUpStatesProps.state.filteredPickupMode\n );\n\n const pickupInStoreButtonText: string = selectStoreText;\n const filteredDeliveryMode: DeliveryOption | undefined =\n pickUpStatesProps.state.filteredPickupMode !== undefined ? filterDeliveryOption : undefined;\n\n return (\n \n
{pickUpMethodLabel}
\n {pickUpStatesProps.state.filteredPickupMode === undefined ? (\n
\n \n {currentStorePickUpOption}\n \n
    \n {deliveryOptionList.map((delivery: DeliveryOption) => (\n \n \n {delivery.Description}\n \n \n ))}\n
\n
{pickupOptionDropdownError}
\n
\n ) : (\n renderLocationLinePickupButton(filteredDeliveryMode)\n )}\n \n
\n );\n};\n\n/**\n * PickUp button component.\n * @param props - The view props.\n * @returns JSX Element.\n */\nconst PickUpButtonComponent = (props: IPickUpButtonComponent & IPickUpButtonResources) => {\n const { pickupInStoreAriaLabel, pickupInStoreButtonText, pickupDeliveryOptionErrorMessage, attributes } = props;\n const [isError, setError] = React.useState(false);\n const onPickupButtonClickHandler = () => () => {\n setError(true);\n };\n\n return (\n <>\n \n {pickupInStoreButtonText}\n \n
\n {pickupDeliveryOptionErrorMessage}\n
\n \n );\n};\n\n/**\n * Method to render store location line item.\n * @param locationLineItem - The Location Line item view props.\n * @param props - The view props.\n * @returns JSX Element.\n */\nconst renderStoreLocationLineItem = (\n locationLineItem: IStoreSelectorLocationLineItemProps,\n props: IStoreSelectorViewProps & IStoreSelectorProps\n) => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n hideStockStatus,\n index,\n isInStock,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n location,\n resources,\n storeHours,\n storeHoursList,\n stockStatusLabel,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n storeLocatorView,\n telemetryContent\n } = locationLineItem;\n const storeName = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(\n location.Distance,\n locationLineItem.preferredDistanceUnit,\n props.resources,\n locationLineItem.isLocationDisabled\n );\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockStatus = stockStatusLabel ? stockStatusLabel : resourceLabel;\n const stockText: string | undefined = hideStockStatus ? undefined : stockStatus;\n\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n\n /**\n * Method to handle the change for preferred store.\n * @returns Void.\n */\n const onSetPreferredStoreClickHandler = () => {\n locationLineItem.handlers.onSetAsPreferredStore(locationLineItem.location.OrgUnitNumber);\n };\n\n /**\n * Method to handle the removal of the preferred store.\n * @returns Void.\n */\n const onRemovePreferredStoreClickHandler = async (event: React.MouseEvent) => {\n event.stopPropagation();\n locationLineItem.handlers.onRemovePreferredStore();\n await props.data.storeSelectorStateManager.result?.setSelectedStoreLocationId(undefined);\n };\n\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n
\n
\n {storeLocatorView && {index}}\n {storeName}\n {distanceAsString ? {distanceAsString} : false}\n
\n
\n
\n

{locationLineItem.resources.contactInfoHeader}

\n {storeAddress && (\n
\n
\n )}\n {phoneNumber && (\n
\n \n {phoneNumber}\n
\n )}\n
\n
\n

{locationLineItem.resources.storeHoursHeader}

\n {renderStoreHours(storeHours, storeHoursList, locationLineItem.locationOpen, props.resources)}\n
\n {!storeLocatorView && !hideStockStatus && (\n
\n

{resources.availabilityInfoHeader}

\n {stockText &&

{stockText}

}\n
\n )}\n {isPreferredStoreEnabled &&\n (isPreferredStore ? (\n \n {resources.preferredStoreText}\n \n ) : (\n \n {resources.setAsPreferredStoreText}\n \n ))}\n
\n
\n );\n};\n\n/**\n * Render Store Location.\n * @param location - The location props.\n * @param index - The location index.\n * @param props - The view props.\n * @param selectedLocationReference - The ref.\n * @returns The JSX Element.\n */\nconst renderStoreLocation = (\n location: IStoreSelectorLocationLineItemProps,\n index: number,\n props: IStoreSelectorViewProps & IStoreSelectorProps,\n selectedLocationReference: React.RefObject\n): JSX.Element | undefined => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n hideStockStatus,\n storeLocatorView,\n isCurrentLocation,\n isInStock,\n productPickUpOptionList,\n resources,\n storePickUpOptionList,\n telemetryContent\n } = location;\n\n const orgUnitLocation = location.location;\n const selectedStoreLocationId = location.selectedStoreLocationId;\n const defaultAriaSetsize = 0;\n const canSelectLocation = hideStockStatus ?? isInStock;\n const storeName = location.location.OrgUnitName;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickUpOptionDropdownPlaceholderText: string = props.resources.pickupOptionDropdownPlaceholderText;\n\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const selectStoreText = props.resources.selectStoreText;\n const pickUpMethodLabel = props.resources.pickUpMethodLabel;\n\n /**\n * Method to handle the pick up in store.\n * @returns Void.\n */\n const onPickupInStoreClickHandler = () => () => {\n location.handlers.onSelected(location.location);\n };\n\n /**\n * Render Store Locations.\n * @param unitLocation - The org unit location.\n * @returns Handler for onClick.\n */\n const onClickHandler = (unitLocation: OrgUnitLocation | undefined) => () => {\n location.onClick(unitLocation?.OrgUnitNumber);\n };\n\n const canSelectPickUpMethod = !ArrayExtensions.hasElements(deliveryOptionList) ? (\n \n ) : (\n \n );\n const pickUpMethodSelection = canSelectLocation ? canSelectPickUpMethod : false;\n\n return (\n \n \n {renderStoreLocationLineItem(location, props)}\n \n {!storeLocatorView &&\n (isCurrentLocation ? (\n

{resources.currentLocation}

\n ) : (\n pickUpMethodSelection\n ))}\n \n );\n};\n\n/**\n * Render Store Locations.\n * @param props - The view props.\n * @param selectedLocationReference - The ref.\n * @returns The JSX Element.\n */\nconst renderStoreLocations = (\n props: IStoreSelectorViewProps & IStoreSelectorProps,\n selectedLocationReference: React.RefObject\n) => {\n return (\n \n {props.locationListProps?.map((store, index) => {\n return renderStoreLocation(store, index, props, selectedLocationReference);\n })}\n \n );\n};\n\n/**\n * Method to map resources with Location Item.\n * @param resources - List of strings for module.\n * @returns Resources for StoreSelector location line.\n */\nconst mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n};\n\n/**\n * Render the selected store.\n * @param selectedLocationProps -- Selected store view props.\n * @param storeSelectorViewProps -- Store selector view props.\n * @returns -- HTML.\n */\nexport const renderSelectedStore = (\n selectedLocationProps: ISelectedStoreViewProps,\n storeSelectorViewProps: IStoreSelectorViewProps & IStoreSelectorProps\n): JSX.Element => {\n const {\n storeDetailsMain,\n storeHeader,\n storeName,\n storeDetailsCloseButton,\n storeDistance,\n storeDetailsAvailabilityContainer,\n productAvailability,\n stockStatus,\n isPreferredStore,\n preferredStoreButton,\n removePreferredStoreButton,\n selectedStore\n } = selectedLocationProps;\n\n const storeAddress: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.Contacts);\n const storeHoursList = selectedStore?.StoreHours?.RegularStoreHours\n ? buildStoreHours(selectedStore.StoreHours.RegularStoreHours, mapResources(storeSelectorViewProps.resources))\n : [];\n const storeOpenFrom: string | undefined = secondsToTime(selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OpenTo);\n const locationOpen = { openFrom: storeOpenFrom, openTo: storeOpenTo };\n const storeNameValue = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\n const pickupInStoreAriaLabel: string = selectedLocationProps.resources.selectLocationAriaLabelFormat.replace(\n '{StoreName}',\n storeNameValue ?? ''\n );\n const telemetryContent = getTelemetryObject(\n storeSelectorViewProps.context.request.telemetryPageName!,\n storeSelectorViewProps.friendlyName,\n storeSelectorViewProps.telemetry\n );\n const payLoad = getPayloadObject('click', telemetryContent, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n const pickupInStoreButtonText: string = selectedLocationProps.resources.selectLocation;\n const selectStoreText = storeSelectorViewProps.resources.selectStoreText;\n const pickUpMethodLabel = storeSelectorViewProps.resources.pickUpMethodLabel;\n const pickUpOptionDropdownPlaceholderText: string = storeSelectorViewProps.resources.pickupOptionDropdownPlaceholderText;\n const orgUnitNumber = selectedStore?.OrgUnitAvailability?.OrgUnitLocation!.OrgUnitNumber;\n const productPickUpOptionList = storeSelectorViewProps.data.storeSelectorStateManager.result?.context?.deliveryOptions?.DeliveryOptions;\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, selectedLocationProps.deliveryOptions);\n const selectedLocation = storeSelectorViewProps.locationListProps?.find(location => location.location.OrgUnitNumber === orgUnitNumber);\n\n /**\n * Method to handle the pick up in store.\n * @returns Void.\n */\n const onPickupInStoreClickHandler = () => () => {\n selectedLocationProps.handlers.onSelected(selectedStore!.OrgUnitAvailability!.OrgUnitLocation!);\n };\n const canSelectPickUpMethod = !ArrayExtensions.hasElements(deliveryOptionList) ? (\n \n ) : (\n selectedLocation && (\n \n )\n );\n\n return (\n \n \n {storeDetailsCloseButton}\n {storeName}\n {storeDistance}\n \n \n
\n

{storeSelectorViewProps.resources.contactText}

\n {storeAddress && (\n
\n
\n )}\n {phoneNumber && (\n
\n \n {phoneNumber}\n
\n )}\n
\n
\n

{storeSelectorViewProps.resources.timeText}

\n {renderStoreHours(selectedStore?.StoreHours, storeHoursList, locationOpen, storeSelectorViewProps.resources)}\n
\n {productAvailability && (\n
\n

{productAvailability}

\n {stockStatus &&

{stockStatus}

}\n
\n )}\n
\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n {canSelectPickUpMethod}\n
\n );\n};\n\n/**\n * Store Selector View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst StoreSelectorViewComponent: React.FC> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Store-Selector.tsx file\n const {\n BodyContainerProps,\n storeResultContainerProps,\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n locationsMessage,\n search,\n state,\n spinner,\n maps,\n locationsList,\n noLocationsMessage,\n terms,\n storeDetailsModal,\n selectedLocation,\n bodyWrapperProps,\n data,\n context\n } = props;\n const selectedLocationReference = React.useRef(null);\n const [isDesktopPort, setIsDesktopPort] = React.useState(false);\n\n const isDesktopViewport = React.useCallback(() => {\n const portView = isMobile({ variant: VariantType.Browser, context: context.request });\n const isDesktopPorts = portView === 'md' || portView === 'xl' || portView === 'lg';\n setIsDesktopPort(isDesktopPorts);\n }, [context]);\n\n React.useEffect(() => {\n if (props.locationsList) {\n /**\n * Method to handle scrolling.\n */\n const scrollIntoView = () => {\n const selectedLocationDiv = (selectedLocationReference as React.RefObject).current;\n if (selectedLocationDiv !== null) {\n const offset = selectedLocationDiv.getBoundingClientRect();\n const parent = selectedLocationDiv.parentElement?.parentElement;\n if (parent && offset) {\n const totalHeight = parent.scrollTop + offset.top;\n parent.scrollTop = totalHeight - parent.clientHeight;\n }\n }\n };\n scrollIntoView();\n }\n }, [props.locationsList]);\n\n React.useEffect(() => {\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', isDesktopViewport);\n }\n isDesktopViewport();\n }, [isDesktopViewport]);\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\n\n const isDesktopView = viewport === 'md' || viewport === 'lg' || viewport === 'xl';\n\n if (!isDesktopView || !isDesktopPort) {\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n \n \n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n {maps}\n \n {selectedLocation && renderSelectedStore(selectedLocation, props)}\n \n \n \n \n {terms}\n \n );\n }\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n \n {maps}\n \n \n {terms}\n \n );\n};\n\nexport default StoreSelectorViewComponent;\n"],"names":["props","_props$config","_props$context","isOpen","setIsOpen","useState","zipCode","setZipCode","error","setError","alertActive","setAlertActive","modalBtn","useRef","inputRef","enableGenericTerritories","config","territory_data","territoryData","notFoundError","context","actionContext","requestContext","apiSettings","oun","app","ounNumberForUsSite","resources","notFound","notFoundZipcode","toggle","useEffect","addressFromZip","request","cookies","get","status","length","_props$context4","_props$context5","value","territory","Territory","isTerritoryMatched","pathName","url","requestUrl","pathname","hostName","hostname","item","name","includes","toLocaleLowerCase","pathKeyword","__reditectTo","_props$context2","_props$context3","redirectURL","matchingTerritory","find","toUpperCase","MsDyn365","isBrowser","window","location","href","brBaseUrl","mbBaseUrl","viewProps","_objectSpread","_handleZipCode","async","event","preventDefault","getAddressFromZipCode","actionAddressFromZipCode","GetAddressFromZipCodeInput","defaultTerritory","Object","keys","currentHostname","mainDomain","getMainDomain","set","JSON","stringify","domain","path","e","apiException","_props$context6","_props$context7","renderView","_config$logoImage","_config$logoImage2","React","className","Modal","autoFocus","fade","returnFocusRef","horizontalPosition","verticalPosition","ModalHeader","src","logoImage","alt","altText","ModalBody","headingWebShop","onSubmit","htmlFor","zipCodeLabel","newZealandZipCodeMsg","type","id","ref","placeholder","onChange","target","maxLength","onClick","_inputRef$current","current","submitBtnLabel","RichTextComponent","text","infoText","ModalFooter","footerContent","_props$cartlines","cartItem","cartlines","customGoToCartButton","goToCartButton","title","undefined","children","Node","assign","miniCartWrapper","renderModuleAttributes","cartIcon","FlyoutContainer","flyoutTitle","checkoutBlockedDueToUnavailableFunds","CartlinesWrapper","_renderCartlines","cartLines","map","cartLine","index","miniCartItemWrapper","key","cartline","storeLocation","remove","telemetry","totalPrice","CookieComplianceBanner","AlertProps","Content","acceptButton","links","externalConsent","_window","consentChoosed","setConsentCookie","reload","CookieConsent","consent","necessary","addEventListener","Module","Alert","color","FooterItemView","render","FooterItem","Link","user","isAuthenticated","this","_renderElement","heading","HeadingContainer","linkText","image","EditableLink","PvaChatConnector","componentDidMount","isOboRequest","botFrameworkCDNURL","pvaChatConnectorBotFrameworkCDNURL","script","document","createElement","crossOrigin","body","appendChild","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","uuid","REGEX","test","byteToHex","i","push","toString","substr","arr","offset","arguments","toLowerCase","validate","TypeError","options","buf","rnds","random","constructor","CartAmountTrigger","ProactiveChatTrigger","super","totalInCart","min","proactiveOnCartAmountMin","max","proactiveOnCartAmountMax","debug","cart","_getCart","isEmpty","TotalAmount","retVal","getContextProvider","eCommerceCustIsProactiveChat","eCommerceCustProactiveType","eCommerceCustProactiveShoppingCartAmount","getMessage","proactiveOnCartAmountMessage","proactiveDefaultMessage","getCartState","CartNumberOfItemsTrigger","numberOfItems","proactiveOnCartNoOfItemsMin","proactiveOnCartNoOfItemsMax","TotalItems","eCommerceCustProactiveShoppingCartNumberOfItems","proactiveOnCartNoOfItemsMessage","CartSpecificProductTrigger","product","isValid","CartLines","_cart$cart$CartLines","_cart$cart$CartLines2","proactiveOnCartSpecificProductList","_this$props$config$pr","j","_this$props$config$pr2","ItemId","eCommerceCustProactiveShoppingCartSpecificProduct","proactiveOnCartSpecificProductMessage","ProactiveChatNames","DateRangeTrigger","start","_toDate","proactiveOnDateRangeStart","end","proactiveOnDateRangeEnd","now","Date","setHours","getTime","DateRange","eCommerceCustProactiveFromDate","toUTCString","eCommerceCustProactiveToDate","proactiveOnDateRangeMessage","date","dateParts","split","FromSpecificPageTrigger","proactiveOnFromSpecificPageList","fromSpecificPageTrimmed","trim","referrer","indexOf","FromSpecificPage","eCommerceCustProactiveCameFromPage","proactiveOnFromSpecificPageMessage","PageVisitTrigger","visits","cookieName","expdate","setTime","isConsentGiven","_updateVisitCounter","proactiveOnPageVisitNumber","clear","expires","PageVisits","eCommerceCustProactiveNumberOfVisits","proactiveOnPageVisitMessage","SpecificCountryRegionTrigger","customerCountryCode","suggestedMarket","proactiveOnSpecificLocation","eCommerceCustProactiveCountryCode","SpecificLocation","proactiveOnSpecificCountryRegionMessage","SpecificPageTrigger","proactiveOnSpecificPageList","specificPageTrimmed","SpecificPage","proactiveOnSpecificPageMessage","WaitOnTimeTrigger","proactiveOnWaitTimeSeconds","isNaN","waitTimeInMilliseconds","Number","triggerTime","WaitOnTime","eCommerceCustProactiveTimeOnPage","proactiveOnWaitTimeMessage","ProactiveTriggers","userId","uuidv4","_getContext","data","enabled","timeout","message","_proactiveCheck","exception","provider","_getProvider","_this$props$context$r","eCommerceOperatingUnitNumber","eCommerceBaseUrl","baseUrl","eCommerceDataAreaId","channel","InventLocationDataAreaId","UserId","AccountNumber","customerAccountNumber","Email","emailAddress","FirstName","firstName","anonymousUserName","LastName","lastName","Name","eCommerceCustPageURL","eCommerceCustChatType","proactiveChatEnabled","proactive","_isProactive","getChatWrapperStyle","position","top","right","bottom","left","zIndex","display","justifyContent","getMaximizedChatWrapperStyle","isMobileDevice","height","width","padding","chatHeight","chatWidth","getChatButtonStyle","alignItems","backgroundColor","startChatButtonBackgroundColor","startChatButtonTextColor","borderColor","startChatButtonBorderColor","borderRadius","startChatButtonBorderRadius","borderStyle","startChatButtonBorderStyle","borderWidth","startChatButtonBorderWidth","storeLogoURL","cursor","outlineStyle","alignSelf","boxShadow","WebkitBoxShadow","MozBoxShadow","getButtonStoreLogoStyle","headerBackgroundColor","headerTextColor","marginRight","boxSizing","getChatStoreLogoStyle","margin","getChatMessagesStyle","minimized","getChatMessageHeader","chatHeaderHeight","backgroundImage","headerBackgroundImageURL","backgroundRepeat","flexDirection","chatBorderStyle","chatBorderWidth","getMinimizeButtonStyle","borderTop","borderLeft","borderRight","borderBottom","marginTop","getCloseButtonStyle","border","getChatMessageContent","chatBorderColor","getProactiveWrapperStyle","getProactiveMessageHeader","getProactiveMessageContent","getProactiveButtonStyle","outline","fontFormat","font","join","CommerceChatStore","setNewMessage","setNewMessageAction","powervaDirectlineTokenURL","botID","tenantID","fetch","method","then","r","json","token","pvaChatConnectorPowervaDirectlineTokenURL","pvaChatConnectorBotID","pvaChatConnectorTenantID","_ref","dispatch","next","action","payload","language","navigator","_activity$from","activity","from","role","triggerQuery","ReactWebChat","WebChat","setUserId","useMemo","ctx","directLine","createDirectLine","directLineToken","commerceChatStore","store","createStore","actionHandler","styleOptions","bubbleStyling","bubbleBackground","bubbleTextColor","bubbleBorderColor","bubbleBorderRadius","bubbleBorderStyle","bubbleBorderWidth","bubbleFromUserBackground","bubbleFromUserTextColor","bubbleFromUserBorderColor","bubbleFromUserBorderRadius","bubbleFromUserBorderStyle","bubbleFromUserBorderWidth","getBubbleStyling","avatarStyling","avatarBorderRadius","avatarSize","botAvatarBackgroundColor","botAvatarImage","botAvatarInitials","userAvatarBackgroundColor","userAvatarImage","userAvatarInitials","showAvatarInGroup","getAvatarStyling","suggestedActionStyling","suggestedActionLayout","suggestedActionBackground","suggestedActionTextColor","suggestedActionBorderColor","suggestedActionBorderRadius","suggestedActionBorderStyle","suggestedActionBorderWidth","suggestedActionDisabledBorderStyle","suggestedActionDisabledBorderWidth","suggestedActionDisabledTextColor","suggestedActionHeight","suggestedActionImageHeight","suggestedActionsCarouselFlipperCursor","suggestedActionsCarouselFlipperBoxWidth","suggestedActionsCarouselFlipperSize","suggestedActionsFlowMaxHeight","suggestedActionsStackedHeight","suggestedActionsStackedOverflow","suggestedActionsStackedLayoutButtonMaxHeight","suggestedActionsStackedLayoutButtonTextWrap","getSuggestedActionStyling","otherStyling","groupTimestamp","sendTimeout","sendTimeoutForAttachments","timestampColor","timestampFormat","notificationDebounceTimeout","hideToaster","toasterHeight","toasterMaxHeight","toasterSingularMaxHeight","toastFontSize","toastIconWidth","toastSeparatorColor","toastTextPadding","toastErrorBackgroundColor","toastErrorColor","toastInfoBackgroundColor","toastInfoColor","toastSuccessBackgroundColor","toastSuccessColor","toastWarnBackgroundColor","toastWarnColor","typingAnimationBackgroundImage","typingAnimationDuration","typingAnimationHeight","typingAnimationWidth","videoHeight","markdownExternalLinkIconImage","markdownRespectCRLF","internalLiveRegionFadeAfter","accent","subtle","getOtherStyling","hideUploadButton","primaryFont","getChatStyleOptions","userID","INVALID_TOKEN","loaded","setLoaded","setMinimized","newMessage","setToken","isProactive","setIsProactive","proactiveMessage","setProactiveMessage","closed","setClosed","setProvider","isMobile","variant","VariantType","Browser","Viewport","chatStyle","getChatStyling","ChatWrapperStyle","MaximizedChatWrapperStyle","ChatButtonStyle","ButtonStoreLogoStyle","ChatStoreLogoStyle","ChatMessagesStyle","ChatMessageHeader","MinimizeButtonStyle","CloseButtonStyle","ChatMessageContent","ProactiveWrapperStyle","ProactiveMessageHeader","ProactiveMessageContent","ProactiveButtonStyle","RedDotStyle","background","handleMaximizeButtonClick","getDirectLineToken","catch","contextProvider","ContextProvider","prov","init","setTimeout","isValidToken","style","fontWeight","fontSize","chatButtonHeader","chatButtonText","flexGrow","handleMinimizeButtonClick","handleCloseButtonClick","version","viewBox","xmlSpace","d","fill","ChatCore","unableToLoadChatMessage","p","interval","setInterval","clearInterval","Chat","CookieComplianceAcceptButton","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","telemetryContent","onClose","payLoad","getPayloadObject","attributes","getTelemetryAttributes","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","forEach","link","contentAction","etext","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","additionalProperties","onTelemetryClick","Msdyn365","editProps","onTextChange","CookieCompliance","getTelemetryObject","telemetryPageName","friendlyName","handleLinkTextChange","linkIndex","_this$props$config$ac","actionLinks","handleContentChange","content","state","visible","cookieRef","_onDismiss","setState","acceptCookiesAriaLabel","moduleConfig","onDismiss","moduleProps","classnames","onEdit","ArrayExtensions","hasElements","OrderInfomation","orderInformationProps","salesId","receiptId","createdDate","count","amount","channelReferenceId","channelName","channelAddress","SalesLine","_ref2","salesLineProps","salesLine","buyAgainButton","errors","GroupDelivery","_ref3","deliveryProps","Group","_ref4","groupProps","delivery","address","salesLinesProps","salesLines","isCashAndCarryTransaction","LineId","deliveryType","shipment","trackingInfo","salesStatus","showTimeslot","pickupProps","pickupDateTimeslot","Groups","_ref5","groupsProps","groups","group","OrderSummary","_ref6","orderSummaryProps","subtotal","shipping","tax","totalAmount","earnedPoints","Payment","_ref7","paymentMethodsProps","methods","Help","_ref8","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","_ref9","viewModes","tableViewActions","table","placedBy","alert","loading","orderInfomation","orderSummary","payment","help","Iframe","iframeRef","srcURL","URL","protocol","iframeClassName","Heading","_createHeading","IframeContainer","IFrame","_createIframe","cookieConsentAccepted","_renderAlert","cookieConsentRequiredMessage","targetURL","iframeAriaLabel","IFrameView","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","_onSelect","deliveryCode","currentTarget","getAttribute","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","Code","Description","tabIndex","onKeyDown","StoreSelectorLocationLines","onClickHandler","orgUnitLocation","OrgUnitNumber","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","itemAvailabilities","enableOutOfStockCheck","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","_availabilityWithHour","OrgUnitAvailability","OrgUnitLocation","InventoryLocationId","InventLocationId","StockLevelLabel","_mapResources","contactInfoHeader","contactText","storeHoursHeader","timeText","availabilityInfoHeader","availabilityText","closedText","storeHoursClosedText","outOfStock","outOfStockText","inStock","inStockText","currentLocation","selectedStoreLocationText","selectLocation","selectStoreText","selectLocationAriaLabelFormat","selectStoreAriaFormatText","setAsPreferredStoreText","setAsPreferredStoreTextAriaLabel","preferredStoreText","preferredStoreAriaLabel","pickupDeliveryOptionErrorMessage","days","monday","storeHoursMondayText","tuesday","storeHoursTuesdayText","wednesday","storeHoursWednesdayText","thursday","storeHoursThursdayText","friday","storeHoursFridayText","saturday","storeHoursSaturdayText","sunday","storeHoursSundayText","mondayFull","storeHoursMondayFullText","tuesdayFull","storeHoursTuesdayFullText","wednesdayFull","storeHoursWednesdayFullText","thursdayFull","storeHoursThursdayFullText","fridayFull","storeHoursFridayFullText","saturdayFull","storeHoursSaturdayFullText","sundayFull","storeHoursSundayFullText","storeCounter","componentDidUpdate","previousProps","selectedStoreLocationId","locations","_stores","_sortStores","reaction","show","displayList","_renderStoreLocation","_store$OrgUnitAvailab","deliveryOptions","OrgUnitPickUpDeliveryModes","_store$OrgUnitAvailab2","selected","StoreSelectorLocationLineItemComponent","storeHours","StoreHours","preferredDistanceUnit","isCurrentLocation","isInStock","ItemAvailabilities","hideStockStatus","handlers","onSelected","onLocationSelected","onSetAsPreferredStore","onRemovePreferredStore","stockStatusLabel","storeLocatorView","preferredStoreLocationId","isPreferredStoreEnabled","isLocationDisabled","storePickUpOptionList","DeliveryOptions","productPickUpOptionList","productPickUpDeliveryOptions","filteredPickupMode","shouldShowIndex","stores","isPreferredStore","_value$OrgUnitAvailab","filter","__decorate","observable","observer","StoreSelectorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","keyCode","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Enter","Space","onShowAllStores","_searchTextChanged","inputValue","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","blur","performSearch","_onChangeHandler","filterPickupModeSelected","Promise","resolve","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","shouldDisplayList","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","TelemetryConstant","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","autoComplete","searchInputAriaLabel","onKeyUp","StoreSelectorEmptyMessage","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","StoreSelectorFoundLocationsMessage","searchRadius","isSeeAllStore","storeCountMessage","milesShortText","storeCountMessageInKm","storeAllCountMessage","replace","PickUpOptionList","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","contains","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","componentWillUnmount","removeEventListener","pickupListOptionMenuText","pickupmodeList","stopPropagation","isExpandSiteOptionsState","secondsToTime","seconds","hours","Math","floor","ampm","divisorForMinutes","getShortTimeString","day","getFullTimeString","buildHoursDisplayInfo","startDay","endDay","hoursInfo","startDayShort","startDayFull","endDayShort","endDayFull","timeRange","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","dateForLookup","buildStoreHoursString","buildStoreHours","storeHoursList","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","storeSelectorLocationLineItemComponentActions","deliveryMode","buildDistanceString","distance","onPickupModeSelectHandler","pickupMode","onSetPreferredStoreClickHandler","removePreferredStoreHandler","onChangeHandler","matchDeliveryOptions","productdeliveryOptions","deliveryOption","pickup","_delivery","storeName","OrgUnitName","distanceAsString","Distance","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","resourceLabel","stockLabel","stockText","canSelectLocation","pickupInStoreButtonText","pickupInStoreAriaLabel","PickupInStore","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","deliveryOptionList","isError","renderStoreHours","RegularStoreHours","displayTime","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","pickUpButtonClickHandler","renderPickupModes","onPickupInStoreClickHandler","_props$selectedStore","selectedStore","_props$selectedStore2","_props$selectedStore3","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","parentClassName","storeDetailsMain","tag","storeHeader","storeDetailsCloseButton","Button","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","pickUpDeliveryOptionButton","pickupModes","preferredStoreButton","removePreferredStoreButton","StoreSelector","renderSelectedStore","shouldHideInventory","preferredStore","hasEnabledOutOfStockCheck","availabilitiesWithHours","result","storeSelectorStateManager","storeLocations","selectedStoreResources","_selectedStore$OrgUni3","selectedProps","StoreId","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","termsOfServiceLink","handleHeadingChange","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","_location$OrgUnitPick","some","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","storeId","mode","setPreferredStoreLocation","Latitude","Longitude","clearPreferredStore","setSelectedStoreLocationId","_setSelectedStore","searchTerm","isSearchInProgress","isSeeAllStoreValue","geoLocate","_updateLocations","latitude","longitude","shouldShowAllStores","_navigator","isDialogOpen","geolocation","getCurrentPosition","coords","PERMISSION_DENIED","_closeDialog","_storeSelectorStateMa","parentElementRef","focus","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","input","preferredLocationId","storeLocationList","orgUnitStoreInformation","showMapViewLink","isDialog","setOrgUnitStoreInformation","radius","lookupRadius","searchRadiusUnit","calRadius","distanceUnitValue","modeDefault","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","RecordId","warning","selectedLocation","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","_this$props$data$stor6","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$context","_this$props$data$stor2","_this$props$data$stor3","_this$props$data$stor4","_this$props$data$stor5","loadMapApi","BingMapsEnabled","lang","locale","market","_this$props$data$stor7","_this$props$data$stor8","_this$props$context$a","_this$props$data$stor9","when","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","isSameContext","shouldComponentUpdate","_storeSelectorStateMa2","_storeSelectorStateMa3","_sortLocation","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","appConfig","slots","maps","mapSlot","isInlineView","isLocatorView","listMapViewState","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","isEnableOutofStock","enableStockCheck","sortLocation","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","ModuleProps","classname","onClosed","isMobileView","HeaderContainerProps","HeaderProps","FooterContainerProps","BodyContainerProps","bodyWrapperProps","storeResultContainerProps","mapContainerProps","storeDetailsModal","locationsMessage","search","spinner","locationsList","outOfStockThreshold","noLocationsMessage","terms","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","_store$OrgUnitAvailab3","selectedStoreLocation","lineResources","_store$OrgUnitAvailab4","locationOpen","openFrom","openTo","renderDeliveryOptions","renderBody","_props$data$operation","b2bRequestsStatus","continueShoppingButtonTitle","operationRequests","headingForEmptyRequestStatus","textForEmptyRequestStatus","getUrlSync","toggleBopisHandler","isBopisSelected","_cartLine$pickUpInSto","pickUpInStore","toggleBopis","onChangeStoreHandler","_cartLine$pickUpInSto2","renderCartLine","storeSelector","isMultiplePickUp","emailDeliveryModeCode","outOfStockErrorMessage","addToWishlist","renderGroupBopisBlock","_cartLine$data2","DeliveryMode","changeStoreDisplayText","shipInsteadDisplayText","pickItUpDisplayText","puckUpinStoreAttribute","addToOrderTemplate","renderCartlinesInternal","itemIndex","renderBopisBlock","_cartLine$data","shipToAddressDisplayText","pickUpAtStoreWithLocationText","ContainerProps","orgUnitName","renderCartlines","waitingComponent","cartLoadingStatus","isCartDataResult","multiplePickUpEnabled","emptyCart","renderCartLinesGroupHeader","_cartLine$pickUpInSto6","pickUpText","shippingText","emailshippingText","payInvoicesDisplayText","groupTitle","IsInvoiceLine","StringExtensions","isNullOrEmpty","renderCartLinesGroupTitle","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","_cartLine$pickUpInSto5","itemLabel","itemsLabel","countTitle","_props$cart2","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","_props$cart6","updatedTitle","cartTitle","totalItemsInCart","orderSummaryLineitems","orderTotal","checkoutAsSignInUserButton","checkoutAsGuestButton","renderOrderSummaryCheckoutButton","hasInvoiceLine","promotionOptions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","renderCartLinesGroup","cartLinesGroup","_props$context$action","_props$context$action2","cartlineId","countItem","reduce","_item$data$cartline$Q","_item$data","Quantity","countItems","EmailDeliveryModeCode","cartDataResult","orderSummaryHeading","OrderSummaryWrapper","renderInvoiceSummarylines","invoiceSummaryLines","orderSummaryItems","invoices","giftCard","loyalty","invoiceSummaryLineitems","OrderSummaryItems","renderOrderSummarylines","orderSummaryLines","totalDiscounts","otherCharge","errorData","OrderSummaryErrors","Wrapper","header","_props$cart","promoCode","expressCheckoutButton","ExpressCheckoutSectionWrapper","createTemplateFromCartButton","renderOrderSummaryCheckout","SignInLoading","modal","modalBody","icon","SignInButton","signIn","viewState","defaultAADConainer","aadConainer","signInSection","signUpSection","signInSectionHeading","signInLocalAccount","signInSocialAccount","signUpSectionHeading","signInB2BAccount","signUpDescription","isShowLoading","localAccount","items","forgetPassword","disclaimer","signInButton","wrapper","label","LocalAccount","socialAccounts","button","SocialAccount","b2bSignUpButtonAriaLabel","b2bSignUpButtonText","signUpButton","B2BAccount","StoreSelectorFoundLocationsMessageComponent","ContactInformationType","Phone","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","storeHoursDayPeriod","storeHoursDay","productDeliveryOptions","productDeliveryOption","PickUpMethodDropdownComponent","pickUpStatesProps","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","dataset","description","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","PickUpButtonComponent","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","preferredStoreAttribute","removePreferredStoreAttribute","_props$data$storeSele","renderStoreLocations","selectedLocationReference","_props$data$storeSele2","_props$locationListPr","renderStoreLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","parseInt","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","orgUnitNumber","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","scrollIntoView","_selectedLocationDiv$","getBoundingClientRect","totalHeight","viewport","_data$storeSelectorSt","displayMap"],"sourceRoot":""}