{"version":3,"file":"static/js/21.d50b3ce136cd5b763769.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/eve-map/eve-map.props.autogenerated.ts?994e","webpack://Msdyn365.Commerce.Online/./src/modules/eve-map/components/eve-map-small-components.tsx?64a1","webpack://Msdyn365.Commerce.Online/./src/modules/eve-map/components/eve-map-location-line-item/eve-map-location-line-item.components.tsx?0c9c","webpack://Msdyn365.Commerce.Online/./src/modules/eve-map/components/eve-map-location-lines.tsx?c9b3","webpack://Msdyn365.Commerce.Online/./src/modules/eve-map/components/eve-map-search-form.tsx?d14a","webpack://Msdyn365.Commerce.Online/./src/modules/eve-map/components/eve-line-pagination.tsx?9846","webpack://Msdyn365.Commerce.Online/./src/modules/eve-map/eve-map.tsx?1e68","webpack://Msdyn365.Commerce.Online/./src/modules/eve-map/eve-map.view.tsx?4d70","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/footer-item.view.tsx?eacc","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/order-history.view.tsx?e453","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/reviews-list.view.tsx?da88","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/footer-item.view.tsx?27ed","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/order-history.view.tsx?d255","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/reviews-list.view.tsx?03f6","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/components/accept-button.tsx?8e73","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/components/links.tsx?97b8","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/cookie-compliance.tsx?02ac","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/cookie-compliance.view.tsx?a33f","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/order-details.view.tsx?1ce1","webpack://Msdyn365.Commerce.Online/./src/modules/iframe/iframe.tsx?65fe","webpack://Msdyn365.Commerce.Online/./src/modules/iframe/iframe.view.tsx?a7d6","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-pickup-option-list.tsx?7a25","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-location-lines.tsx?87ff","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-search-form.tsx?fb9a","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-small-components.tsx?4335","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/pickup-option-list.tsx?dae0","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/selected-store/selected-store.tsx?bfbc","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?fe27","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?923d","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/store-selector.tsx?e416","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/store-selector.view.tsx?71a6","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/cart.view.tsx?3909","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/order-details.view.tsx?027b","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/store-selector.view.tsx?ccdd"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IEveMap contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum searchRadiusUnit {\r\n mi = 'mi',\r\n km = 'km'\r\n}\r\n\r\nexport interface IEveMapConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n pushpinOptions?: IPushpinOptionsData;\r\n className?: string;\r\n clientRender?: boolean;\r\n useChannelMfr?: boolean;\r\n autoSuggestionEnabled?: boolean;\r\n autoSuggestOptions?: IAutoSuggestOptionsData;\r\n searchRadiusUnit?: searchRadiusUnit;\r\n lookupRadius: number;\r\n pageLength: number;\r\n defaultLatitudeValue: number;\r\n defaultLongitudeValue: number;\r\n}\r\n\r\nexport interface IEveMapResources {\r\n searchPlaceholderText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n seeAllStoresText: string;\r\n milesShortText: string;\r\n kilometersShortText: string;\r\n contactText: string;\r\n emptyLocationsText: string;\r\n dealerCountMessage: string;\r\n dealerAllCountMessage: string;\r\n dealerCountMessageInKm: string;\r\n dealerDetailsText: string;\r\n dealerDetailsManufacturerCodeText: string;\r\n dealerDetailsLaborRateText: string;\r\n dealerDetailsDescriptionText: string;\r\n dealerDetailsNotesText: string;\r\n dealerDetailsContractCodeText: string;\r\n paginationPrev: string;\r\n paginationNext: string;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface IPushpinOptionsData {\r\n size?: number;\r\n color?: string;\r\n selectionColor?: string;\r\n showIndex?: boolean;\r\n}\r\n\r\nexport interface IAutoSuggestOptionsData {\r\n maxResults?: number;\r\n}\r\n\r\nexport interface IEveMapProps extends Msdyn365.IModule {\r\n resources: IEveMapResources;\r\n config: IEveMapConfig;\r\n}\r\n","// import * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IEveMapResources } from '../eve-map.props.autogenerated';\r\n\r\nexport interface IDealerSelectorEmptyMessageProps {\r\n resources: IEveMapResources;\r\n}\r\nexport const DealerSelectorEmptyMessage: React.FC = ({ resources }) => (\r\n
\r\n

{resources.emptyLocationsText}

\r\n
\r\n);\r\n\r\nexport const DealerSelectorWaiting: React.FC = () =>
;\r\n\r\nexport interface IDealerSelectorFoundLocationsMessage {\r\n resources: IEveMapResources;\r\n locations?: IFullOrgUnitAvailability[];\r\n searchRadius: number;\r\n preferredDistanceUnit: string;\r\n // isSeeAllStore: boolean;\r\n}\r\nexport const DealerSelectorFoundLocationsMessage: React.FC = ({\r\n locations,\r\n searchRadius,\r\n resources,\r\n preferredDistanceUnit\r\n // isSeeAllStore\r\n}) => {\r\n if (locations) {\r\n const dealerCountMessage =\r\n preferredDistanceUnit === resources.milesShortText ? resources.dealerCountMessage : resources.dealerCountMessageInKm;\r\n return (\r\n
\r\n {/* {isSeeAllStore\r\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\r\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())} */}\r\n {dealerCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\r\n
\r\n );\r\n }\r\n\r\n return null;\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\n// import { OrgUnitContact } from '@msdyn365-commerce/retail-proxy';\r\n// import { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\nimport { IDealerLocation } from '../../eve-map';\r\n\r\n/**\r\n * Store Locator line item resources.\r\n */\r\nexport interface IDealerLocatorLocationLineItemResources {\r\n contactInfoHeader: string;\r\n dealerDetailsHeader: string;\r\n dealerDetailsManufacturerCodeText: string;\r\n dealerDetailsLaborRateText: string;\r\n dealerDetailsDescriptionText: string;\r\n dealerDetailsNotesText: string;\r\n dealerDetailsContractCodeText: string;\r\n}\r\n\r\n/**\r\n * Store Locator line item props.\r\n */\r\nexport interface IDealerLocatorLocationLineItemProps {\r\n location: IDealerLocation;\r\n resources: IDealerLocatorLocationLineItemResources;\r\n index: string;\r\n preferredDistanceUnit: string;\r\n}\r\n\r\n/**\r\n * Function to render store hours.\r\n * @param storeHours - Store Hours object.\r\n * @param location - Store Unit.\r\n * @param resources - Resources.\r\n * @returns - Jsx element.\r\n */\r\nconst renderDealerDetails = (location: IDealerLocation, resources: IDealerLocatorLocationLineItemResources): JSX.Element | null => {\r\n const {\r\n dealerDetailsDescriptionText,\r\n // dealerDetailsLaborRateText,\r\n // dealerDetailsManufacturerCodeText\r\n dealerDetailsContractCodeText\r\n } = resources;\r\n\r\n // console.log('Rendering Details');\r\n if (location.ContractList) {\r\n // console.log(location);\r\n return (\r\n
\r\n {location.ContractList.length > 0\r\n ? location.ContractList.map(mfrCode => {\r\n return (\r\n <>\r\n
\r\n
\r\n

\r\n {`${mfrCode.ManufacturerCode} - ${mfrCode.ManufacturerName}`}\r\n

\r\n
\r\n
\r\n

\r\n \r\n {dealerDetailsContractCodeText}\r\n \r\n {mfrCode.ContractCode}\r\n

\r\n
\r\n
\r\n

\r\n \r\n {dealerDetailsDescriptionText}\r\n \r\n {mfrCode.ContractDescription}\r\n

\r\n
\r\n
\r\n \r\n );\r\n })\r\n : null}\r\n
\r\n );\r\n }\r\n return
;\r\n};\r\n\r\n/**\r\n * Function to retrun distance measure unit.\r\n * @param distance - Store location within radius.\r\n * @param preferredDistanceUnit - Unit configuration.\r\n * @param isLocationDisabled - Flag to check user location.\r\n * @returns - Unit of distance.\r\n */\r\nexport const buildDistanceString = (\r\n distance: number | undefined,\r\n preferredDistanceUnit: string,\r\n isLocationDisabled?: boolean\r\n): string | undefined => {\r\n if (distance === undefined || isLocationDisabled) {\r\n return undefined;\r\n } else if (distance < 1) {\r\n return `(<1 ${preferredDistanceUnit})`;\r\n }\r\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\r\n};\r\n\r\n/**\r\n * Function to store contact.\r\n * @param contacts - Store location within radius.\r\n * @returns - Return primary contact number of store.\r\n */\r\n// const extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\r\n// if (!contacts) {\r\n// return undefined;\r\n// }\r\n\r\n// const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\r\n\r\n// if (ArrayExtensions.hasElements(allPhoneContacts)) {\r\n// const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\r\n\r\n// if (primaryPhoneContact) {\r\n// return primaryPhoneContact.Locator;\r\n// }\r\n\r\n// return allPhoneContacts[0].Locator;\r\n// }\r\n\r\n// return undefined;\r\n// };\r\n\r\n/**\r\n * Renders store location line items.\r\n * @param props - Store location line items props.\r\n * @returns - HTML.\r\n */\r\nconst dealerLocatorLocationLineItem: React.FC = (props: IDealerLocatorLocationLineItemProps) => {\r\n const { location, resources, index } = props;\r\n\r\n // console.log(location);\r\n\r\n const storeName: string | undefined = location.OrgUnitName;\r\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit);\r\n const storeAddress: string | undefined = location.Address;\r\n // TODO: Need to fix the phone number portion when we actually have a phone number to use\r\n // const phoneNumber: string | undefined = extractPhoneNumber(location.PhoneNumber);\r\n\r\n const channelId: number | undefined = location.ChannelId;\r\n\r\n return (\r\n
\r\n
\r\n {/* {(shouldShowIndex || storeLocatorView) && {index}} */}\r\n {{index}}\r\n {storeName}\r\n {distanceAsString ? {distanceAsString} : false}\r\n
\r\n
\r\n
\r\n {/*

{resources.contactInfoHeader}

*/}\r\n {storeAddress && (\r\n
\r\n \r\n {storeAddress}\r\n
\r\n )}\r\n {/* TODO: Fix the phone number section when/if there is phone number data to display */}\r\n {/* {phoneNumber && (\r\n
\r\n \r\n {phoneNumber}\r\n
\r\n )} */}\r\n
\r\n
\r\n

