{"version":3,"file":"static/js/18.6e48eadb4865d0dc4f1c.chunk.js","mappings":"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","sources":["webpack://nile.commerce.online/./src/utilities/dropdown-quantity/DropdownQuantity.tsx?5e7c","webpack://nile.commerce.online/./src/themes/nile-theme/views/buybox.view.tsx?7f6f","webpack://nile.commerce.online/./src/themes/nile-theme/views/components/price.component.tsx?6744","webpack://nile.commerce.online/./src/themes/nile-theme/views/navigation-menu.view.tsx?5abc","webpack://nile.commerce.online/./src/themes/nile-theme/views/order-confirmation.view.tsx?9b48","webpack://nile.commerce.online/./src/themes/nile-theme/views/reviews-list.view.tsx?1c4e","webpack://nile.commerce.online/./src/modules/cookie-compliance/components/accept-button.tsx?8e73","webpack://nile.commerce.online/./src/modules/cookie-compliance/components/links.tsx?97b8","webpack://nile.commerce.online/./src/modules/cookie-compliance/cookie-compliance.tsx?02ac","webpack://nile.commerce.online/./src/modules/cookie-compliance/cookie-compliance.view.tsx?a33f","webpack://nile.commerce.online/./src/modules/fabrikam/views/order-details.view.tsx?1ce1","webpack://nile.commerce.online/./src/modules/iframe/iframe.tsx?65fe","webpack://nile.commerce.online/./src/modules/iframe/iframe.view.tsx?a7d6","webpack://nile.commerce.online/./src/modules/store-selector/components/store-pickup-option-list.tsx?7a25","webpack://nile.commerce.online/./src/modules/store-selector/components/store-selector-location-lines.tsx?87ff","webpack://nile.commerce.online/./src/modules/store-selector/components/store-selector-search-form.tsx?fb9a","webpack://nile.commerce.online/./src/modules/store-selector/components/store-selector-small-components.tsx?4335","webpack://nile.commerce.online/./src/modules/store-selector/components/pickup-option-list.tsx?dae0","webpack://nile.commerce.online/./src/modules/store-selector/components/selected-store/selected-store.tsx?bfbc","webpack://nile.commerce.online/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?fe27","webpack://nile.commerce.online/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?923d","webpack://nile.commerce.online/./src/modules/store-selector/store-selector.tsx?e416","webpack://nile.commerce.online/./src/modules/store-selector/store-selector.view.tsx?71a6","webpack://nile.commerce.online/./src/modules/adventureworks/views/cart.view.tsx?3909","webpack://nile.commerce.online/./src/modules/adventureworks/views/order-details.view.tsx?027b","webpack://nile.commerce.online/./src/modules/adventureworks/views/store-selector.view.tsx?ccdd"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { debounce } from 'lodash';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IdropdownQuantityProps } from './DropdownQuantity.props';\r\n\r\ninterface IdropdownQuantityState {\r\n currentInput: number;\r\n isUpdating: boolean;\r\n}\r\n\r\n/**\r\n * Quantity Component - This component is used to add or remove quantity.\r\n */\r\n@observer\r\nexport default class DropdownQuantity extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n min: 1\r\n };\r\n\r\n private readonly _minValue: number;\r\n\r\n private readonly inputRef: React.RefObject = React.createRef();\r\n\r\n constructor(props: IdropdownQuantityProps) {\r\n super(props);\r\n this.state = { currentInput: props.currentCount ?? 1, isUpdating: false };\r\n this._handleChange = this._handleChange.bind(this);\r\n this._minValue = this.props.min ?? DropdownQuantity.defaultProps.min!;\r\n }\r\n\r\n public static getDerivedStateFromProps(props: Readonly, state: IdropdownQuantityState): IdropdownQuantityState {\r\n const nextState = { ...state };\r\n\r\n if (props.disabled && !state.isUpdating) {\r\n nextState.isUpdating = true;\r\n }\r\n\r\n if (!props.disabled && state.isUpdating) {\r\n nextState.currentInput = props.currentCount ?? 1;\r\n nextState.isUpdating = false;\r\n }\r\n return nextState;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { max, options } = this.props;\r\n\r\n const currentValue = this.state.currentInput;\r\n\r\n return (\r\n \r\n {options.map(n => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n }\r\n\r\n private _handleChange(e: React.ChangeEvent): void {\r\n let currentValue = Number.parseInt(e.target.value, 10);\r\n if (!Number.isNaN(currentValue)) {\r\n currentValue = Math.min(this.props.max, Math.max(this._minValue, currentValue));\r\n }\r\n this.setState({ currentInput: currentValue }, this._handleUpdateState);\r\n }\r\n\r\n /**\r\n * Updates html element and triggers callbacks whenever state is changed.\r\n */\r\n private readonly _handleUpdateState = () => {\r\n debounce(() => {\r\n if (Number.isNaN(this.state.currentInput)) {\r\n return;\r\n }\r\n\r\n // Due of usage debouncer, we may ignore onChange return value\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n\r\n const inputElement =\r\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\r\n if (inputElement) {\r\n inputElement.setAttribute('aria-valuenow', this.state.currentInput.toString());\r\n inputElement.setAttribute('value', this.state.currentInput.toString());\r\n }\r\n }, 200)();\r\n };\r\n\r\n private readonly _validateMin = (): void => {\r\n if (Number.isNaN(this.state.currentInput)) {\r\n this.setState({ currentInput: this._minValue }, this._handleUpdateState);\r\n } else {\r\n const currentValue = Math.min(this.props.max, Math.max(this._minValue, this.state.currentInput));\r\n if (currentValue !== this.state.currentInput) {\r\n this.setState({ currentInput: currentValue }, this._handleUpdateState);\r\n } else {\r\n this._handleUpdateState();\r\n }\r\n }\r\n };\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n IBuyboxAddToCartViewProps,\r\n IBuyboxAddToOrderTemplateViewProps,\r\n IBuyboxAddToWishlistViewProps,\r\n IBuyboxCallbacks,\r\n IBuyboxData,\r\n IBuyboxFindInStoreViewProps,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxProps,\r\n IBuyboxShopSimilarLookViewProps,\r\n IBuyboxState,\r\n IBuyboxViewProps\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport { ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { DropdownQuantity } from '../../../utilities/dropdown-quantity';\r\n\r\nimport {\r\n IBuyboxProps as IBuyboxExtentionProps,\r\n IBuyboxResources as IBuyboxExtentionResources\r\n} from '../definition-extensions/buybox.ext.props.autogenerated';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { ProductDimensionValue, ProductDimensionValueInventoryAvailability } from '@msdyn365-commerce/retail-proxy';\r\nimport { IProductDimensionsWithAvailabilitiesFull, ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\r\nimport { useEffect, useState } from 'react';\r\n\r\ninterface IDimensionForSelectedVariant extends ProductDimensionFull, IProductDimensionsWithAvailabilitiesFull {}\r\n\r\nconst colorRecords: Record = {};\r\nconst colorInStock: string[] = [];\r\nconst _strikeSVG =\r\n 'data:image/svg+xml;utf8,' +\r\n \"\" +\r\n \"\";\r\n\r\nconst updateSwatchTitles = (dimensions: IDimensionForSelectedVariant[]) => {\r\n const dimensionValues = dimensions.map(d => d.DimensionValues);\r\n const dimensionValuesFlat: ProductDimensionValue[] = [];\r\n // @ts-ignore This comes up in the JS as a mobx array but in the ts it's not. So we have to flatten it against ts rules.\r\n dimensionValues.forEach(dv => dimensionValuesFlat.push(...dv));\r\n const swatches = document.querySelectorAll('.msc-swatch-container>button');\r\n if (swatches && swatches.length) {\r\n for (let i = 0; i < swatches.length; i++) {\r\n const title = swatches[i].getAttribute('title');\r\n if (title) {\r\n const idx = dimensionValuesFlat.findIndex(dv => dv?.Value === title);\r\n if (idx > -1) {\r\n const extensionProperty = dimensionValuesFlat[idx]?.ExtensionProperties?.find(ep => ep.Key === 'swatch-title');\r\n if (extensionProperty) {\r\n swatches[i].setAttribute('title', extensionProperty.Value?.StringValue || title);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nfunction checkAvailability(p: ProductDimensionValueInventoryAvailability) {\r\n return p.PhysicalAvailableInventoryLevelCode === 'AVAIL';\r\n}\r\n\r\nconst BuyboxView: React.FC> = props => {\r\n const {\r\n ModuleProps,\r\n MediaGalleryContainerProps,\r\n ProductInfoContainerProps,\r\n addToCart,\r\n addToOrderTemplate,\r\n addToWishlist,\r\n telemetryContent,\r\n configure,\r\n /* description,*/ findInStore,\r\n quantity,\r\n price,\r\n title,\r\n rating,\r\n callbacks,\r\n state,\r\n resources,\r\n inventoryLabel,\r\n shopSimilarLook,\r\n keyInPrice,\r\n quantityLimitsMessages,\r\n max,\r\n shopSimilarDescription,\r\n unitOfMeasure,\r\n data\r\n } = props;\r\n const [previousSelection, setPreviousSelection] = useState(false);\r\n useEffect(() => {\r\n if (document) {\r\n //For best friends + other carousel items\r\n const imgCollect2 = document.querySelectorAll(\r\n '.msc-product__dimensions img.msc-swatch-container__item__image'\r\n );\r\n if (imgCollect2.length > 0) {\r\n imgCollect2.forEach(node => {\r\n // check if colour is completely sold out, if yes, color should remain crossed out\r\n if (node.classList.contains('msc-swatch-container__item__disabled')) {\r\n const thisColour = node.src;\r\n node.src = _strikeSVG;\r\n node.style.backgroundImage = \"url('\" + thisColour + \"')\";\r\n //colorRecords[node.title] === undefined ? '' : \"url('\" + colorRecords[node.title] + \"')\";\r\n node.style.maxWidth = '20px';\r\n }\r\n // if (\r\n // node.classList.contains('msc-swatch-container__item__selected') &&\r\n // !node.classList.contains('msc-swatch-container__item__disabled')\r\n // ) {\r\n // const thisColour = node.src;\r\n // node.src = thisColour;\r\n // }\r\n });\r\n }\r\n }\r\n /* */\r\n }, [data]);\r\n\r\n if (MsDyn365.isBrowser) {\r\n const dimensions = data.productDimensions.result;\r\n if (dimensions) {\r\n updateSwatchTitles(dimensions);\r\n if (dimensions[0].dimensionValuesWithInventory !== undefined) {\r\n var availableColors = dimensions[0].dimensionValuesWithInventory.filter(checkAvailability);\r\n availableColors.forEach(c => {\r\n if (c.DimensionValue?.Value !== undefined && !colorInStock.includes(c.DimensionValue?.Value)) {\r\n colorInStock.push(c.DimensionValue.Value);\r\n }\r\n });\r\n }\r\n }\r\n\r\n const colorlabel = document.querySelector('.ms-buybox__dropdown-quantity-label[for=\"ms-buybox__dropown-quantity-input-1\"]');\r\n const colorswatches = colorlabel?.nextElementSibling;\r\n var colornamecontainer = document.createElement('span');\r\n\r\n if (colorlabel && colorlabel.children && colorlabel.children.length === 1) {\r\n colorlabel?.append(colornamecontainer);\r\n if (colorswatches) {\r\n colorswatches.addEventListener('click', e => {\r\n let target = e.target as HTMLElement;\r\n if (\r\n target.classList.contains('msc-swatch-container__item') \r\n // &&\r\n // !target.classList.contains('msc-swatch-container__item__disabled')\r\n ) {\r\n let colorname = target.title;\r\n colornamecontainer.innerText = `: ${colorname}`;\r\n }\r\n });\r\n }\r\n }\r\n if (colornamecontainer) {\r\n colornamecontainer.innerText = `: ${props.context.request.query?.color ?? ''}`;\r\n }\r\n /* Task 1217 & 1312 */\r\n\r\n const selectedSwatch = document.querySelectorAll(\r\n '.ms-buybox__dropdown .msc-swatch-container img.msc-swatch-container__item__selected'\r\n );\r\n if (selectedSwatch[0] && colorInStock.includes(selectedSwatch[0].title)) {\r\n const imgCollect = document.querySelectorAll(\r\n '.ms-buybox__dropdown .msc-swatch-container img.msc-swatch-container__item__image'\r\n );\r\n if (imgCollect.length > 0) {\r\n imgCollect.forEach((node, i) => {\r\n if (colorRecords[node.title] === undefined && !node.src.includes('svg+xml')) {\r\n colorRecords[node.title] = node.src;\r\n }\r\n // check if colour is completely sold out, if yes, color should remain crossed out\r\n let b: boolean = colorInStock.includes(node.title);\r\n if (node.classList.contains('msc-swatch-container__item__disabled') || !b) {\r\n node.src = _strikeSVG;\r\n node.style.backgroundImage =\r\n colorRecords[node.title] === undefined ? '' : \"url('\" + colorRecords[node.title] + \"')\";\r\n node.style.maxWidth = '40px';\r\n }\r\n if (\r\n node.classList.contains('msc-swatch-container__item__selected') &&\r\n !node.classList.contains('msc-swatch-container__item__disabled') &&\r\n b\r\n ) {\r\n node.src = colorRecords[node.title];\r\n }\r\n });\r\n }\r\n if (colorInStock.length > 0) {\r\n const inventoryLabel = document.querySelector('.ms-buybox__inventory-info');\r\n const selectedTitle = document.querySelector('.msc-swatch-container__item__selected');\r\n // hide 'OOS' text when out of stock size is selected\r\n if (inventoryLabel !== null && selectedTitle !== null) {\r\n inventoryLabel.style.display = colorInStock.includes(selectedTitle.title) ? 'none' : 'block';\r\n }\r\n }\r\n const swatchContainers = document.querySelectorAll('.msc-swatch-container');\r\n if (swatchContainers) {\r\n for (let i = 0; i < swatchContainers.length; i++) {\r\n const children = swatchContainers[i].children;\r\n let hasSelected = false;\r\n for (let j = 0; j < children.length; j++) {\r\n if (children[j] && children[j].classList.contains('msc-swatch-container__item__selected')) {\r\n hasSelected = true;\r\n break;\r\n }\r\n }\r\n if (!hasSelected) {\r\n // page loaded for first time, if swatch hasn't been selected: select the first available OR first\r\n let childToSelect = children[0] as HTMLElement;\r\n for (let j = 0; j < children.length; j++) {\r\n if (!children[j].classList.contains('msc-swatch-container__item__disabled')) {\r\n childToSelect = children[j] as HTMLElement;\r\n hasSelected = true;\r\n break;\r\n }\r\n }\r\n childToSelect.click();\r\n } else if (!previousSelection) {\r\n const sizeSwatches = document.querySelectorAll(\r\n '.ms-buybox__dropdown .msc-swatch-container button.msc-swatch-container__item'\r\n );\r\n\r\n // 1312 - size swatches fix\r\n let sizeSelected = false;\r\n if (sizeSwatches.length > 0) {\r\n sizeSwatches.forEach(size => {\r\n if (\r\n size.classList.contains('msc-swatch-container__item__selected') &&\r\n !size.classList.contains('msc-swatch-container__item__disabled')\r\n ) {\r\n sizeSelected = true;\r\n }\r\n });\r\n if (!sizeSelected) {\r\n let clicked = false;\r\n sizeSwatches.forEach(size => {\r\n if (!size.classList.contains('msc-swatch-container__item__disabled') && !clicked) {\r\n size.click();\r\n clicked = true;\r\n setPreviousSelection(true);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const imgCollect = document.querySelectorAll(\r\n '.ms-buybox__dropdown .msc-swatch-container img.msc-swatch-container__item__image'\r\n );\r\n if (imgCollect.length > 0) {\r\n imgCollect.forEach(node => {\r\n if (colorRecords[node.title] === undefined && !node.src.includes('svg+xml')) {\r\n colorRecords[node.title] = node.src;\r\n }\r\n // check if colour is completely sold out, if yes, color should remain crossed out\r\n let b: boolean = colorInStock.includes(node.title);\r\n if (node.classList.contains('msc-swatch-container__item__disabled') || !b) {\r\n node.src = _strikeSVG;\r\n node.style.backgroundImage =\r\n colorRecords[node.title] === undefined ? '' : \"url('\" + colorRecords[node.title] + \"')\";\r\n node.style.maxWidth = '40px';\r\n }\r\n if (\r\n node.classList.contains('msc-swatch-container__item__selected') &&\r\n !node.classList.contains('msc-swatch-container__item__disabled') &&\r\n b\r\n ) {\r\n node.src = colorRecords[node.title];\r\n }\r\n });\r\n }\r\n }\r\n\r\n /* */\r\n }\r\n\r\n return (\r\n \r\n {props.mediaGallery}\r\n \r\n
\r\n {title}\r\n {addToWishlist && addToWishlist.button}\r\n
\r\n\r\n {price}\r\n {unitOfMeasure}\r\n {addToWishlist && addToWishlist.errorBlock}\r\n\r\n {/*{props.bulkPurchaseLink}*/}\r\n {/* {description} */}\r\n
\r\n {configure && _renderConfigure(configure)}\r\n {keyInPrice && _renderKeyInPrice(keyInPrice)}\r\n\r\n {inventoryLabel}\r\n\r\n {/*
\r\n {addToCart && addToCart.errorBlock}\r\n
*/}\r\n
\r\n {quantity &&\r\n _renderQuantity(quantity, callbacks, props, state, resources, quantityLimitsMessages, max, telemetryContent)}\r\n {_renderCartAndActions(addToCart, addToOrderTemplate, addToWishlist)}\r\n
\r\n\r\n {_renderTextBlock(props.slots.textBlocks)}\r\n {props.slots && props.slots.pdpspecs}\r\n {rating}\r\n\r\n {findInStore && _renderFindInStore(findInStore)}\r\n {_renderSocialShare(props.slots && props.slots.socialShare)}\r\n {shopSimilarLook && _renderShopSimilarItem(shopSimilarLook)}\r\n {shopSimilarDescription && _renderShopSimilarItem(shopSimilarDescription)}\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst _renderTextBlock = (textBlocks: React.ReactNode[]): JSX.Element | undefined => {\r\n if (!textBlocks || textBlocks.length === 0) {\r\n return undefined;\r\n }\r\n\r\n return <>{textBlocks[0]};\r\n};\r\n\r\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\r\n if (!socialShare || socialShare.length === 0) {\r\n return undefined;\r\n }\r\n\r\n return <>{socialShare[0]};\r\n};\r\n\r\nconst _renderCartAndActions = (\r\n addToCart?: IBuyboxAddToCartViewProps,\r\n addToOrderTemplate?: IBuyboxAddToOrderTemplateViewProps,\r\n addToWishlist?: IBuyboxAddToWishlistViewProps\r\n): JSX.Element | undefined => {\r\n if (!addToCart && !addToWishlist) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n {/* {addToCart && addToCart.errorBlock} */}\r\n {addToOrderTemplate && addToOrderTemplate.errorBlock}\r\n
\r\n {addToCart && addToCart.button}\r\n {addToOrderTemplate && addToOrderTemplate.button}\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst _renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\r\n const { ContainerProps, dropdowns } = configure;\r\n\r\n return {dropdowns.map(_renderConfigureDropdown)};\r\n};\r\n\r\nconst _renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n {errors}\r\n \r\n {select}\r\n \r\n );\r\n};\r\n\r\nconst _renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\r\n const { ContainerProps, storeSelector, heading, /* description,*/ errors, button, modal, productPickupOptionList } = findInStore;\r\n\r\n return (\r\n \r\n {storeSelector}\r\n {heading}\r\n {productPickupOptionList}\r\n {/* {description} */}\r\n {errors}\r\n {button}\r\n {modal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * On Change function.\r\n * @param callbacks -Callbacks.\r\n * @returns Update quantity.\r\n */\r\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\r\n if (callbacks.updateQuantity) {\r\n return callbacks.updateQuantity(newValue);\r\n }\r\n return true;\r\n};\r\n\r\nconst _renderQuantity = (\r\n quantityComponent: IBuyboxProductQuantityViewProps,\r\n callbacks: IBuyboxCallbacks,\r\n props: IBuyboxProps,\r\n state: IBuyboxState,\r\n extentionResources: IBuyboxExtentionResources,\r\n quantityLimitsMessages: React.ReactNode,\r\n max: number | undefined,\r\n telemetryContent?: ITelemetryContent\r\n): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, errors } = quantityComponent;\r\n const { quantity } = state;\r\n\r\n var dropdownOptions: number[] = [];\r\n if (!max) {\r\n max = 10;\r\n }\r\n\r\n for (let i = 1; i <= max; i++) {\r\n dropdownOptions.push(i);\r\n }\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n {errors}\r\n \r\n\r\n \r\n\r\n {/* */}\r\n {quantityLimitsMessages}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\r\n\r\n return (\r\n \r\n {heading}\r\n {input}\r\n \r\n );\r\n};\r\n\r\nconst _renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\r\n const { ContainerProps, errors, input } = shopSimilarItem;\r\n\r\n return (\r\n \r\n {errors}\r\n {input}\r\n \r\n );\r\n};\r\n\r\nexport default BuyboxView;\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 { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { PriceLine, ProductPrice, SalesAgreementPriceLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { Button, Collapse, format, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nconst defaultPrice: number = 0;\r\nconst freePrice: number = 0;\r\n\r\n/**\r\n * Interface for price component resources.\r\n * @param {string} priceRangeSeparator - The price range separator.\r\n */\r\nexport interface IPriceComponentResources {\r\n priceRangeSeparator?: string;\r\n salesAgreementPricePrompt?: string;\r\n salesAgreementExpirationDatePrompt?: string;\r\n salesAgreementCommittedQuantityPrompt?: string;\r\n salesAgreementRemainingQuantityPrompt?: string;\r\n}\r\n\r\n/**\r\n * Interface for price component props.\r\n * @param {boolean} isPriceMinMaxEnabled - Whether the price range feature is enabled or not.\r\n * @param {IPriceComponentResources} priceResources - The price range resources.\r\n */\r\nexport interface IPriceComponentProps extends IComponentProps<{ price: ProductPrice }> {\r\n className?: string;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n isSalesAgreementPriceFeatureEnabled?: boolean;\r\n useLegacySalesAgreementHTMLFeature?: boolean;\r\n salesAgreementLineId?: number;\r\n priceResources?: IPriceComponentResources;\r\n salesAgreementDetailCollapseProps?: ICollapseProps;\r\n salesAgreementDetailOnClick?(event: React.MouseEvent | React.KeyboardEvent): void;\r\n}\r\n\r\n/**\r\n * The interface of price component.\r\n */\r\nexport interface IPriceComponent extends IComponent {}\r\n\r\nconst priceComponentActions = {};\r\n\r\n/**\r\n * Get the original price from price component props.\r\n * @param props - The IPriceComponentProps.\r\n * @returns The original price.\r\n */\r\nconst getOriginalPrice = (props: IPriceComponentProps): number => {\r\n return Math.max(\r\n props.data.price.BasePrice ?? defaultPrice,\r\n props.data.price.TradeAgreementPrice ?? defaultPrice,\r\n props.data.price.AdjustedPrice ?? defaultPrice\r\n );\r\n};\r\n\r\n/**\r\n * Get the formatted currency.\r\n * @param props - The props.\r\n * @param price - The price.\r\n * @param shouldUseFreePriceText - The shouldUseFreePriceText.\r\n * @returns The formatted currency.\r\n */\r\nconst formatCurrency = (props: IPriceComponentProps, price: number | undefined, shouldUseFreePriceText: boolean | undefined): string => {\r\n if (price === undefined) {\r\n return '';\r\n }\r\n\r\n if (shouldUseFreePriceText && price === freePrice && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(price);\r\n};\r\n\r\n/**\r\n * ShowStrikethroughPricing.\r\n * @param props - The props.\r\n * @returns True if showStrikethroughPricing, false otherwise.\r\n */\r\nconst showStrikethroughPricing = (props: IPriceComponentProps): boolean => {\r\n const originalPrice = getOriginalPrice(props);\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n return props.data.price.MinVariantPrice < originalPrice;\r\n }\r\n\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n return originalPrice > props.data.price.CustomerContextualPrice;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Render current price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst renderCurrentPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const maxVariantPrice: string = formatCurrency(props, props.data.price.MaxVariantPrice, false);\r\n const minVariantPrice: string = formatCurrency(props, props.data.price.MinVariantPrice, false);\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n return (\r\n \r\n \r\n {minVariantPrice}\r\n \r\n \r\n {props.priceResources?.priceRangeSeparator}\r\n \r\n \r\n {maxVariantPrice}\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {formatCurrency(props, props.data.price.CustomerContextualPrice, true)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render current price with original price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst renderCurrentPriceWithOriginalPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const originalPrice: number = getOriginalPrice(props);\r\n const initialPrice: string = formatCurrency(props, originalPrice, true);\r\n\r\n return (\r\n <>\r\n \r\n {` `}\r\n {props.originalPriceText}\r\n {` `}\r\n {initialPrice}\r\n {` `}\r\n {props.currentPriceText}\r\n {` `}\r\n {renderCurrentPrice(props)}\r\n \r\n \r\n \r\n {props.savingsText && {props.savingsText}}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * The state of sales agreement details.\r\n * @deprecated This will be removed with SalesAgreementPrice class soon.\r\n */\r\nexport interface ISalesAgreementDetailState {\r\n isOpen: boolean;\r\n}\r\n\r\n/**\r\n * The SalesAgreementPrice class.\r\n * @deprecated This implementation is deprecated. It will be removed soon. Please use the implementation in the Price function component.\r\n */\r\n// eslint-disable-next-line react/require-optimization -- Not needed.\r\nclass SalesAgreementPrice extends React.Component {\r\n public constructor(props: IPriceComponentProps) {\r\n super(props);\r\n this._toggle = this._toggle.bind(this);\r\n this.state = {\r\n isOpen: true\r\n } as ISalesAgreementDetailState;\r\n }\r\n\r\n public render(): React.ReactElement {\r\n const priceLines: PriceLine[] = this.props.data.price.AttainablePriceLines ?? [];\r\n const firstPriceLine: SalesAgreementPriceLine = priceLines[0] as SalesAgreementPriceLine;\r\n if (this.props.salesAgreementDetailCollapseProps) {\r\n this.props.salesAgreementDetailCollapseProps.isOpen = this.state.isOpen;\r\n }\r\n return (\r\n \r\n

\r\n {formatCurrency(\r\n this.props,\r\n this.props.data.price.SalesAgreementPrice ?? this.props.data.price.CustomerContextualPrice,\r\n true\r\n )}\r\n

\r\n \r\n {this.props.priceResources?.salesAgreementPricePrompt}\r\n

\r\n \r\n

\r\n \r\n {/* Available date */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementExpirationDatePrompt ?? '',\r\n this.props.context.cultureFormatter.formatDate(firstPriceLine.EffectiveDate as Date),\r\n this.props.context.cultureFormatter.formatDate(firstPriceLine.ExpirationDate as Date)\r\n )}\r\n \r\n \r\n {/* Quantity commitment */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementCommittedQuantityPrompt ?? '',\r\n firstPriceLine.CommittedQuantity\r\n )}\r\n \r\n \r\n {/* Remaining quantity to qualify */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementRemainingQuantityPrompt ?? '',\r\n firstPriceLine.RemainingQuantity\r\n )}\r\n \r\n

\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Callback which toggles collapse mode.\r\n * @param event - The mouse or keyboard event.\r\n */\r\n private _toggle(event: React.MouseEvent | React.KeyboardEvent): void {\r\n event.preventDefault();\r\n // console.log(this.state.isOpen);\r\n // eslint-disable-next-line react/no-access-state-in-setstate -- Copied from other class.\r\n this.setState({ isOpen: !this.state.isOpen });\r\n // console.log(this.state.isOpen);\r\n }\r\n}\r\n\r\nconst renderSalesAgreementDetail = (props: IPriceComponentProps): JSX.Element => {\r\n // In most cases there should be only one sales agreement line.\r\n // If there are more than one, only the first one will be shown.\r\n const firstPriceLine: SalesAgreementPriceLine = (props.data.price.AttainablePriceLines ?? [])[0] as SalesAgreementPriceLine;\r\n return (\r\n

\r\n

\r\n {/* Available date */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n props.priceResources?.salesAgreementExpirationDatePrompt ?? '',\r\n props.context.cultureFormatter.formatDate(firstPriceLine.EffectiveDate as Date),\r\n props.context.cultureFormatter.formatDate(firstPriceLine.ExpirationDate as Date)\r\n )}\r\n

\r\n

\r\n {/* Quantity commitment */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' + format(props.priceResources?.salesAgreementCommittedQuantityPrompt ?? '', firstPriceLine.CommittedQuantity)}\r\n

\r\n

\r\n {/* Remaining quantity to qualify */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' + format(props.priceResources?.salesAgreementRemainingQuantityPrompt ?? '', firstPriceLine.RemainingQuantity)}\r\n

\r\n

\r\n );\r\n};\r\n\r\n/**\r\n * Price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst Price: React.FC = (props: IPriceComponentProps): JSX.Element | null => {\r\n // CustomerContextualPrice could be zero\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n\r\n // Determine if contract price is avaiable/applied by:\r\n // isFeatureEnabled and SA price != 0, for PDP.\r\n // SA line id != 0, for cart line.\r\n if (props.isSalesAgreementPriceFeatureEnabled && props.data.price.SalesAgreementPrice !== 0) {\r\n if (props.useLegacySalesAgreementHTMLFeature) {\r\n const salesAgreementPrice = new SalesAgreementPrice(props);\r\n return {salesAgreementPrice.render()};\r\n } else {\r\n const [isExpanded, setIsExpanded] = React.useState(false);\r\n const toggle = () => {\r\n setIsExpanded(!isExpanded);\r\n };\r\n return (\r\n \r\n \r\n

\r\n {formatCurrency(props, props.data.price.SalesAgreementPrice ?? props.data.price.CustomerContextualPrice, true)}\r\n

\r\n \r\n {props.priceResources?.salesAgreementPricePrompt}\r\n \r\n {isExpanded && renderSalesAgreementDetail(props)}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n return (\r\n \r\n {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * The PriceComponent.\r\n */\r\nexport const PriceComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride('Price', {\r\n component: Price,\r\n ...priceComponentActions\r\n});\r\n\r\n\r\nexport default PriceComponent;","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n ICollapseProps,\r\n IDrawerState,\r\n IPayLoad,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport {\r\n ICmsNavItemsData,\r\n INavigationMenuProps\r\n} from \"../definition-extensions/navigation-menu.ext.props.autogenerated\";\r\nimport * as _ from 'lodash';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: IImageData[] | null;\r\n categoryImageAltText: string;\r\n drawerKeyValue: IDictionary;\r\n timeout: ReturnType | null;\r\n menuItemData: IMenuItemData[];\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent, INavigationState> {\r\n private currentLevel: number = 0;\r\n\r\n private readonly _positionInSetOffset: number = 1;\r\n\r\n private readonly escapeKey: number = 27;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n constructor(props: INavigationMenuViewProps & INavigationMenuProps<{}>) {\r\n super(props);\r\n const { menuItemData , config : { retailMenuInsertLinks, cmsNavItems }} = props;\r\n const _menuItemDataClone = [...menuItemData];\r\n const retailMenu = _menuItemDataClone.find(mi => mi.menuSource === 'Retail');\r\n if (retailMenu && ArrayExtensions.hasElements(retailMenuInsertLinks)) {\r\n //Handle pushing in new menu items\r\n retailMenuInsertLinks.map(item => {\r\n if (!item.hideMenuItem) {\r\n const tempMenuItem: IMenuItemData = {\r\n linkURL: item.linkUrl?.destinationUrl,\r\n linkText: item.linkText,\r\n shouldOpenNewTab: item.openInNewTab,\r\n id: retailMenu.subMenu?.length || 0,\r\n imageSource: item.image?.src,\r\n }\r\n retailMenu.subMenu?.splice(item.insertPosition && item.insertPosition - 1 || 0, 0, tempMenuItem);\r\n }\r\n })\r\n }\r\n if (_menuItemDataClone) {\r\n for (const menuItem of _menuItemDataClone) {\r\n if (menuItem.menuSource === 'Retail') {\r\n continue;\r\n }\r\n const menuItemPair = cmsNavItems?.find(cms => cms.linkText === menuItem.linkText);\r\n if ((menuItemPair as ICmsNavItemsData)?.hideMenuItem) {\r\n const idx = _menuItemDataClone.findIndex(i => i.id === menuItem.id);\r\n if (idx > -1) {\r\n _menuItemDataClone.splice(idx, 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined,\r\n parentMenu: undefined,\r\n categoryImageAltText: '',\r\n drawerKeyValue: {},\r\n timeout: null,\r\n menuItemData: _menuItemDataClone\r\n };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._escFunction = this._escFunction.bind(this);\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n document.body.addEventListener('focusout', this._handleFocusOutside);\r\n }\r\n\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n <>\r\n {isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render mobile menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderMobileMenu(): JSX.Element {\r\n const { isMobileView, Navigation } = this.props;\r\n const { menuItemData } = this.state;\r\n return (\r\n \r\n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\r\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\r\n })}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render desktop menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { MenuList, Navigation } = this.props;\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render drawer menu.\r\n * @param menuItem -Menuitem data.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\r\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\r\n return (this._renderDrawer(menuItem, setSize, posinset));\r\n }\r\n return (this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset));\r\n\r\n }\r\n\r\n /**\r\n * Method to render drawer component.\r\n * @param menuItem -Menuitem data.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\r\n const toggleButtonText = menuItem.linkText;\r\n const keyValue = this.state.drawerKeyValue;\r\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\r\n const keys = keyValue !== undefined ? keyValue : {};\r\n\r\n let isDrawerOpen = false;\r\n if (keys[buttonText]) {\r\n isDrawerOpen = true;\r\n }\r\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\r\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\r\n return (this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset));\r\n }\r\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render link.\r\n * @param linkText -Text on Menu link.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render drawer link.\r\n * @param item -Single Menuitem.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\r\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\r\n return (\r\n this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset)\r\n );\r\n } else if (item && item.linkText && !item.linkURL) {\r\n return (\r\n this._renderSpanMenuItem(item)\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to generate menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, isMobileView } = this.props;\r\n const { menuItemData } = this.state;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (const menuItemDatum of menuItemData) {\r\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\r\n menuItem = menuItemDatum;\r\n this.setState({ parentMenu: undefined });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem && menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}\r\n {' '}\r\n \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n return menuItemList;\r\n }\r\n\r\n /**\r\n * Method to get data for submenu.\r\n * @param item -Single Menuitem.\r\n * @returns IMenuItemData.\r\n */\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n this.setState({ parentMenu: item?.id });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to create item list.\r\n * @param menuItemData -Single Menuitem.\r\n * @returns Jsx element.\r\n */\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\r\n }\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData, menuItemData.id, true));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\r\n const subMenuLevel = 3;\r\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\r\n\r\n // Const isParentMenu:boolean= false;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n let subMenu;\r\n const haveSubmenu = hasOptions && enableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1);\r\n if (haveSubmenu) {\r\n this.currentLevel++;\r\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\r\n }\r\n return (\r\n \r\n { menuItem }\r\n { subMenu }\r\n \r\n );\r\n });\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu));\r\n }\r\n\r\n\r\n /**\r\n * Handles the mouseover and mouseleave functions of the menu hover functionality\r\n * @private\r\n */\r\n private _handleMouseLeaveEvent() {\r\n const { config: { menuHideTimeout }} = this.props;\r\n const classToWatch = 'ms-nav'; // Main nav class\r\n const timeToCloseMenu = menuHideTimeout && menuHideTimeout * 1000 || 0; // From props\r\n\r\n // traverse the nodes that are currently being hovered and find out if they are part of the nav system\r\n const traverseNodes = () => {\r\n const nodeList = document.querySelectorAll(':hover');\r\n let node = nodeList[nodeList.length - 1];\r\n let isInMenu = false;\r\n while (node.parentNode) {\r\n node = node.parentNode as Element;\r\n if (node.classList?.contains(classToWatch)) {\r\n isInMenu = true;\r\n break;\r\n }\r\n }\r\n // If they are not part of the nav system - Close the menu\r\n if (!isInMenu) {\r\n // If a timeout time is set, then close the menu after a delay\r\n if (timeToCloseMenu > 0) {\r\n let timeout = this.state.timeout;\r\n if (!timeout) {\r\n timeout = setTimeout(() => {\r\n this._closeSubmenu();\r\n document.removeEventListener('mousemove', traverseNodes);\r\n }, timeToCloseMenu);\r\n this.setState({ timeout });\r\n }\r\n } else {\r\n // Otherwise - close the menu instantly\r\n this._closeSubmenu();\r\n document.removeEventListener('mousemove', traverseNodes);\r\n }\r\n } else {\r\n // Logic to cancel closing the menu if it is still open and the mouse moves back in\r\n if (timeToCloseMenu > 0) {\r\n const timeout = this.state.timeout;\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n this.setState({ timeout: null});\r\n }\r\n }\r\n }\r\n }\r\n document.removeEventListener('mousemove', traverseNodes);\r\n document.addEventListener('mousemove', traverseNodes);\r\n }\r\n\r\n /**\r\n * Method to render button menu item.\r\n * @param option -Single Menuitem.\r\n * @param activeMenu -Active menu number.\r\n * @param index -Active menu index.\r\n * @returns Jsx element.\r\n */\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button, config: { showMenuOnHover } } = this.props;\r\n\r\n if (showMenuOnHover) {\r\n return (\r\n option.linkURL ? window.location.href = option.linkURL : null}\r\n onMouseEnter={this._handleDropdownToggle(option, activeMenu)}\r\n onFocus={this._closeSubmenu}\r\n aria-haspopup={!(this.state.activeMenu && this.state.activeMenu === option.id)}\r\n aria-expanded={!!(this.state.activeMenu && this.state.activeMenu === option.id)}\r\n data-parent={activeMenu}\r\n role={'link'}\r\n >\r\n { option.linkText }\r\n \r\n )\r\n }\r\n return (\r\n \r\n { option.linkText }\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render link menu item.\r\n * @param option -Single Menuitem.\r\n * @param index -Active menu index.\r\n * @param hoverEffect -Active menu effect.\r\n * @param isParent -Is parent menu.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number, hoverEffect: boolean = true, isParent: boolean = false,\r\n setSize?: number, posinset?: number): JSX.Element | null {\r\n const { Link, isMobileView, config: { retailMenuInsertLinks, cmsNavItems } } = this.props;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n let currentPath = this.props.context.actionContext.requestContext.url.requestUrl.pathname;\r\n let className = '';\r\n if (retailMenuInsertLinks) {\r\n const menuLink = retailMenuInsertLinks.find(item => item.linkText === option.linkText);\r\n if (menuLink) {\r\n className = menuLink.className || '';\r\n }\r\n }\r\n if (cmsNavItems) {\r\n const cmsMenuLink = cmsNavItems.find(cms => cms.linkText === option.linkText);\r\n if (cmsMenuLink) {\r\n className = (cmsMenuLink as ICmsNavItemsData).className || '';\r\n }\r\n }\r\n\r\n return (\r\n onTelemetryClick(this.telemetryContent, this.payLoad, linkText)}>\r\n =0 ?\r\n 'active-nav-item' : '', className)}>\r\n { option.linkText }\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render promotional link.\r\n * @param linkText -Link text.\r\n * @param linkUrl -Link url.\r\n * @returns Jsx element.\r\n */\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n { linkText }\r\n \r\n );\r\n }\r\n return null;\r\n\r\n }\r\n\r\n /**\r\n * Method to render span menu item.\r\n * @param option -Single Menu Item.\r\n * @param index -Index.\r\n * @param isParent -Is parent menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n { option.linkText }\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render menu.\r\n * @param level -Menu level.\r\n * @param menuOptions -Menu lists.\r\n * @param currentItem -Menu current.\r\n * @param submenu -Mneu has submenu or not.\r\n * @returns Jsx element.\r\n */\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\r\n\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\r\n const categoryImageDisplay = !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\r\n const promotionalContentDisplay = !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\r\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = 1;\r\n return (\r\n \r\n 2 && 'navmenu-multi-level')}>\r\n { menuOptions }\r\n \r\n
\r\n {\r\n categoryImageDisplay && this.state.categoryImage && this.state.categoryImage.map(item => (\r\n \r\n { this.state.categoryImage && this._getCategoryImage(item) }\r\n { promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n ))\r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\r\n const linkText = option && option.linkText ? option.linkText : '';\r\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n option.promotionalContent.map(item => {\r\n if (item && item.image) {\r\n const imageSrc = item.image.src;\r\n const promotionalItemImageSettings = item.image.imageSettings;\r\n promotionalImage.push({ src: imageSrc, altText: item.text, imageSettings: promotionalItemImageSettings,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\r\n }\r\n });\r\n }\r\n this.setState({\r\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\r\n categoryImageAltText: linkText\r\n });\r\n };\r\n\r\n /**\r\n * Method to handle dropdwon change.\r\n * @param data -Menuitem data.\r\n * @param parentId -Menu parent.\r\n * @returns Jsx element.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n if (this.props.config.showMenuOnHover) { // If we're showing menu on hover, we have to handle this part differently\r\n if (this.state.activeMenu !== data.id!) { // Only change state logic if we're not hovering over an already open menu\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n }\r\n this._handleMouseLeaveEvent(); // run the mouse event\r\n } else {\r\n this.setState({\r\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n if (this.props.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n }\r\n this._resetFocus();\r\n };\r\n\r\n /**\r\n * Method to call when focus lost from menu.\r\n */\r\n private readonly _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\r\n this.setState(\r\n {\r\n activeMenu: undefined,\r\n categoryImage: null\r\n }\r\n );\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleFocusOutside = (event: FocusEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\r\n this._closeSubmenu();\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle close submenu event.\r\n */\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined });\r\n }\r\n }\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param event -HTML event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n\r\n if (event.keyCode === this.escapeKey) {\r\n if (!this.props.isMobileView) {\r\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\r\n for (const item of navDrawerList) {\r\n const navDrawerButton = item.firstChild as HTMLButtonElement;\r\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\r\n navDrawerButton.focus();\r\n }\r\n }\r\n }\r\n this._closeSubmenu();\r\n }\r\n };\r\n\r\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\r\n\r\n if (!categoryImage || !categoryImage.src) {\r\n return null;\r\n }\r\n\r\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const ImageData: IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param drawerState -HTML event.\r\n */\r\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\r\n const { drawerKeyValue } = this.state;\r\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\r\n const newPair = { [drawerText]: drawerState.isOpen };\r\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\r\n };\r\n}\r\n\r\nexport default NavigationMenuView;\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\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { IHelp, IOrderSummary, IPaymentMethods, IPriceContext } from '@msdyn365-commerce-modules/order-management/src/modules/order-confirmation/../../common';\r\nimport { IGroup, IGroupDelivery, IGroups } from '@msdyn365-commerce-modules/order-management/src/modules/order-confirmation/../../common/get-groups';\r\nimport { IOrderInformation } from '@msdyn365-commerce-modules/order-management/src/modules/order-confirmation/../../common/get-order-information';\r\nimport { ISalesLine } from '@msdyn365-commerce-modules/order-management/src/modules/order-confirmation/../../common/get-sales-line';\r\nimport { IOrderConfirmationViewProps } from '@msdyn365-commerce-modules/order-management/src/modules/order-confirmation/./order-confirmation';\r\nimport {IOrderConfirmationProps, IOrderConfirmationResources} from '../definition-extensions/order-confirmation.ext.props.autogenerated';\r\n// import { PriceComponent } from '@msdyn365-commerce/components';\r\nimport msdyn365Commerce from '@msdyn365-commerce/core-internal';\r\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy';\r\n\r\n\r\nexport interface IOrderSummaryR extends IOrderSummary {\r\n priceContext?: IPriceContext;\r\n backToShoppingLink? : React.ReactNode;\r\n resources: IOrderConfirmationResources;\r\n}\r\n\r\n// interface ISummaryLineProps {\r\n// priceContext?: IPriceContext;\r\n// name: string;\r\n// label: string;\r\n// value?: number;\r\n// }\r\n\r\n\r\n// const OrderSummaryLine: React.FC = ({ name, label, value = 0, priceContext }) => (\r\n//