{resources.dealerDetailsHeader}

\r\n {renderDealerDetails(location, resources)}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Store location line item component.\r\n */\r\nexport const DealerLocatorLocationLineItemComponent = dealerLocatorLocationLineItem as (\r\n props: IDealerLocatorLocationLineItemProps\r\n) => JSX.Element;\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport { observable, reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IEveMapResources } from '../eve-map.props.autogenerated';\r\nimport { IDealerLocatorLocationLineItemResources, DealerLocatorLocationLineItemComponent } from './eve-map-location-line-item';\r\nimport { IDealerLocations, IDealerLocation } from '../eve-map';\r\n\r\n/**\r\n * Store selector location lines props interface.\r\n */\r\nexport interface IStoreSelectorLocationLinesProps {\r\n locations?: IDealerLocations[];\r\n resources: IEveMapResources;\r\n preferredDistanceUnit?: string;\r\n selectedStoreLocationId?: string;\r\n displayList?: boolean;\r\n onClick: (locationId: string | undefined) => void;\r\n}\r\n\r\n/**\r\n * Displays all the location line items, or null if none exists.\r\n */\r\n@observer\r\nexport class DealerLocatorLocationLines extends React.PureComponent {\r\n @observable private _stores: IDealerLocations[] | undefined;\r\n\r\n private readonly selectedLocationRef: React.RefObject;\r\n\r\n private storeCounter: number;\r\n\r\n public constructor(props: IStoreSelectorLocationLinesProps) {\r\n super(props);\r\n this.selectedLocationRef = React.createRef();\r\n this.storeCounter = 0;\r\n }\r\n\r\n public componentDidUpdate(previousProps: IStoreSelectorLocationLinesProps): void {\r\n if (this.props.selectedStoreLocationId !== previousProps.selectedStoreLocationId) {\r\n this._scrollIntoView();\r\n }\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (this.props.locations) {\r\n this._stores = [...this.props.locations];\r\n }\r\n\r\n reaction(\r\n () => this.props.locations,\r\n () => {\r\n if (this.props.locations) {\r\n this._stores = [...this.props.locations];\r\n }\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!ArrayExtensions.hasElements(this._stores)) {\r\n return null;\r\n }\r\n this.storeCounter = 0;\r\n\r\n return (\r\n
\r\n {this._stores.map((store, index) => {\r\n return this._renderStoreLocation(store, index);\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * On click Handler function.\r\n * @param orgUnitLocation -OrgUnit location.\r\n * @returns Click action on orgUnit Location.\r\n */\r\n private readonly onClickHandler = (orgUnitLocation: IDealerLocation | undefined) => () => {\r\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\r\n };\r\n\r\n private _renderStoreLocation(store: IDealerLocations, index: number): JSX.Element | undefined {\r\n const orgUnitLocation = store?.OrgUnitLocation;\r\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\r\n const defaultAriaSetsize = 0;\r\n if (orgUnitLocation) {\r\n ++this.storeCounter;\r\n return (\r\n \r\n \r\n
\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Scroll into view.\r\n */\r\n private readonly _scrollIntoView = () => {\r\n // scroll into view to have the page scroll to the top of the list when the page changes.\r\n const selectedLocationDiv = this.selectedLocationRef.current;\r\n const parent = selectedLocationDiv?.parentElement;\r\n if (selectedLocationDiv && parent) {\r\n // if (parent.scrollTop + parent.clientHeight > selectedLocationDiv.offsetTop) {\r\n // parent.scrollTop = selectedLocationDiv.offsetTop - parent.offsetTop - 20;\r\n // } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\r\n // // parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\r\n // }\r\n\r\n // Set the parent to the location of the selected dealer and slide it down by a small 20 px buffer.\r\n parent.scrollTop = selectedLocationDiv.offsetTop - parent.offsetTop - 20;\r\n }\r\n };\r\n\r\n /**\r\n * Is current location.\r\n * @param location - Org unit location.\r\n * @returns The current location.\r\n */\r\n // private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\r\n // (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\r\n // false;\r\n\r\n /**\r\n * Map resources.\r\n * @param resources - Store resoureces.\r\n * @returns Resources.\r\n */\r\n private readonly _mapResources = (resources: IEveMapResources): IDealerLocatorLocationLineItemResources => {\r\n return {\r\n contactInfoHeader: resources.contactText,\r\n dealerDetailsHeader: resources.dealerDetailsText,\r\n dealerDetailsManufacturerCodeText: resources.dealerDetailsManufacturerCodeText,\r\n dealerDetailsLaborRateText: resources.dealerDetailsLaborRateText,\r\n dealerDetailsDescriptionText: resources.dealerDetailsDescriptionText,\r\n dealerDetailsNotesText: resources.dealerDetailsNotesText,\r\n dealerDetailsContractCodeText: resources.dealerDetailsContractCodeText\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 * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { KeyCodes } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Store Selector Search Form Props interface.\r\n */\r\nexport interface IDealerLocatorSearchFormProps {\r\n resources: {\r\n searchInputAriaLabel: string;\r\n searchButtonAriaLabel: string;\r\n searchPlaceholderText: string;\r\n seeAllStoresText: string;\r\n };\r\n id: string;\r\n value: string;\r\n performSearch(searchTerm: string): Promise;\r\n searchTermChanged(searchTerm: string): Promise;\r\n}\r\n\r\n/**\r\n * Simple search form consisting of search text and a search button.\r\n */\r\nexport class DealerLocatorSearchForm extends React.PureComponent {\r\n private readonly searchBoxRef: React.RefObject = React.createRef();\r\n\r\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n private previousValue: string = '';\r\n\r\n private isSearchResultOpened: boolean = false;\r\n\r\n public constructor(props: IDealerLocatorSearchFormProps) {\r\n super(props);\r\n this.state = { value: '' };\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n resources: { searchButtonAriaLabel, searchPlaceholderText },\r\n id,\r\n value\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Handles the key press on the input box.\r\n * @param event - Event object.\r\n */\r\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\r\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\r\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\r\n // In order to avoid that. Checking if the search result is open or not.\r\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\r\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\r\n if (activeDescedantValue) {\r\n if (this.previousValue === '') {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n return;\r\n }\r\n\r\n if (activeDescedantValue !== this.previousValue) {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n } else {\r\n this.isSearchResultOpened = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method called on search text changed.\r\n * @param event - Input value.\r\n */\r\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\r\n const inputValue: string = event.target.value;\r\n\r\n await this.props.searchTermChanged(inputValue);\r\n };\r\n\r\n /**\r\n * Method called on search submit.\r\n * @param event - Input value.\r\n */\r\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\r\n event.preventDefault(); // Prevents form submission\r\n this.searchBoxRef.current?.blur();\r\n if (!this.isSearchResultOpened) {\r\n await this.props.performSearch(this.props.value);\r\n }\r\n this.isSearchResultOpened = false;\r\n };\r\n}\r\n","import React from 'react';\r\n// import { ICartResources } from '../../definition-extensions/cart.ext.props.autogenerated';\r\n// import { ICheckoutResources } from '../../definition-extensions/checkout.ext.props.autogenerated';\r\n\r\ninterface IEveLinePaginationProps {\r\n nextPage: (e: React.MouseEvent) => void;\r\n prevPage: (e: React.MouseEvent) => void;\r\n changePage: (page: number) => void;\r\n currentPage: number;\r\n numPages: number;\r\n prev: string;\r\n next: string;\r\n}\r\n\r\n/**\r\n * Renders pagination navigation on the page, which displays 4 buttons that allow\r\n * user to navigate to the first, last, next or previous pages. Also displays\r\n * the current page out of the total number of pages. ( ie. 5/7 )\r\n *\r\n * @param {(e: React.MouseEvent) => void} nextPage\r\n * @param {(e: React.MouseEvent) => void} prevPage\r\n * @param {(page: number) => void} changePage\r\n * @param {number} currentPage\r\n * @param {number} numPages\r\n * @param {ICartResources} resources\r\n * @return {*} {React.ReactNode}\r\n */\r\nexport const EveLinePagination: React.FC = ({\r\n nextPage,\r\n prevPage,\r\n changePage,\r\n currentPage,\r\n numPages,\r\n prev,\r\n next\r\n}) => {\r\n const firstPage: number = 1;\r\n const baseClassName = 'eve-pagination';\r\n\r\n return (\r\n
\r\n {numPages > 1 && (\r\n <>\r\n <>\r\n changePage(1)}\r\n >\r\n {`${firstPage}`}\r\n \r\n \r\n {prev}\r\n \r\n \r\n
\r\n \r\n {currentPage} / {numPages}\r\n \r\n
\r\n <>\r\n \r\n {next}\r\n \r\n changePage(numPages)}\r\n >\r\n {`${numPages}`}\r\n \r\n \r\n \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/// \r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport { IModuleProps, NodeTag, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport { observable, reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport * as _ from 'lodash';\r\n\r\nimport { IEveMapData } from './eve-map.data';\r\nimport { IEveMapProps, IPushpinOptionsData, searchRadiusUnit as SearchRadiusUnit } from './eve-map.props.autogenerated';\r\nimport getDealerLocations, { GetDealerLocationsInput } from '../../actions/get-dealer-locations.action';\r\nimport { IDealerEntity } from '../../actions/DataServiceEntities.g';\r\nimport { getDealerDetailsAsync } from '../../actions/DataActionExtension.g';\r\nimport {\r\n DealerSelectorWaiting,\r\n DealerSelectorEmptyMessage,\r\n DealerSelectorFoundLocationsMessage,\r\n DealerLocatorLocationLines,\r\n DealerLocatorSearchForm\r\n} from './components';\r\nimport { EveLinePagination } from './components/eve-line-pagination';\r\n\r\n/**\r\n * Header Interface.\r\n */\r\nexport interface IHeader {\r\n headerProps: INodeProps;\r\n heading: React.ReactNode;\r\n}\r\n\r\n/**\r\n * MapViewProps Interface.\r\n */\r\nexport interface IMapViewProps extends IEveMapProps {\r\n ModuleProps: IModuleProps;\r\n Header: IHeader;\r\n MapProps: INodeProps;\r\n Map: Microsoft.Maps.Map | undefined;\r\n locationsMessage?: React.ReactNode;\r\n search?: React.ReactNode;\r\n spinner?: React.ReactNode;\r\n locationsList?: React.ReactNode;\r\n noLocationsMessage?: React.ReactNode;\r\n dealerResultContainerProps?: INodeProps;\r\n state: IEveMapState;\r\n pagination: React.ReactNode;\r\n}\r\n\r\n/**\r\n * EveMap State Interface.\r\n */\r\nexport interface IEveMapState {\r\n searchTerm?: string;\r\n isSearchInProgress: boolean;\r\n distanceResults: IDistanceResults;\r\n mapSessionId: string | undefined;\r\n dealerLocations: IFullOrgUnitAvailability[] | undefined;\r\n newDealerLocations: IDealerLocations[] | undefined;\r\n // state value that will store the current page\r\n currentPage: number;\r\n}\r\n\r\nexport interface ICoordinates {\r\n latitude: number;\r\n longitude: number;\r\n}\r\n\r\nexport interface IDistanceMatrixResult {\r\n destinationIndex: number;\r\n originIndex: number;\r\n totalWalkDuration: number;\r\n // travelDistance arrives in kilometers\r\n travelDistance: number;\r\n travelDuration: number;\r\n}\r\n\r\nexport interface IDistanceResults {\r\n originCoords: ICoordinates;\r\n resultsCoords: IDistanceMatrixResult[];\r\n}\r\n\r\nexport interface IDealerLocation {\r\n ChannelId?: number;\r\n Latitude?: number;\r\n Longitude?: number;\r\n OrgUnitName?: string;\r\n OrgUnitNumber?: string;\r\n Address?: string;\r\n PhoneNumber?: string;\r\n Distance?: number;\r\n ContractCode?: string;\r\n ContractCompensationRate?: number;\r\n ContractDescription?: string;\r\n ContractLaborRate?: number;\r\n ContractListedUnlisted?: boolean;\r\n ContractNotes?: string;\r\n ContractStatus?: boolean;\r\n ManufacturerCode?: string;\r\n ContractList?: IDealerEntity[];\r\n RecId?: number;\r\n}\r\n\r\nexport interface IDealerLocations {\r\n OrgUnitAvailability?: {\r\n OrgUnitLocation?: IDealerLocation;\r\n };\r\n OrgUnitLocation?: IDealerLocation;\r\n}\r\n\r\n// xoxo - does this actually need to be here?\r\nexport interface IEveMapPropsExtended extends IEveMapProps {\r\n mapData: any;\r\n}\r\n\r\n/**\r\n *\r\n * Map component.\r\n * @extends {React.Component>}\r\n */\r\n@observer\r\nclass Map extends React.PureComponent {\r\n @observable public map: Microsoft.Maps.Map | undefined;\r\n\r\n @observable public selectedDealer: IDealerEntity[] | undefined;\r\n\r\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\r\n\r\n private readonly mapRef: React.RefObject = React.createRef();\r\n\r\n private readonly kmToMiValue: number = 1.609;\r\n\r\n private readonly defaultLookUpRadius: number = 200;\r\n\r\n private readonly defaultPageLength: number = 20;\r\n\r\n public constructor(props: IEveMapPropsExtended) {\r\n super(props);\r\n this.state = {\r\n searchTerm: '',\r\n isSearchInProgress: true,\r\n distanceResults: { originCoords: { latitude: 0, longitude: 0 }, resultsCoords: [] },\r\n dealerLocations: [],\r\n newDealerLocations: [],\r\n mapSessionId: undefined,\r\n // set the page to the first page when the module first renders\r\n currentPage: 1\r\n };\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\r\n } = this.props;\r\n\r\n // // Adding Timeout to make sure it loads the data based upon the preferred store.\r\n setTimeout(() => {\r\n this._getAndUpdateStoreLocation();\r\n }, 0);\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\r\n async () => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (!context || context.id === this.props.id) {\r\n await this._searchTermChanged('');\r\n this._getAndUpdateStoreLocation();\r\n }\r\n }\r\n );\r\n\r\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\r\n await this.props.data.storeSelectorStateManager.result.loadMapApi({\r\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\r\n lang: this.props.context.actionContext.requestContext.locale,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\r\n });\r\n }\r\n\r\n this.map?.setOptions({ navigationBarMode: Microsoft.Maps.NavigationBarMode.minified });\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n this._initMap();\r\n this._updateMap();\r\n }\r\n\r\n when(\r\n () => !!this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded(true);\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\r\n key: channel?.BingMapsApiKey,\r\n lang: this.props.context.actionContext.requestContext.locale,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\r\n });\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\r\n () => {\r\n this._initMap();\r\n }\r\n );\r\n\r\n reaction(\r\n () => {\r\n return [\r\n this.props.data.storeSelectorStateManager.result?.context?.orgUnitStoreInformation,\r\n this.props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\r\n this.map\r\n ];\r\n },\r\n () => {\r\n this._updateMap();\r\n }\r\n );\r\n\r\n if (isAutoSuggestionEnabled) {\r\n when(\r\n () => {\r\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\r\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\r\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\r\n return isMapApiLoaded && isDialogOpen && isSameContext;\r\n },\r\n () => {\r\n setTimeout(async () => {\r\n await this._attachMapAutoSuggest();\r\n }, 0);\r\n }\r\n );\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(): boolean {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n if (context && context.id === this.props.id) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n config: { heading, className, lookupRadius, searchRadiusUnit },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n resources\r\n } = this.props;\r\n\r\n const { newDealerLocations, currentPage } = this.state;\r\n const shouldDisplayMap = storeSelectorStateManager?.listMapViewState.displayMap;\r\n const preferredDistanceUnit = searchRadiusUnit === SearchRadiusUnit.km ? resources.kilometersShortText : resources.milesShortText;\r\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n const pageLength = this.props.config.pageLength || this.defaultPageLength;\r\n const paginatedLocationsList = newDealerLocations?.slice((currentPage - 1) * pageLength, pageLength * currentPage);\r\n const numPages = newDealerLocations ? Math.ceil(newDealerLocations.length / pageLength) : 1;\r\n\r\n const nextPage = () => {\r\n changePage(this.state.currentPage + 1);\r\n };\r\n\r\n const prevPage = () => {\r\n changePage(this.state.currentPage - 1);\r\n };\r\n\r\n const changePage = (page: number) => {\r\n // Don't make a page change if it is below the first page or greater than the last page\r\n if (page <= 0 || page > numPages) {\r\n return;\r\n }\r\n\r\n storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\r\n\r\n const scrollElement = document.querySelector('div.ms-store-select__locations.show');\r\n\r\n if (scrollElement !== null) {\r\n scrollElement.scrollTop = 0;\r\n }\r\n\r\n this.setState(\r\n { currentPage: page },\r\n // Rerender the map with pins for current page\r\n () => this._updateMap()\r\n );\r\n };\r\n const pagination = (\r\n \r\n );\r\n\r\n const viewProps: IMapViewProps = {\r\n ...this.props,\r\n state: this.state,\r\n ModuleProps: {\r\n tag: 'div',\r\n moduleProps: this.props,\r\n className: classname('ms-map', { show: shouldDisplayMap }, className)\r\n },\r\n Header: {\r\n headerProps: { className: 'ms-map__header' },\r\n heading: heading?.text && (\r\n \r\n )\r\n },\r\n dealerResultContainerProps: {\r\n tag: 'div' as NodeTag,\r\n className: 'ms-store-select__dealer_container'\r\n },\r\n spinner: ,\r\n noLocationsMessage: ,\r\n locationsMessage: (\r\n \r\n ),\r\n locationsList:\r\n ArrayExtensions.hasElements(newDealerLocations) && newDealerLocations[0].OrgUnitLocation ? (\r\n \r\n ) : (\r\n undefined\r\n ),\r\n search: (\r\n \r\n ),\r\n pagination,\r\n MapProps: {\r\n tag: 'div',\r\n className: 'ms-map__body',\r\n ref: this.mapRef\r\n },\r\n Map: this.map\r\n };\r\n this._updateMap();\r\n if (newDealerLocations) {\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n return <>;\r\n }\r\n\r\n /**\r\n * Initialize Map AutoSuggest.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise => {\r\n const {\r\n config: { autoSuggestOptions },\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\r\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\r\n /**\r\n * Callback for the autosuggest API.\r\n */\r\n callback: () => {\r\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\r\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\r\n this.autoSuggestManager.attachAutosuggest(\r\n `#ms-store-select__search-box_${this.props.id}`,\r\n `#ms-store-select__search-box-container_${this.props.id}`,\r\n this._onSuggestionSelected\r\n );\r\n },\r\n\r\n /**\r\n * Error call back for autosuggest API.\r\n */\r\n errorCallback: () => {\r\n if (telemetry) {\r\n telemetry.debug('Unable to attach map auto suggest.');\r\n }\r\n },\r\n credentials: channel?.BingMapsApiKey\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * On Selecting Location Suggestion.\r\n * @param result - Map Suggestions List.\r\n */\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (context && context.id === this.props.id) {\r\n await this._searchTermChanged(result.formattedSuggestion);\r\n await this._performSearch(result.formattedSuggestion);\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called updating the store location.\r\n * @param shouldShowAllStores - Flag to show all stores.\r\n */\r\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true });\r\n if (navigator?.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n async position => {\r\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\r\n this.setState({ isSearchInProgress: true });\r\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n async error => {\r\n // If the location setting is turned off\r\n if (error.PERMISSION_DENIED) {\r\n await this._searchTermChanged('');\r\n await this._updateLocations(0, 0, 0);\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n { timeout: 2000 }\r\n );\r\n } else {\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called on heading change.\r\n * @param event -Content Edit Event.\r\n */\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\r\n this.props.config.heading!.text = event.target.value;\r\n };\r\n\r\n /**\r\n * Initialize the map.\r\n */\r\n private readonly _initMap = () => {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.map = new Microsoft.Maps.Map(this.mapRef.current as HTMLElement, {\r\n credentials: channel?.BingMapsApiKey || '',\r\n pushpinAccessible: true\r\n });\r\n Microsoft.Maps.Events.addHandler(this.map, 'click', async () => {\r\n await storeSelectorStateManager.setSelectedStoreLocationId(undefined);\r\n });\r\n this.map.getCredentials((credentials: string) => {\r\n // TODO: Need to figure out why using map session id in place of api key does not work.\r\n this.setState({ mapSessionId: credentials });\r\n });\r\n this._updateMap();\r\n }\r\n };\r\n\r\n /**\r\n * Update the map.\r\n */\r\n private readonly _updateMap = () => {\r\n const pushpinOptions: IPushpinOptionsData = { ...this.props.config.pushpinOptions };\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager?.result;\r\n const orgUnitStoreInformation = storeSelectorStateManager?.context?.orgUnitStoreInformation;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n if (this.map && orgUnitStoreInformation) {\r\n let mapLocation: OrgUnitLocation | undefined;\r\n this.map.entities.clear();\r\n const pushpins: Microsoft.Maps.Pushpin[] = [];\r\n pushpinOptions.color = pushpinOptions?.color ?? '#46555D';\r\n pushpinOptions.selectionColor = pushpinOptions?.selectionColor ?? '#003B64';\r\n pushpinOptions.size = pushpinOptions?.size ?? 1.25;\r\n pushpinOptions.showIndex = pushpinOptions?.showIndex ?? true;\r\n\r\n const currentPage = this.state.currentPage || 1;\r\n const pageLength = this.props.config.pageLength || this.defaultPageLength;\r\n const storeLocationList = orgUnitStoreInformation.filter(store => store.OrgUnitLocation !== undefined);\r\n const paginatedList = storeLocationList.slice((currentPage - 1) * pageLength, pageLength * currentPage);\r\n\r\n // for (const [index, unitStoreInfo] of storeLocationList.entries()) {\r\n for (const [index, unitStoreInfo] of paginatedList.entries()) {\r\n const storeLocation = unitStoreInfo.OrgUnitLocation;\r\n\r\n if (storeLocation?.Latitude && storeLocation.Longitude) {\r\n const isSelectedLocation = selectedStoreLocationId === storeLocation.OrgUnitNumber;\r\n const options = this._getPushpinOptions(isSelectedLocation, index, pushpinOptions);\r\n const pushpin = new Microsoft.Maps.Pushpin(\r\n new Microsoft.Maps.Location(storeLocation.Latitude, storeLocation.Longitude),\r\n options\r\n );\r\n\r\n Microsoft.Maps.Events.addHandler(pushpin, 'click', () => {\r\n this.handleClickEvent(storeLocation.OrgUnitNumber);\r\n });\r\n isSelectedLocation ? pushpins.unshift(pushpin) : pushpins.push(pushpin);\r\n\r\n if (isSelectedLocation) {\r\n mapLocation = storeLocation;\r\n }\r\n }\r\n }\r\n\r\n if (mapLocation) {\r\n const currentLocation = new Microsoft.Maps.Location(mapLocation.Latitude, mapLocation.Longitude);\r\n this.map.setView({ center: currentLocation });\r\n } else {\r\n // Create a LocationRect from array of pushpins and set the eve-map view.\r\n this.map.setView({\r\n // @ts-ignore\r\n bounds: Microsoft.Maps.LocationRect.fromShapes(pushpins),\r\n padding: 80\r\n });\r\n }\r\n\r\n let clusterLayer;\r\n // //Load the Clustering module.\r\n Microsoft.Maps.loadModule('Microsoft.Maps.Clustering', function() {\r\n //Create a ClusterLayer and add it to the map.\r\n clusterLayer = new Microsoft.Maps.ClusterLayer(pushpins);\r\n });\r\n if (clusterLayer) {\r\n this.map.layers.clear();\r\n this.map.layers.insert(clusterLayer);\r\n }\r\n this.map.setOptions({ pushpinAccessible: true });\r\n }\r\n };\r\n\r\n /**\r\n * Handle click event.\r\n * @param orgUnitNumber - Organization unit number.\r\n */\r\n private readonly handleClickEvent = async (orgUnitNumber: string | undefined): Promise => {\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\r\n const currentSelectedStore = storeSelectorStateManager?.selectedStoreLocationId;\r\n if (currentSelectedStore === orgUnitNumber) {\r\n return;\r\n }\r\n if (storeSelectorStateManager && storeSelectorStateManager.context && storeSelectorStateManager.context.orgUnitStoreInformation) {\r\n storeSelectorStateManager.setSelectedStoreLocationId(undefined);\r\n\r\n // Add conditional to check to see if ContractList exists or not\r\n if (orgUnitNumber) {\r\n const dealerDetails = await getDealerDetailsAsync({ callerContext: this.props.context.actionContext }, orgUnitNumber);\r\n this.selectedDealer = dealerDetails;\r\n const tempDealerLocations = [...(this.state.newDealerLocations || [])];\r\n const index = tempDealerLocations.findIndex(loc => loc.OrgUnitLocation?.OrgUnitNumber === orgUnitNumber);\r\n if (tempDealerLocations[index].OrgUnitLocation) {\r\n tempDealerLocations[index].OrgUnitLocation!.ContractList = dealerDetails;\r\n }\r\n\r\n this.setState(prev => {\r\n return {\r\n ...prev,\r\n newDealerLocations: tempDealerLocations\r\n };\r\n });\r\n\r\n if (orgUnitNumber) {\r\n storeSelectorStateManager?.setSelectedStoreLocationId(orgUnitNumber);\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called on search.\r\n * @param searchTerm - Search string.\r\n */\r\n private readonly _performSearch = async (searchTerm: string): Promise => {\r\n const {\r\n context: { actionContext },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!searchTerm || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true });\r\n\r\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\r\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\r\n if (location) {\r\n await this._updateLocations(location.latitude, location.longitude);\r\n } else {\r\n await this._updateLocations();\r\n }\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n };\r\n\r\n /**\r\n * Method to be called on search term changed.\r\n * @param searchTerm - Search string.\r\n */\r\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\r\n this.setState({ searchTerm });\r\n };\r\n\r\n /**\r\n * Method to update user location.\r\n * @param latitude - User location.\r\n * @param longitude - User location.\r\n * @param radius - Search Criteria Radius.\r\n * @returns Void promise.\r\n */\r\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\r\n const {\r\n config: { lookupRadius, searchRadiusUnit, defaultLatitudeValue, defaultLongitudeValue },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.km ? 1 : 0;\r\n const lookupDistanceInMiles = lookupRadius\r\n ? distanceUnitValue\r\n ? Math.round(lookupRadius / this.kmToMiValue)\r\n : lookupRadius\r\n : this.defaultLookUpRadius;\r\n\r\n let localLatitude = latitude || defaultLatitudeValue;\r\n let long = longitude || defaultLongitudeValue;\r\n\r\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\r\n if (lastInlineStoreLocation && !this.state.searchTerm) {\r\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\r\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\r\n }\r\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\r\n await this.getOrgUnitLocationByArea(lookupDistanceInMiles, distanceUnitValue, localLatitude, long);\r\n return;\r\n };\r\n\r\n /**\r\n * Get org unit location by area.\r\n * @param calRadius - Radius.\r\n * @param distanceUnitValue - Distance unit value.\r\n * @param latitude - Latitude.\r\n * @param longitude - Longitude.\r\n * @returns - Returns a void promise.\r\n */\r\n private readonly getOrgUnitLocationByArea = async (\r\n calRadius: number,\r\n distanceUnitValue: number,\r\n latitude?: number,\r\n longitude?: number\r\n ): Promise => {\r\n const {\r\n config: { useChannelMfr },\r\n context: { actionContext }\r\n } = this.props;\r\n\r\n const newOrgUnitLocationsInput = new GetDealerLocationsInput(useChannelMfr || false, latitude || 0, longitude || 0, calRadius);\r\n const newOrgUnits = await getDealerLocations(newOrgUnitLocationsInput, actionContext);\r\n if (newOrgUnits && this.state.newDealerLocations) {\r\n void this._setOrgUnitStoreInformation(newOrgUnits).then(() => {\r\n this.setState({ newDealerLocations: [...newOrgUnits] });\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Method to set store info.\r\n * @param orgUnitStoreInformation - Store Info Object.\r\n * @returns Void promise.\r\n */\r\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n telemetry\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n const context = storeSelectorStateManager.context;\r\n const moduleId: string = context?.id ? context.id : this.props.id;\r\n let input: IStoreSelectionStateContext = {\r\n /**\r\n * On Location selected.\r\n * @returns - Returns promise.\r\n */\r\n onLocationSelected: async () => {\r\n return Promise.resolve();\r\n }\r\n };\r\n\r\n if (storeSelectorStateManager.context) {\r\n input = storeSelectorStateManager.context;\r\n }\r\n\r\n input = {\r\n ...input,\r\n id: moduleId,\r\n showMapViewLink: context?.showMapViewLink,\r\n parentElementRef: context?.parentElementRef,\r\n orgUnitStoreInformation: orgUnitStoreInformation,\r\n product: context?.product\r\n };\r\n\r\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\r\n if (telemetry) {\r\n telemetry.error(error.message);\r\n telemetry.debug('Unable to Update store location state');\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Get the pushpin option.\r\n * @param isSelectedLocation - Is selected location.\r\n * @param index - Index.\r\n * @param pushpinOptions - PushpinOptions.\r\n * @returns - The pushpin options.\r\n */\r\n private readonly _getPushpinOptions = (isSelectedLocation: boolean, index: number, pushpinOptions?: IPushpinOptionsData) => {\r\n const text = pushpinOptions?.showIndex ? (index + 1).toString() : undefined;\r\n\r\n const size = pushpinOptions?.size || 1;\r\n const color = isSelectedLocation ? pushpinOptions?.selectionColor || pushpinOptions?.color : pushpinOptions?.color;\r\n const icon = this._getSvgIcon(size, color, text);\r\n\r\n return {\r\n // Fallback if icon doesn't render properly\r\n color: isSelectedLocation ? pushpinOptions?.selectionColor : pushpinOptions?.color,\r\n icon\r\n };\r\n };\r\n\r\n private readonly _getSvgIcon = (size: number, color?: string, text?: string) => {\r\n const baseValue: number = 32;\r\n return `\r\n \r\n ${text ? `${text}` : ''}\r\n `;\r\n };\r\n}\r\n\r\nexport default Map;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { /*IHeader,*/ IMapViewProps } from './eve-map';\r\n\r\n/**\r\n * Render the heading.\r\n * @param param0 -- Heading props.\r\n * @param param0.headerProps -- Heading Props.\r\n * @param param0.heading -- Heading Node.\r\n * @returns -- Returns the node.\r\n */\r\n// const MapHeader: React.FC = ({ headerProps, heading }) => {heading};\r\n\r\n/**\r\n * Renders the map view props.\r\n * @param param0 -- Map view props.\r\n * @param param0.ModuleProps -- Module props.\r\n * @param param0.Header -- Header props.\r\n * @param param0.MapProps -- Map props.\r\n * @returns -- Returns the map module.\r\n */\r\nconst MapView: React.FC = props => {\r\n const { ModuleProps, MapProps } = props;\r\n return (\r\n \r\n
\r\n {renderDealerList(props)}\r\n {/* Not using the map header - can remove and disable the configuration field? */}\r\n {/* {Header && }, */}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nconst renderDealerList: React.FC = props => {\r\n const {\r\n dealerResultContainerProps,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n locationsList,\r\n noLocationsMessage,\r\n pagination\r\n // selectedLocation,\r\n // dealerDetailsModal // may just have the details appear by extending the selected dealer in the list\r\n } = props;\r\n return (\r\n \r\n {locationsMessage}\r\n {search}\r\n {/* {pagination} */}\r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}\r\n // {/* <>{noLocationsMessage} */}\r\n }\r\n {pagination}\r\n {/* Make the renderSelectedDealer function work??? */}\r\n {/* {selectedLocation && renderSelectedDealer(selectedLocation)} */}\r\n \r\n );\r\n};\r\n\r\nexport default MapView;\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 { IFooterViewProps } from '@msdyn365-commerce-modules/footer';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n *\r\n * FooterItemView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class FooterItemView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { FooterItem } = this.props;\r\n return (\r\n \r\n {this._renderElement(this.props)}\r\n \r\n );\r\n }\r\n\r\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\r\n if (heading) {\r\n return (\r\n {' '}\r\n );\r\n } else if (Link && image) {\r\n return (\r\n \r\n {linkText}\r\n {image}\r\n \r\n );\r\n } else if (Link) {\r\n return (EditableLink);\r\n }\r\n return (\r\n <>\r\n {text}\r\n {image}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FooterItemView;\r\n","/*--------------------------------------------------------------\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 { IGroup, IGroupDelivery, IGroups, IHeader, IList, IOrderHistoryViewProps, IOrderInformation, ISalesOrder } from '@msdyn365-commerce-modules/order-management';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const OrderHistoryOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n salesId,\r\n receiptId,\r\n channelName,\r\n createdDate,\r\n count,\r\n amount\r\n // channelReferenceId\r\n}) => (\r\n \r\n {channelName}\r\n {salesId}\r\n {receiptId}\r\n {createdDate}\r\n {count}\r\n {amount}\r\n {/* {channelReferenceId} */}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {processing}\r\n {address}\r\n {trackingInfo}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n {salesLine.salesLine}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderHistoryHeader: React.FC = ({ headerProps, heading, orderCountLabel, extraActions }) => (\r\n \r\n {heading}\r\n {orderCountLabel}\r\n {extraActions}\r\n \r\n);\r\n\r\nexport const OrderHistorySalesOder: React.FC = ({ salesOrderProps, orderInfomation, groups, orderDetailsLink, expandProductsButton }) => (\r\n \r\n {orderInfomation && }\r\n {groups && }\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n \r\n);\r\n\r\nexport const OrderHistoryList: React.FC = ({ listProps, salesOrders }) => (\r\n \r\n {salesOrders && salesOrders.map((salesOrder, index) => )}\r\n \r\n);\r\n\r\nconst OrderHistoryView: React.FC = ({\r\n orderHistoryProps,\r\n header,\r\n alert,\r\n loading,\r\n emptyMessage,\r\n backToShoppingLink,\r\n list,\r\n table,\r\n moreButton\r\n}) => (\r\n \r\n {header && }\r\n {loading}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {emptyMessage && (\r\n \r\n {emptyMessage}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {list && }\r\n {table}\r\n {moreButton && moreButton}\r\n \r\n);\r\n\r\nexport default OrderHistoryView;\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 { IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport {\r\n IReportReviewModalViewProps,\r\n IReviewCardViewProps,\r\n IReviewsListData,\r\n IReviewsListResources,\r\n IReviewsListState,\r\n IReviewsListViewProps\r\n} from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\r\n\r\n/**\r\n * Build Review Card.\r\n * @param props - Review Card ViewProps.\r\n * @param resources - Resource Strings.\r\n * @param isUserReview - User review flag.\r\n * @returns JSX Element.\r\n */\r\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\r\n return (\r\n \r\n \r\n
\r\n {props.rating}\r\n {props.date}\r\n
\r\n {props.name}\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 {isUserReview ? undefined :

\r\n {resources.wasReviewHelpfulText}\r\n

}\r\n {props.like}\r\n {props.dislike}\r\n {props.edit}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Product Image.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\r\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\r\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product Description.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const product = props.data.product.result;\r\n return (\r\n \r\n
\r\n {renderProductImage(props)}\r\n
\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.ItemId}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review list ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const { resources, moduleProps, reviewModal } = props;\r\n return (\r\n \r\n {reviewModal.modalHeader}\r\n \r\n \r\n \r\n {renderProductDescription(props)}\r\n \r\n
\r\n {resources.selectRatingLabel}\r\n
\r\n {reviewModal.rating}\r\n
\r\n
\r\n \r\n {resources.reviewTitleLabel}\r\n {reviewModal.titleInput}\r\n \r\n \r\n {resources.reviewTextLabel}\r\n {reviewModal.textInput}\r\n \r\n {reviewModal.privacyPolicyUrl}\r\n {reviewModal.error}\r\n
\r\n
\r\n \r\n {reviewModal.submitButton}\r\n {reviewModal.cancelButton}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review modal ViewProps.\r\n * @param state - Review List State.\r\n * @returns JSX Element.\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\n/**\r\n * ReviewsList view.\r\n * @param props - Ratings ReviewsList ViewProps.\r\n * @returns ReviewsList view module.\r\n */\r\nconst ReviewsListview: React.FC> = props => {\r\n const {\r\n filterByDropdown,\r\n heading,\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 sortByDropdown,\r\n state,\r\n userReview,\r\n resources\r\n } = props;\r\n\r\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\r\n return (\r\n {noReviewsMessage}\r\n );\r\n }\r\n\r\n return (\r\n \r\n {heading}\r\n \r\n {sortByDropdown}\r\n {filterByDropdown}\r\n \r\n \r\n {userReview && buildReviewCard(userReview, resources, true)}\r\n {reviewCards.map(review => {\r\n return buildReviewCard(review, resources, false);\r\n })}\r\n \r\n { !ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\r\n {pageControls}\r\n {createReviewModal(props)}\r\n {createReportModal(reportReviewModal, state)}\r\n \r\n );\r\n};\r\n\r\nexport default ReviewsListview;\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 { IFooterViewProps } from '@msdyn365-commerce-modules/footer';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n *\r\n * FooterItemView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class FooterItemView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { FooterItem } = this.props;\r\n return (\r\n \r\n {this._renderElement(this.props)}\r\n \r\n );\r\n }\r\n\r\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\r\n if (heading) {\r\n return (\r\n {' '}\r\n );\r\n } else if (Link && image) {\r\n return (\r\n \r\n {linkText}\r\n {image}\r\n \r\n );\r\n } else if (Link) {\r\n return (EditableLink);\r\n }\r\n return (\r\n <>\r\n {text}\r\n {image}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FooterItemView;\r\n","/*--------------------------------------------------------------\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 { IGroup, IGroupDelivery, IGroups, IHeader, IList, IOrderHistoryViewProps, IOrderInformation, ISalesOrder } from '@msdyn365-commerce-modules/order-management';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const OrderHistoryOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n salesId,\r\n receiptId,\r\n channelName,\r\n createdDate,\r\n count,\r\n amount,\r\n channelReferenceId\r\n}) => (\r\n \r\n {channelName}\r\n {salesId}\r\n {receiptId}\r\n {createdDate}\r\n {count}\r\n {amount}\r\n {channelReferenceId}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {processing}\r\n {address}\r\n {trackingInfo}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n {salesLine.salesLine}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderHistoryHeader: React.FC = ({ headerProps, heading, orderCountLabel, extraActions }) => (\r\n \r\n {heading}\r\n {orderCountLabel}\r\n {extraActions}\r\n \r\n);\r\n\r\nexport const OrderHistorySalesOder: React.FC = ({ salesOrderProps, orderInfomation, groups, orderDetailsLink, expandProductsButton }) => (\r\n \r\n {orderInfomation && }\r\n {groups && }\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n \r\n);\r\n\r\nexport const OrderHistoryList: React.FC = ({ listProps, salesOrders }) => (\r\n \r\n {salesOrders && salesOrders.map((salesOrder, index) => )}\r\n \r\n);\r\n\r\nconst OrderHistoryView: React.FC = ({\r\n orderHistoryProps,\r\n header,\r\n alert,\r\n loading,\r\n emptyMessage,\r\n backToShoppingLink,\r\n list,\r\n table,\r\n moreButton\r\n}) => (\r\n \r\n {header && }\r\n {loading}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {emptyMessage && (\r\n \r\n {emptyMessage}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {list && }\r\n {table}\r\n {moreButton && moreButton}\r\n \r\n);\r\n\r\nexport default OrderHistoryView;\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 { IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport {\r\n IReportReviewModalViewProps,\r\n IReviewCardViewProps,\r\n IReviewsListData,\r\n IReviewsListResources,\r\n IReviewsListState,\r\n IReviewsListViewProps\r\n} from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\r\n\r\n/**\r\n * Build Review Card.\r\n * @param props - Review Card ViewProps.\r\n * @param resources - Resource Strings.\r\n * @param isUserReview - User review flag.\r\n * @returns JSX Element.\r\n */\r\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\r\n return (\r\n \r\n \r\n
\r\n {props.rating}\r\n {props.date}\r\n
\r\n {props.name}\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 {isUserReview ? undefined :

\r\n {resources.wasReviewHelpfulText}\r\n

}\r\n {props.like}\r\n {props.dislike}\r\n {props.edit}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Product Image.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\r\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\r\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product Description.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const product = props.data.product.result;\r\n return (\r\n \r\n
\r\n {renderProductImage(props)}\r\n
\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.ItemId}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review list ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const { resources, moduleProps, reviewModal } = props;\r\n return (\r\n \r\n {reviewModal.modalHeader}\r\n \r\n \r\n \r\n {renderProductDescription(props)}\r\n \r\n
\r\n {resources.selectRatingLabel}\r\n
\r\n {reviewModal.rating}\r\n
\r\n
\r\n \r\n {resources.reviewTitleLabel}\r\n {reviewModal.titleInput}\r\n \r\n \r\n {resources.reviewTextLabel}\r\n {reviewModal.textInput}\r\n \r\n {reviewModal.privacyPolicyUrl}\r\n {reviewModal.error}\r\n
\r\n
\r\n \r\n {reviewModal.submitButton}\r\n {reviewModal.cancelButton}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review modal ViewProps.\r\n * @param state - Review List State.\r\n * @returns JSX Element.\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\n/**\r\n * ReviewsList view.\r\n * @param props - Ratings ReviewsList ViewProps.\r\n * @returns ReviewsList view module.\r\n */\r\nconst ReviewsListview: React.FC> = props => {\r\n const {\r\n filterByDropdown,\r\n heading,\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 sortByDropdown,\r\n state,\r\n userReview,\r\n resources\r\n } = props;\r\n\r\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\r\n return (\r\n {noReviewsMessage}\r\n );\r\n }\r\n\r\n return (\r\n \r\n {heading}\r\n \r\n {sortByDropdown}\r\n {filterByDropdown}\r\n \r\n \r\n {userReview && buildReviewCard(userReview, resources, true)}\r\n {reviewCards.map(review => {\r\n return buildReviewCard(review, resources, false);\r\n })}\r\n \r\n { !ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\r\n {pageControls}\r\n {createReviewModal(props)}\r\n {createReportModal(reportReviewModal, state)}\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":["searchRadiusUnit","HeadingTag","DealerSelectorEmptyMessage","_ref","resources","React","className","emptyLocationsText","DealerSelectorWaiting","classnames","DealerSelectorFoundLocationsMessage","_ref2","locations","searchRadius","preferredDistanceUnit","dealerCountMessage","milesShortText","dealerCountMessageInKm","replace","length","toString","DealerLocatorLocationLineItemComponent","props","location","index","storeName","OrgUnitName","distanceAsString","buildDistanceString","distance","isLocationDisabled","undefined","Math","floor","Distance","storeAddress","Address","channelId","ChannelId","id","dealerDetailsHeader","renderDealerDetails","dealerDetailsDescriptionText","dealerDetailsContractCodeText","ContractList","map","mfrCode","ManufacturerCode","ManufacturerName","ContractCode","ContractDescription","DealerLocatorLocationLines","constructor","super","onClickHandler","orgUnitLocation","this","onClick","OrgUnitNumber","_scrollIntoView","selectedLocationDiv","selectedLocationRef","current","parent","parentElement","scrollTop","offsetTop","_mapResources","contactInfoHeader","contactText","dealerDetailsText","dealerDetailsManufacturerCodeText","dealerDetailsLaborRateText","dealerDetailsNotesText","storeCounter","componentDidUpdate","previousProps","selectedStoreLocationId","componentDidMount","_stores","reaction","render","ArrayExtensions","hasElements","show","displayList","role","store","_renderStoreLocation","OrgUnitLocation","selected","key","ref","__decorate","observable","observer","DealerLocatorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","event","keyCode","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","target","getAttribute","_searchTextChanged","async","inputValue","value","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","preventDefault","blur","performSearch","state","searchButtonAriaLabel","searchPlaceholderText","name","autoComplete","onSubmit","type","searchInputAriaLabel","placeholder","onChange","onKeyUp","Object","assign","color","storeSearchAttributes","EveLinePagination","nextPage","prevPage","changePage","currentPage","numPages","prev","next","disabled","Map","mapRef","kmToMiValue","defaultLookUpRadius","defaultPageLength","_attachMapAutoSuggest","config","autoSuggestOptions","context","telemetry","actionContext","requestContext","channel","data","storeSelectorStateManager","result","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","_objectSpread","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","debug","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_getAndUpdateStoreLocation","shouldShowAllStores","_navigator","setState","isSearchInProgress","navigator","geolocation","getCurrentPosition","_updateLocations","position","coords","latitude","longitude","error","PERMISSION_DENIED","timeout","handleHeadingChange","heading","text","_initMap","pushpinAccessible","Events","addHandler","setSelectedStoreLocationId","getCredentials","mapSessionId","_updateMap","_this$props$data$stor2","_storeSelectorStateMa","pushpinOptions","orgUnitStoreInformation","_pushpinOptions$color","_pushpinOptions$selec","_pushpinOptions$size","_pushpinOptions$showI","mapLocation","entities","clear","pushpins","selectionColor","size","showIndex","pageLength","paginatedList","filter","slice","unitStoreInfo","entries","storeLocation","Latitude","Longitude","isSelectedLocation","_getPushpinOptions","pushpin","Pushpin","Location","handleClickEvent","unshift","push","currentLocation","setView","center","bounds","LocationRect","fromShapes","padding","clusterLayer","ClusterLayer","layers","insert","setOptions","orgUnitNumber","dealerDetails","getDealerDetailsAsync","callerContext","selectedDealer","tempDealerLocations","newDealerLocations","findIndex","loc","_loc$OrgUnitLocation","searchTerm","geoLocate","trim","radius","lookupRadius","defaultLatitudeValue","defaultLongitudeValue","distanceUnitValue","SearchRadiusUnit","km","lookupDistanceInMiles","round","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getOrgUnitLocationByArea","calRadius","useChannelMfr","newOrgUnitLocationsInput","GetDealerLocationsInput","newOrgUnits","getDealerLocations","_setOrgUnitStoreInformation","then","moduleId","input","onLocationSelected","Promise","resolve","showMapViewLink","parentElementRef","product","setOrgUnitStoreInformation","catch","message","icon","_getSvgIcon","distanceResults","originCoords","resultsCoords","dealerLocations","_this$props$data$stor5","_this$map","_this$props$data$stor6","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$context","setTimeout","_this$props$data$stor3","_this$props$data$stor4","loadMapApi","BingMapsEnabled","lang","locale","market","navigationBarMode","NavigationBarMode","minified","when","_this$props$data$stor7","setMapModuleLoaded","_this$props$data$stor8","_this$props$data$stor9","_this$props$data$stor10","_this$props$context2","_this$props$data$stor11","_this$props$data$stor12","_this$props$data$stor13","_this$props$data$stor14","_this$props$data$stor15","_this$props$data$stor16","isDialogOpen","isSameContext","shouldComponentUpdate","_storeSelectorStateMa2","shouldDisplayMap","listMapViewState","displayMap","kilometersShortText","shouldDisplayList","paginatedLocationsList","ceil","page","scrollElement","document","querySelector","pagination","paginationPrev","paginationNext","viewProps","ModuleProps","tag","moduleProps","classname","Header","headerProps","Msdyn365","editProps","onEdit","request","dealerResultContainerProps","spinner","noLocationsMessage","locationsMessage","locationsList","search","MapProps","renderView","renderDealerList","Node","Module","FooterItemView","FooterItem","_renderElement","HeadingContainer","Link","linkText","image","EditableLink","OrderHistoryOrderInfomation","orderInformationProps","salesId","receiptId","channelName","createdDate","count","amount","OrderHistoryGroupDelivery","deliveryProps","processing","address","trackingInfo","OrderHistoryGroup","_ref3","groupProps","delivery","salesLinesProps","salesLines","salesLine","LineId","OrderHistoryGroups","_ref4","groupsProps","groups","group","OrderHistoryHeader","_ref5","orderCountLabel","extraActions","OrderHistorySalesOder","_ref6","salesOrderProps","orderInfomation","orderDetailsLink","expandProductsButton","OrderHistoryList","_ref7","listProps","salesOrders","salesOrder","_ref8","orderHistoryProps","header","alert","loading","emptyMessage","backToShoppingLink","list","table","moreButton","buildReviewCard","isUserReview","cardProps","rating","date","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","wasReviewHelpfulText","like","dislike","edit","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","apiSettings","Image","src","gridSettings","imageSettings","viewports","xs","q","w","h","sm","md","lg","xl","lazyload","cropFocalRegion","renderProductImage","Name","ItemId","filterByDropdown","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","sortByDropdown","userReview","isFilterApplied","review","reviewModal","modal","modalHeader","modalBody","form","inputRow","selectRatingLabel","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","modalFooter","submitButton","cancelButton","createReviewModal","createReportModal","reported","headerSubmitted","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","channelReferenceId","CookieComplianceAcceptButton","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","telemetryContent","onClose","payLoad","getPayloadObject","attributes","getTelemetryAttributes","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","forEach","link","contentAction","etext","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","additionalProperties","onTelemetryClick","links","onTextChange","CookieCompliance","getTelemetryObject","telemetryPageName","friendlyName","handleLinkTextChange","linkIndex","_this$props$config$ac","actionLinks","handleContentChange","content","visible","cookieRef","_onDismiss","bind","cookies","isConsentGiven","acceptCookiesAriaLabel","moduleConfig","MsDyn365","isBrowser","onDismiss","CookieComplianceBanner","AlertProps","fade","Content","acceptButton","setConsentCookie","reload","Alert","OrderInfomation","channelAddress","note","SalesLine","salesLineProps","buyAgainButton","errors","GroupDelivery","Group","isCashAndCarryTransaction","deliveryType","shipment","salesStatus","showTimeslot","pickupProps","pickupDateTimeslot","Groups","OrderSummary","orderSummaryProps","subtotal","shipping","tax","totalAmount","earnedPoints","Payment","paymentMethodsProps","title","methods","Help","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","_ref9","viewModes","tableViewActions","placedBy","orderSummary","payment","help","Iframe","iframeRef","srcURL","URL","exception","protocol","toLocaleLowerCase","iframeClassName","Heading","_createHeading","IframeContainer","IFrame","_createIframe","cookieConsentAccepted","_renderAlert","cookieConsentRequiredMessage","targetURL","height","iframeAriaLabel","IFrameView","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","_onSelect","deliveryCode","currentTarget","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","find","Code","Description","tabIndex","onKeyDown","StoreSelectorLocationLines","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","itemAvailabilities","enableOutOfStockCheck","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","i","_availabilityWithHour","OrgUnitAvailability","InventoryLocationId","InventLocationId","StockLevelLabel","storeHoursHeader","timeText","availabilityInfoHeader","availabilityText","closedText","storeHoursClosedText","outOfStock","outOfStockText","inStock","inStockText","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","_sortStores","_store$OrgUnitAvailab","deliveryOptions","OrgUnitPickUpDeliveryModes","_store$OrgUnitAvailab2","StoreSelectorLocationLineItemComponent","storeHours","StoreHours","isCurrentLocation","isInStock","ItemAvailabilities","hideStockStatus","handlers","onSelected","onSetAsPreferredStore","onRemovePreferredStore","stockStatusLabel","storeLocatorView","preferredStoreLocationId","isPreferredStoreEnabled","storePickUpOptionList","DeliveryOptions","productPickUpOptionList","productPickUpDeliveryOptions","filteredPickupMode","shouldShowIndex","stores","isPreferredStore","_value$OrgUnitAvailab","StoreSelectorSearchForm","_handleKeyPressPrev","Enter","Space","onShowAllStores","_onChangeHandler","filterPickupModeSelected","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","TelemetryConstant","SearchStore","ShowAllStore","showAllStoreAttributes","ToggleMapView","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","StoreSelectorEmptyMessage","StoreSelectorWaiting","StoreSelectorTermsOfService","StoreSelectorFoundLocationsMessage","isSeeAllStore","storeCountMessage","storeCountMessageInKm","storeAllCountMessage","PickUpOptionList","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","contains","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","window","addEventListener","componentWillUnmount","removeEventListener","pickupListOptionMenuText","pickupmodeList","stopPropagation","isExpandSiteOptionsState","onPickupInStoreClickHandler","_props$selectedStore","selectedStore","onSetPreferredStoreClickHandler","_props$selectedStore2","onChangeHandler","_props$selectedStore3","removePreferredStoreHandler","onPickupModeSelectHandler","pickupMode","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","renderPickupModes","deliveryOptionList","pickupInStoreButtonText","pickupInStoreAriaLabel","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","parentClassName","resourceLabel","stockLabel","stockText","canSelectLocation","PickupInStore","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","matchDeliveryOptions","storeDetailsMain","storeHeader","storeDetailsCloseButton","Button","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","pickUpDeliveryOptionButton","pickupModes","preferredStoreButton","removePreferredStoreButton","secondsToTime","seconds","hours","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","productdeliveryOptions","deliveryOption","pickup","_delivery","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","storeLocations","selectedStoreResources","_selectedStore$OrgUni3","selectedProps","StoreId","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","termsOfServiceLink","onShowAllStoresHandler","onFilterLocations","_location$OrgUnitPick","some","onFilteredPickupMode","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","storeId","mode","setPreferredStoreLocation","clearPreferredStore","_setSelectedStore","isSeeAllStoreValue","style","_closeDialog","focus","closeDialog","styleDefault","preferredLocationId","storeLocationList","isDialog","modeDefault","getFullAvailableInventoryNearby","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","RecordId","warning","selectedLocation","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","_this$props$context$a","_storeSelectorStateMa3","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","app","appConfig","slots","maps","mapSlot","isMobileDevice","isMobile","variant","VariantType","Viewport","isInlineView","isLocatorView","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","isEnableOutofStock","enableStockCheck","sortLocation","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","Modal","autoFocus","isOpen","onClosed","horizontalPosition","verticalPosition","toggle","isMobileView","HeaderContainerProps","ModalHeader","HeaderProps","FooterContainerProps","ModalFooter","BodyContainerProps","ModalBody","bodyWrapperProps","storeResultContainerProps","mapContainerProps","storeDetailsModal","outOfStockThreshold","terms","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","_store$OrgUnitAvailab3","selectedStoreLocation","lineResources","_store$OrgUnitAvailab4","locationOpen","openFrom","openTo","renderDeliveryOptions","renderBody","toggleBopisHandler","cartLine","isBopisSelected","_cartLine$pickUpInSto","pickUpInStore","toggleBopis","onChangeStoreHandler","_cartLine$pickUpInSto2","renderCartLine","storeSelector","isMultiplePickUp","emailDeliveryModeCode","outOfStockErrorMessage","addToWishlist","remove","renderGroupBopisBlock","_cartLine$data2","cartline","DeliveryMode","changeStoreDisplayText","shipInsteadDisplayText","pickItUpDisplayText","puckUpinStoreAttribute","addToOrderTemplate","renderCartlinesInternal","cartLines","itemIndex","renderBopisBlock","_cartLine$data","shipToAddressDisplayText","pickUpAtStoreWithLocationText","ContainerProps","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","Number","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","_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","parseInt","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","Browser","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","viewport","_data$storeSelectorSt"],"sourceRoot":""}