\r\n// \r\n// {label}\r\n// \r\n// {priceContext ? (\r\n// \r\n// ) : (\r\n// \r\n// {value}\r\n// \r\n// )}\r\n//

\r\n// );\r\n\r\nexport interface IGroupR extends IGroup {\r\n resources: IOrderConfirmationResources;\r\n}\r\n\r\nexport interface IGroupsR extends IGroups {\r\n groupsProps: INodeProps;\r\n groups: IGroup[];\r\n resources: IOrderConfirmationResources;\r\n}\r\n\r\nexport const OrderConfirmationOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n receiptEmail,\r\n createdDate\r\n}) => (\r\n \r\n {createdDate}\r\n {receiptEmail}\r\n \r\n);\r\n\r\nexport const OrderConfirmationSalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton }) => (\r\n \r\n {salesLine}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, trackingInfo, pickupDateTimeslot }) => (\r\n \r\n {heading}\r\n {address}\r\n {pickupDateTimeslot}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines, resources }) => (\r\n\r\n \r\n {delivery && }\r\n {/* {delivery && delivery.shippingItemsToYou} */}\r\n

{resources.orderSummaryTitle}

\r\n {_renderOrderSummaryHeading(resources)}\r\n {salesLines && (\r\n \r\n {salesLines.map((salesLine: ISalesLine) => (\r\n \r\n ))}\r\n \r\n )}\r\n
\r\n\r\n);\r\n\r\nexport const OrderConfirmationGroups: React.FC = ({ groupsProps, groups, resources }) => (\r\n \r\n {groups.map((group: IGroup, index: number) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport interface IExtendedOrderSummaryR extends IOrderSummaryR {\r\n salesOrder: SalesOrder | undefined;\r\n}\r\n\r\nexport const OrderConfirmationOrderSummary: React.FC = ({ salesOrder, orderSummaryProps, heading, shipping, subtotal, totalAmount, earnedPoints, backToShoppingLink, resources}) => (\r\n \r\n {heading}\r\n {/* */}\r\n\r\n {React.cloneElement(subtotal as React.ReactElement, {value: salesOrder?.SubtotalAmountWithoutTax})}\r\n\r\n {shipping}\r\n {/*tax*/}\r\n {totalAmount}\r\n {earnedPoints}\r\n \r\n {backToShoppingLink}\r\n \r\n);\r\n\r\nexport const OrderConfirmationPayment: React.FC = ({ paymentMethodsProps, title, methods }) => (\r\n \r\n {title}\r\n {methods}\r\n \r\n);\r\n\r\nexport const OrderConfirmationHelp: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\r\n \r\n {needHelpLabel}\r\n {helpLineNumberLabel}\r\n {contactNumber}\r\n \r\n);\r\n\r\nconst _renderOrderSummaryHeading = (resources: IOrderConfirmationResources & IOrderConfirmationResources): JSX.Element | null => {\r\n return (\r\n
\r\n
{resources.productColumnHeading}
\r\n
{resources.colorColumnHeading}
\r\n
{resources.sizeColumnHeading}
\r\n
{resources.quantityColumnHeading}
\r\n
{resources.priceColumnHeading}
\r\n
{resources.totalColumnHeading}
\r\n
\r\n );\r\n};\r\n\r\nconst OrderConfirmationView: React.FC> = props => {\r\n const {\r\n moduleProps,\r\n heading,\r\n backToShoppingLink,\r\n alert,\r\n loading,\r\n orderInfomation,\r\n orderSummary,\r\n payment,\r\n help,\r\n groups,\r\n resources,\r\n salesOrder,\r\n config }\r\n = props;\r\n const orderString = salesOrder?.CreatedDateTime?.toString() ?? '';\r\n const orderDate = new Date(orderString);\r\n\r\n const changeHref = () => {\r\n if (msdyn365Commerce.isBrowser && config.backToShoppingLink){\r\n let el = document.querySelectorAll('.ms-order-confirmation__btn-keep-shopping')[0];\r\n if (el.href !== config.backToShoppingLink){\r\n el.href = config.backToShoppingLink;\r\n }\r\n }\r\n }\r\n\r\n changeHref();\r\n \r\n return (\r\n \r\n {heading}\r\n

{orderInfomation?.channelReferenceId}

\r\n {alert}\r\n {loading}\r\n

{resources.thankYouMessage}

\r\n {/* {orderInfomation && } */}\r\n\r\n \r\n \r\n {resources.orderPlacedOnLabel.replace(\":\",\"\")}\r\n {orderDate.toLocaleDateString('en-GB')}\r\n \r\n {orderInfomation?.receiptEmail}\r\n \r\n {groups && }\r\n {/* {payment && } */}\r\n {orderSummary && }\r\n \r\n {resources.tyvm}{resources.paidMsg}\r\n {payment?.methods}\r\n
\r\n {resources.signOff}\r\n
\r\n {resources.teamNile}\r\n
\r\n {help && }\r\n
\r\n );\r\n};\r\n\r\nconst getPriceContext = (props: IOrderConfirmationViewProps & IOrderConfirmationProps<{}>): IPriceContext => {\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n resources: { freePriceText }\r\n } = props;\r\n return {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n freePriceText\r\n };\r\n}\r\n\r\nexport default OrderConfirmationView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IReviewModalViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { IReportReviewModalViewProps, IReviewCardViewProps, IReviewsListState, IReviewsListViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/reviews-list';\r\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nconst ReviewsListview: React.FC = props => {\r\n const {\r\n averageRating,\r\n filterByDropdown,\r\n moduleProps,\r\n noReviewsMessage,\r\n noReviewsWithFilterMessage,\r\n pageControls,\r\n refineReviewsProps,\r\n reportReviewModal,\r\n reviewsListProps,\r\n reviewCards,\r\n reviewCount,\r\n reviewModal,\r\n sortByDropdown,\r\n state,\r\n userReview\r\n } = props;\r\n\r\n if (!userReview && reviewCards.length === 0 && !state.isFilterApplied) {\r\n return (\r\n {noReviewsMessage}\r\n );\r\n }\r\n\r\n return (\r\n \r\n {averageRating}\r\n {reviewCount}\r\n \r\n {sortByDropdown}\r\n {filterByDropdown}\r\n \r\n \r\n {userReview && buildReviewCard(userReview)}\r\n {reviewCards.map(review => {\r\n return buildReviewCard(review);\r\n })}\r\n \r\n { reviewCards.length === 0 && state.isFilterApplied && noReviewsWithFilterMessage}\r\n {pageControls}\r\n {createReviewModal(reviewModal, moduleProps)}\r\n {createReportModal(reportReviewModal, state)}\r\n \r\n );\r\n};\r\n\r\nconst buildReviewCard = (props: IReviewCardViewProps) => {\r\n return (\r\n \r\n \r\n {props.rating}\r\n {props.name}\r\n {props.date}\r\n \r\n \r\n \r\n {props.reviewTitle}\r\n {props.reviewText}\r\n \r\n \r\n {props.responseName}\r\n {props.responseDate}\r\n {props.responseText}\r\n \r\n \r\n {props.ratingHelpfulLabel}\r\n {props.like}\r\n {props.dislike}\r\n {props.edit}\r\n {props.report}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\r\n return (\r\n \r\n {props.modalHeader}\r\n \r\n \r\n \r\n {props.rating}\r\n {props.ratingLabel}\r\n \r\n \r\n {props.titleLabel}\r\n {props.titleInput}\r\n \r\n \r\n {props.textLabel}\r\n {props.textInput}\r\n \r\n {props.privacyPolicyUrl}\r\n {props.error}\r\n \r\n \r\n \r\n {props.submitButton}\r\n {props.cancelButton}\r\n \r\n \r\n );\r\n};\r\n\r\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\r\n return (\r\n \r\n \r\n {state.reported ? props.headerSubmitted : props.header}\r\n \r\n \r\n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\r\n \r\n \r\n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ReviewsListview;\r\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 note\n}) => (\n \n {channelName}\n {channelAddress}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n {note}\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 { 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\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\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, IStoreSelectorViewProps } from './index';\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 {\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 note,\n channelAddress\n}) => (\n \n {channelName}\n {channelAddress}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n {note}\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 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":["DropdownQuantity","DropdownQuantity_1","React","constructor","props","_props$currentCount","_this$props$min","super","inputRef","_handleUpdateState","_debounce","Number","isNaN","this","state","currentInput","onChange","inputElement","current","HTMLInputElement","setAttribute","toString","_validateMin","setState","_minValue","currentValue","Math","min","max","currentCount","isUpdating","_handleChange","bind","defaultProps","nextState","_objectSpread","_props$currentCount2","disabled","render","options","id","className","value","onBlur","inputQuantityAriaLabel","role","map","n","key","selected","e","parseInt","target","__decorate","observer","colorRecords","colorInStock","_strikeSVG","checkAvailability","p","PhysicalAvailableInventoryLevelCode","_renderTextBlock","textBlocks","length","_renderSocialShare","socialShare","_renderCartAndActions","addToCart","addToOrderTemplate","addToWishlist","errorBlock","button","_renderConfigure","configure","ContainerProps","dropdowns","Node","Object","assign","_renderConfigureDropdown","dropdown","LabelContainerProps","heading","errors","select","_renderFindInStore","findInStore","storeSelector","modal","productPickupOptionList","onChangeHandler","callbacks","newValue","updateQuantity","_renderQuantity","quantityComponent","extentionResources","quantityLimitsMessages","telemetryContent","quantity","dropdownOptions","i","push","_renderKeyInPrice","keyInPrice","input","_renderShopSimilarItem","shopSimilarItem","ModuleProps","MediaGalleryContainerProps","ProductInfoContainerProps","price","title","rating","resources","inventoryLabel","shopSimilarLook","shopSimilarDescription","unitOfMeasure","data","previousSelection","setPreviousSelection","useState","useEffect","document","imgCollect2","querySelectorAll","forEach","node","classList","contains","thisColour","src","style","backgroundImage","maxWidth","MsDyn365","isBrowser","dimensions","productDimensions","result","dimensionValues","d","DimensionValues","dimensionValuesFlat","dv","swatches","getAttribute","idx","findIndex","Value","_dimensionValuesFlat$","extensionProperty","ExtensionProperties","find","ep","Key","_extensionProperty$Va","StringValue","updateSwatchTitles","undefined","dimensionValuesWithInventory","filter","c","_c$DimensionValue","_c$DimensionValue2","DimensionValue","includes","colorlabel","querySelector","colorswatches","nextElementSibling","_props$context$reques","_props$context$reques2","colornamecontainer","createElement","children","append","addEventListener","colorname","innerText","context","request","query","color","selectedSwatch","imgCollect","b","selectedTitle","display","swatchContainers","hasSelected","j","sizeSwatches","sizeSelected","size","clicked","click","childToSelect","Module","mediaGallery","slots","pdpspecs","getOriginalPrice","_props$data$price$Bas","_props$data$price$Tra","_props$data$price$Adj","BasePrice","TradeAgreementPrice","AdjustedPrice","formatCurrency","shouldUseFreePriceText","freePriceText","cultureFormatter","renderCurrentPrice","maxVariantPrice","MaxVariantPrice","minVariantPrice","MinVariantPrice","_props$priceResources","isPriceMinMaxEnabled","itemProp","priceResources","priceRangeSeparator","CustomerContextualPrice","SalesAgreementPrice","_toggle","isOpen","_this$props$data$pric","_this$props$data$pric2","_this$props$priceReso","_this$props$priceReso2","_this$props$priceReso3","_this$props$priceReso4","_this$props$priceReso5","_this$props$priceReso6","_this$props$priceReso7","firstPriceLine","AttainablePriceLines","salesAgreementDetailCollapseProps","classnames","onClick","salesAgreementPricePrompt","Collapse","format","salesAgreementExpirationDatePrompt","formatDate","EffectiveDate","ExpirationDate","salesAgreementCommittedQuantityPrompt","CommittedQuantity","salesAgreementRemainingQuantityPrompt","RemainingQuantity","event","preventDefault","PriceComponent","msdyn365Commerce","createComponentOverride","component","isSalesAgreementPriceFeatureEnabled","useLegacySalesAgreementHTMLFeature","salesAgreementPrice","_props$data$price$Sal","_props$priceResources8","_props$priceResources9","isExpanded","setIsExpanded","toggle","Button","tabIndex","_props$data$price$Att","_props$priceResources2","_props$priceResources3","_props$priceResources4","_props$priceResources5","_props$priceResources6","_props$priceResources7","renderSalesAgreementDetail","originalPrice","showStrikethroughPricing","initialPrice","originalPriceText","currentPriceText","savingsText","renderCurrentPriceWithOriginalPrice","NavigationMenuView","currentLevel","_positionInSetOffset","escapeKey","_updateCategoryImage","categoryImageSrc","option","linkText","promotionalImage","altText","ArrayExtensions","hasElements","promotionalContent","item","image","imageSrc","promotionalItemImageSettings","imageSettings","text","additionalProperties","linkUrl","destinationUrl","categoryImage","categoryImageAltText","_handleDropdownToggle","parentId","isMobileView","activeMenu","parentMenu","config","showMenuOnHover","_handleMouseLeaveEvent","showCategoryImage","imageSource","_resetFocus","setTimeout","menuNode","focus","_handleClickOutside","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","_getCategoryImage","categoryImageUrl","generateImageUrl","actionContext","requestContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","_categoryImage$imageS","_this$props$config$ca","ImageData","Image","gridSettings","categoryImageSettings","loadFailureBehavior","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","menuItemData","retailMenuInsertLinks","cmsNavItems","_menuItemDataClone","retailMenu","mi","menuSource","hideMenuItem","_item$linkUrl","_retailMenu$subMenu","_item$image","_retailMenu$subMenu2","tempMenuItem","linkURL","shouldOpenNewTab","openInNewTab","subMenu","splice","insertPosition","menuItem","menuItemPair","cms","timeout","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","componentDidMount","body","componentWillUnmount","removeEventListener","_renderMobileMenu","_renderDesktopMenu","Navigation","posinset","_renderDrawerMenu","MenuList","ref","_renderDisplay","setSize","_renderDrawer","_renderLinkMenuItem","toggleButtonText","keyValue","isDrawerOpen","colProps","Drawer","toggleButtonProps","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","_renderSpanMenuItem","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","_createMenuItemList","index","subMenus","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","error","levelClassName","menuOptions","hasOptions","haveSubmenu","round","_renderMenu","menuHideTimeout","timeToCloseMenu","traverseNodes","nodeList","isInMenu","parentNode","_node$classList","clearTimeout","tag","href","window","location","onMouseEnter","onFocus","hoverEffect","arguments","isParent","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","currentPath","url","requestUrl","pathname","menuLink","cmsMenuLink","onMouseOver","onTelemetryClick","indexOf","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","OrderConfirmationOrderInfomation","_ref","orderInformationProps","receiptEmail","createdDate","OrderConfirmationSalesLine","_ref2","salesLineProps","salesLine","buyAgainButton","OrderConfirmationGroupDelivery","_ref3","deliveryProps","count","processing","address","trackingInfo","pickupDateTimeslot","OrderConfirmationGroup","_ref4","groupProps","delivery","salesLinesProps","salesLines","orderSummaryTitle","_renderOrderSummaryHeading","LineId","OrderConfirmationGroups","_ref5","groupsProps","groups","group","OrderConfirmationOrderSummary","_ref6","salesOrder","orderSummaryProps","shipping","subtotal","totalAmount","earnedPoints","backToShoppingLink","SubtotalAmountWithoutTax","OrderConfirmationPayment","_ref7","paymentMethodsProps","methods","OrderConfirmationHelp","_ref8","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","productColumnHeading","colorColumnHeading","sizeColumnHeading","quantityColumnHeading","priceColumnHeading","totalColumnHeading","getPriceContext","typeName","_salesOrder$CreatedDa","_salesOrder$CreatedDa2","moduleProps","alert","loading","orderInfomation","orderSummary","payment","help","orderString","CreatedDateTime","orderDate","Date","changeHref","el","channelReferenceId","thankYouMessage","orderPlacedOnLabel","replace","toLocaleDateString","priceContext","tyvm","paidMsg","signOff","teamNile","buildReviewCard","cardProps","headerProps","name","date","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","ratingHelpfulLabel","like","dislike","edit","report","createReviewModal","modalHeader","modalBody","form","inputRow","ratingLabel","titleLabel","titleInput","textLabel","textInput","privacyPolicyUrl","modalFooter","submitButton","cancelButton","createReportModal","reported","headerSubmitted","header","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","averageRating","filterByDropdown","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","reviewCount","reviewModal","sortByDropdown","userReview","isFilterApplied","review","CookieComplianceAcceptButton","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","onClose","type","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","link","editableLink","ariaLabel","links","Msdyn365","editProps","onTextChange","CookieCompliance","handleLinkTextChange","linkIndex","_this$props$config$ac","actionLinks","handleContentChange","content","visible","cookieRef","_onDismiss","cookies","isConsentGiven","acceptCookiesAriaLabel","moduleConfig","viewProps","onDismiss","CookieComplianceBanner","AlertProps","fade","Content","onEdit","acceptButton","renderView","setConsentCookie","reload","Alert","OrderInfomation","salesId","receiptId","amount","channelName","channelAddress","note","SalesLine","GroupDelivery","Group","isCashAndCarryTransaction","deliveryType","shipment","salesStatus","showTimeslot","pickupProps","Groups","OrderSummary","tax","Payment","Help","_ref9","viewModes","tableViewActions","table","placedBy","Iframe","iframeRef","srcURL","URL","exception","protocol","toLocaleLowerCase","iframeClassName","Heading","_createHeading","IframeContainer","IFrame","_createIframe","cookieConsentAccepted","_renderAlert","cookieConsentRequiredMessage","message","targetURL","height","iframeAriaLabel","IFrameView","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","_onSelect","async","deliveryCode","currentTarget","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","Code","Description","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","store","_renderStoreLocation","_store$OrgUnitAvailab","deliveryOptions","OrgUnitPickUpDeliveryModes","_store$OrgUnitAvailab2","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","observable","StoreSelectorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Enter","Space","onShowAllStores","_searchTextChanged","inputValue","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","blur","performSearch","_onChangeHandler","filterPickupModeSelected","Promise","resolve","renderPickupModesList","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","shouldDisplayList","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","TelemetryConstant","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","autoComplete","onSubmit","searchInputAriaLabel","placeholder","onKeyUp","StoreSelectorEmptyMessage","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","StoreSelectorFoundLocationsMessage","searchRadius","isSeeAllStore","storeCountMessage","milesShortText","storeCountMessageInKm","storeAllCountMessage","PickUpOptionList","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","pickupListOptionMenuText","pickupmodeList","stopPropagation","isExpandSiteOptionsState","onPickupInStoreClickHandler","_props$selectedStore","selectedStore","onSetPreferredStoreClickHandler","_props$selectedStore2","_props$selectedStore3","removePreferredStoreHandler","onPickupModeSelectHandler","pickupMode","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","renderPickupModes","deliveryOptionList","pickupInStoreButtonText","pickupInStoreAriaLabel","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","parentClassName","storeName","OrgUnitName","distanceAsString","buildDistanceString","Distance","resourceLabel","stockLabel","stockText","canSelectLocation","PickupInStore","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","matchDeliveryOptions","storeDetailsMain","storeHeader","storeDetailsCloseButton","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","pickUpDeliveryOptionButton","pickupModes","preferredStoreButton","removePreferredStoreButton","secondsToTime","seconds","hours","floor","ampm","divisorForMinutes","getShortTimeString","day","getFullTimeString","buildHoursDisplayInfo","startDay","endDay","hoursInfo","startDayShort","startDayFull","endDayShort","endDayFull","timeRange","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","dateForLookup","get","buildStoreHoursString","buildStoreHours","storeHoursList","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","storeSelectorLocationLineItemComponentActions","deliveryMode","distance","productdeliveryOptions","deliveryOption","pickup","_delivery","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","isError","setError","renderStoreHours","RegularStoreHours","displayTime","JSON","stringify","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","pickUpButtonClickHandler","StoreSelector","renderSelectedStore","shouldHideInventory","preferredStore","hasEnabledOutOfStockCheck","availabilitiesWithHours","storeSelectorStateManager","storeLocations","selectedStoreResources","_selectedStore$OrgUni3","selectedProps","StoreId","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","termsOfServiceLink","handleHeadingChange","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","_location$OrgUnitPick","some","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","channel","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","debug","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","trim","_updateLocations","latitude","longitude","shouldShowAllStores","_navigator","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","PERMISSION_DENIED","_closeDialog","_storeSelectorStateMa","parentElementRef","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","preferredLocationId","storeLocationList","orgUnitStoreInformation","showMapViewLink","isDialog","product","setOrgUnitStoreInformation","catch","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","app","appConfig","maps","mapSlot","isMobileDevice","isMobile","variant","VariantType","Viewport","isInlineView","isLocatorView","listMapViewState","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","isEnableOutofStock","enableStockCheck","sortLocation","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","Modal","classname","autoFocus","onClosed","horizontalPosition","verticalPosition","HeaderContainerProps","ModalHeader","HeaderProps","FooterContainerProps","ModalFooter","BodyContainerProps","ModalBody","bodyWrapperProps","storeResultContainerProps","mapContainerProps","storeDetailsModal","locationsMessage","search","spinner","locationsList","outOfStockThreshold","noLocationsMessage","terms","headerText","sortLocations","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","_store$OrgUnitAvailab3","selectedStoreLocation","lineResources","_store$OrgUnitAvailab4","locationOpen","openFrom","openTo","renderDeliveryOptions","renderBody","toggleBopisHandler","cartLine","isBopisSelected","_cartLine$pickUpInSto","pickUpInStore","toggleBopis","onChangeStoreHandler","_cartLine$pickUpInSto2","renderCartLine","isMultiplePickUp","emailDeliveryModeCode","outOfStockErrorMessage","remove","renderGroupBopisBlock","_cartLine$data2","cartline","DeliveryMode","changeStoreDisplayText","shipInsteadDisplayText","pickItUpDisplayText","puckUpinStoreAttribute","renderCartlinesInternal","cartLines","itemIndex","renderBopisBlock","_cartLine$data","shipToAddressDisplayText","pickUpAtStoreWithLocationText","orgUnitName","renderCartlines","waitingComponent","cartLoadingStatus","isCartDataResult","multiplePickUpEnabled","CartlinesWrapper","emptyCart","renderCartLinesGroupHeader","_cartLine$pickUpInSto6","pickUpText","shippingText","emailshippingText","payInvoicesDisplayText","groupTitle","IsInvoiceLine","StringExtensions","isNullOrEmpty","toLowerCase","renderCartLinesGroupTitle","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","_cartLine$pickUpInSto5","itemLabel","itemsLabel","countTitle","_props$cart2","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","_props$cart6","updatedTitle","cartTitle","cart","totalItemsInCart","renderModuleAttributes","checkoutBlockedDueToUnavailableFunds","orderSummaryLineitems","orderTotal","checkoutAsSignInUserButton","checkoutAsGuestButton","renderOrderSummaryCheckoutButton","hasInvoiceLine","promotionOptions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","renderCartLinesGroup","cartLinesGroup","cartlines","_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","_props$cart","promoCode","expressCheckoutButton","ExpressCheckoutSectionWrapper","createTemplateFromCartButton","renderOrderSummaryCheckout","StoreSelectorFoundLocationsMessageComponent","RichTextComponent","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","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","orgUnitNumber","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","Browser","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","viewport","_data$storeSelectorSt","displayMap"],"sourceRoot":""}