{"version":3,"file":"static/js/20.ac793e0024231cd8ad04.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/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/reviews-list.view.tsx?03f6","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/account-profile-edit.tsx?a0b5","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/account-profile-edit.view.tsx?530d","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-button.tsx?e669","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-error.tsx?eadf","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-input.tsx?5c72","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-label.tsx?4793","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-loading-icon.tsx?fba0","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-loading-message.tsx?7cf0","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 { 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 { 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 * as Msdyn365 from '@msdyn365-commerce/core';\nimport { EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Modal, ModalBody } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IAccountProfileEditConfig, IAccountProfileEditProps } from './account-profile-edit.props.autogenerated';\nimport AccountProfileEditButtonComponent from './components/account-profile-edit-button';\nimport AccountProfileEditErrorComponent from './components/account-profile-edit-error';\nimport AccountProfileEditInputComponent from './components/account-profile-edit-input';\nimport AccountProfileEditLabelComponent from './components/account-profile-edit-label';\nimport AccountProfileEditLoadingIconComponent from './components/account-profile-edit-loading-icon';\nimport AccountProfileEditLoadingMessageComponent from './components/account-profile-edit-loading-message';\n\nexport interface IAccountProfileEditViewState {\n isShowLoading: boolean;\n}\n\nexport interface IAccountProfileEditItem {\n wrapper: INodeProps;\n key: string;\n label: React.ReactNode;\n errorMessage: React.ReactNode;\n input: React.ReactNode;\n}\n\nexport interface IAccountProfileEditLocalAccount {\n localAccount: INodeProps;\n items: IAccountProfileEditItem[];\n errorMessage: React.ReactNode[];\n buttonsWrapper: INodeProps;\n buttons: React.ReactNode[];\n verificationSuccessModal: INodeProps;\n verificationSuccessModalMessage: INodeProps;\n}\n\nexport interface IAccountProfileEditLoading {\n modal: INodeProps;\n modalBody: INodeProps;\n icon: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface IAccountProfileEditViewProps {\n className: string;\n viewState: IAccountProfileEditViewState;\n loading: IAccountProfileEditLoading;\n accountProfileEdit: IModuleProps;\n defaultAADConainer: INodeProps;\n aadConainer: INodeProps;\n heading: React.ReactNode;\n accountProfileEditLocalAccount: IAccountProfileEditLocalAccount;\n}\n\n/**\n *\n * AccountProfileEdit component\n * All AAD related module is rendered on AAD page and we need to respect HTML contract provide by AAD.\n * Please ensure any change in module don't break contract with AAD.\n * @extends {React.Component>}\n */\n@observer\nclass AccountProfileEdit extends React.Component> {\n private readonly moduleClassName: string = 'ms-account-profile-edit';\n\n private readonly telemetryContent: ITelemetryContent;\n\n @observable private givenName: string;\n\n @observable private surname: string;\n\n @observable private email: string;\n\n @observable private emailRegex: string;\n\n @observable private isInitialized: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private initializationTimer: any;\n\n constructor(props: IAccountProfileEditProps) {\n super(props);\n this.givenName = '';\n this.surname = '';\n this.email = '';\n this.emailRegex = EmailRegex.defaultRegex.source;\n this.isInitialized = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n this._onInit();\n }\n\n // After successful AAD initialization, call initialize method provided by AAD to attach events.\n public componentDidUpdate(): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (this.isInitialized && window && window['$element'] && window['$element']['initialize']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['$element']['initialize']();\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IAccountProfileEditProps,\n nextState: IAccountProfileEditViewState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { config, resources } = this.props;\n\n const viewProps = {\n ...this.props,\n viewState: {\n isShowLoading: !this.isInitialized\n },\n accountProfileEdit: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, config.className)\n },\n loading: {\n modal: {\n tag: Modal,\n isOpen: true\n },\n modalBody: {\n tag: ModalBody\n },\n icon: ,\n message: \n },\n defaultAADConainer: {\n id: 'api',\n style: { display: 'none' }\n },\n aadConainer: {\n id: this.isInitialized ? 'api' : null,\n className: `${this.moduleClassName}__container`\n },\n heading: config.heading && config.heading.text && (\n \n ),\n accountProfileEditLocalAccount: this._renderLocalAccount()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading.text = event.target.value);\n\n public onTextBoxChange = (event: React.ChangeEvent) => {\n const id = event.target.id;\n const value = event.target.value;\n\n switch (id.toLowerCase()) {\n case 'givenname': {\n this.givenName = value;\n break;\n }\n case 'surname': {\n this.surname = value;\n break;\n }\n case 'email': {\n this.emailRegex = value;\n break;\n }\n default:\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _onInit = () => {\n this._prePopulateData();\n this._updateErrorMessage();\n\n // Check if AAD initialization is complete. AAD do not provide any event to subscribe so we need to check variable set by AAD to check initialization status.\n this.initializationTimer = setInterval(() => {\n this._isInitializationSuccessful();\n }, 100);\n setTimeout(() => {\n clearInterval(this.initializationTimer);\n }, 10_000);\n };\n\n // After successful AAD initialization, remove waiting and preload any data, if needed.\n private readonly _isInitializationSuccessful = () => {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window && window['$diags'] && window['$diags']['initializationSuccessful']) {\n clearInterval(this.initializationTimer);\n this.isInitialized = true;\n }\n };\n\n private readonly _prePopulateData = () => {\n const { resources } = this.props;\n const invalidEmailAddressError = resources.invalidEmailAddressError || 'Please enter a valid email address.';\n\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window['SA_FIELDS'] && window['SA_FIELDS']['AttributeFields']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['SA_FIELDS']['AttributeFields'].map(\n (obj: { ID: string; PRE: string; PAT: string; UX_INPUT_TYPE: string; PAT_DESC: string }) => {\n const value = obj.PRE ? this._htmlDecode(obj.PRE) : '';\n switch (obj.ID.toLowerCase()) {\n case 'givenname': {\n this.givenName = value;\n break;\n }\n case 'surname': {\n this.surname = value;\n break;\n }\n case 'email': {\n this.email = value;\n this.emailRegex = obj.PAT;\n obj.PAT_DESC = invalidEmailAddressError;\n break;\n }\n default:\n }\n }\n );\n }\n };\n\n private _htmlDecode(str: string): string {\n const e = document.createElement('div');\n\n e.innerHTML = str;\n return e.childNodes.length === 0 ? '' : e.childNodes[0].nodeValue || '';\n }\n\n private readonly _updateErrorMessage = () => {\n const { resources } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n if (window && window['CONTENT']) {\n const message = {\n required_field: resources.requiredFieldMissingError,\n verifying_blurb: resources.loadingMessage\n };\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n Object.assign(window['CONTENT'], message);\n }\n };\n\n private _renderLocalAccount(): IAccountProfileEditLocalAccount {\n const { config, resources } = this.props;\n const localAccount = {\n localAccount: {\n id: 'attributeList',\n className: `${this.moduleClassName}__account-items attr`\n },\n items: [\n this._renderInput('givenName', 'text', this.givenName, resources.firstNameLabelText, resources.firstNameMaxLength),\n this._renderInput('surname', 'text', this.surname, resources.lastNameLabelText, resources.lastNameMaxLength)\n ],\n errorMessage: [\n ,\n ,\n \n ],\n buttonsWrapper: {\n className: `${this.moduleClassName}__buttons`\n },\n buttons: [\n ,\n \n ],\n verificationSuccessModal: {\n className: `${this.moduleClassName}__verifying-modal verifying-modal`\n },\n verificationSuccessModalMessage: {\n id: 'verifying_blurb',\n className: `${this.moduleClassName}__verifying-modal-message`\n }\n };\n\n if (config.showEmail && this.email !== '') {\n localAccount.items.push(\n this._renderInput('email', 'email', this.email, resources.emailAddressLabelText, undefined, this.emailRegex)\n );\n }\n\n return localAccount;\n }\n\n private _renderInput(\n id: string,\n type: string,\n value: string,\n labelText: string,\n maxLength?: string,\n pattern?: string\n ): IAccountProfileEditItem {\n const className = `${this.moduleClassName}__account-item`;\n return {\n wrapper: {\n className: classnames(className, `${className}-${id}`, 'entry-item', 'attrEntry')\n },\n key: id,\n label: (\n \n ),\n errorMessage: (\n \n ),\n input: (\n \n )\n };\n }\n}\n\nexport default AccountProfileEdit;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IAccountProfileEditItem,\n IAccountProfileEditLoading,\n IAccountProfileEditLocalAccount,\n IAccountProfileEditViewProps\n} from './account-profile-edit';\n\nconst AccountProfileEditItem: React.FC = ({ wrapper, label, errorMessage, input }) => {\n return (\n \n {label}\n {errorMessage}\n {input}\n \n );\n};\n\nconst LocalAccount: React.FC = ({\n localAccount,\n items,\n errorMessage,\n buttonsWrapper,\n buttons,\n verificationSuccessModal,\n verificationSuccessModalMessage\n}) => {\n return (\n \n {items &&\n items.map((item: IAccountProfileEditItem) => {\n // eslint-disable-next-line react/jsx-key\n return ;\n })}\n {errorMessage &&\n errorMessage.map((error: React.ReactNode, index: number) => {\n return {error};\n })}\n \n {buttons &&\n buttons.map((button: React.ReactNode, index: number) => {\n return {button};\n })}\n \n\n \n \n \n \n );\n};\n\nconst AccountProfileEditLoading: React.FC = ({ modal, modalBody, icon, message }) => {\n return (\n \n \n {icon}\n {message}\n \n \n );\n};\n\nconst AccountProfileEditView: React.FC = props => {\n const { accountProfileEdit, viewState, loading, defaultAADConainer, aadConainer, heading, accountProfileEditLocalAccount } = props;\n\n return (\n \n {viewState.isShowLoading && }\n {viewState.isShowLoading && }\n \n {heading}\n {LocalAccount(accountProfileEditLocalAccount)}\n \n \n );\n};\n\nexport default AccountProfileEditView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditButton {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n telemetryContent?: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nconst AccountProfileEditButton: React.FC = ({\n id,\n className,\n text,\n ariaLabel,\n disabled,\n telemetryContent,\n onClick\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default AccountProfileEditButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nconst AccountProfileEditError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n );\n};\n\nexport default AccountProfileEditError;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditInputProps {\n id?: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: any;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface IAccountProfileEditInput {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst GetMaxLength = (maxLength?: string): number | undefined => {\n if (maxLength) {\n const parsedMaxLength = Number.parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nconst AccountProfileEditInput: React.FC = ({ id, type, value, pattern, className, maxLength, onChange }) => (\n \n);\n\nexport default AccountProfileEditInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLabel {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nconst AccountProfileEditLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default AccountProfileEditLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLoadingIcon {\n className: string;\n}\n\nconst AccountProfileEditLoadingIcon: React.FC = ({ className }) => (\n
\n);\n\nexport default AccountProfileEditLoadingIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLoadingMessage {\n className: string;\n message: string;\n}\n\nconst AccountProfileEditLoadingMessage: React.FC = ({ className, message }) => (\n
{message}
\n);\n\nexport default AccountProfileEditLoadingMessage;\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","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","header","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","AccountProfileEdit","moduleClassName","onTextBoxChange","toLowerCase","givenName","surname","emailRegex","_onInit","_prePopulateData","_updateErrorMessage","initializationTimer","setInterval","_isInitializationSuccessful","clearInterval","window","isInitialized","invalidEmailAddressError","obj","PRE","_htmlDecode","ID","email","PAT","PAT_DESC","required_field","requiredFieldMissingError","verifying_blurb","loadingMessage","EmailRegex","defaultRegex","source","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","nextProps","nextState","viewState","isShowLoading","accountProfileEdit","loading","Modal","isOpen","ModalBody","AccountProfileEditLoadingIconComponent","AccountProfileEditLoadingMessageComponent","defaultAADConainer","style","display","aadConainer","accountProfileEditLocalAccount","_renderLocalAccount","str","e","createElement","innerHTML","childNodes","nodeValue","localAccount","items","_renderInput","firstNameLabelText","firstNameMaxLength","lastNameLabelText","lastNameMaxLength","errorMessage","AccountProfileEditErrorComponent","requiredFieldMissingSummaryError","fieldIncorrectError","buttonsWrapper","buttons","AccountProfileEditButtonComponent","ariaLabel","saveButtonAriaLabel","saveButtonText","cancelButtonText","verificationSuccessModal","verificationSuccessModalMessage","showEmail","emailAddressLabelText","labelText","maxLength","pattern","wrapper","label","AccountProfileEditLabelComponent","forId","AccountProfileEditInputComponent","AccountProfileEditItem","AccountProfileEditLoading","_ref3","item","button","LocalAccount","payLoad","getPayloadObject","attributes","getTelemetryAttributes","Button","errorClassName","GetMaxLength","parsedMaxLength","Number","parseInt","isNaN","htmlFor","OrderInfomation","orderInformationProps","salesId","receiptId","createdDate","count","amount","channelReferenceId","channelName","channelAddress","note","SalesLine","salesLineProps","salesLine","buyAgainButton","errors","GroupDelivery","deliveryProps","Group","_ref4","groupProps","delivery","address","salesLinesProps","salesLines","isCashAndCarryTransaction","LineId","deliveryType","shipment","trackingInfo","salesStatus","showTimeslot","pickupProps","pickupDateTimeslot","Groups","_ref5","groupsProps","groups","group","OrderSummary","_ref6","orderSummaryProps","subtotal","shipping","tax","totalAmount","earnedPoints","Payment","_ref7","paymentMethodsProps","title","methods","Help","_ref8","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","_ref9","viewModes","tableViewActions","table","placedBy","alert","orderInfomation","orderSummary","payment","help","Iframe","iframeRef","isConsentGiven","cookies","destinationUrl","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","bind","TelemetryConstant","SearchStore","contentAction","etext","ShowAllStore","showAllStoreAttributes","ToggleMapView","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","StoreSelectorEmptyMessage","StoreSelectorWaiting","StoreSelectorTermsOfService","link","onTextChange","editableLink","linkUrl","openInNewTab","StoreSelectorFoundLocationsMessage","isSeeAllStore","storeCountMessage","storeCountMessageInKm","storeAllCountMessage","PickUpOptionList","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","contains","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","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","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","handleLinkTextChange","termsOfServiceLink","onShowAllStoresHandler","onFilterLocations","_location$OrgUnitPick","some","onFilteredPickupMode","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","storeId","mode","setPreferredStoreLocation","clearPreferredStore","_setSelectedStore","isSeeAllStoreValue","_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","_sortLocation","_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","autoFocus","fade","onClosed","horizontalPosition","verticalPosition","toggle","isMobileView","HeaderContainerProps","ModalHeader","HeaderProps","FooterContainerProps","ModalFooter","BodyContainerProps","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","renderCartLinesGroupTitle","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","_cartLine$pickUpInSto5","itemLabel","itemsLabel","countTitle","_props$cart2","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","_props$cart6","updatedTitle","cartTitle","cart","totalItemsInCart","renderModuleAttributes","checkoutBlockedDueToUnavailableFunds","orderSummaryLineitems","orderTotal","checkoutAsSignInUserButton","checkoutAsGuestButton","renderOrderSummaryCheckoutButton","hasInvoiceLine","promotionOptions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","renderCartLinesGroup","cartLinesGroup","cartlines","_props$context$action","_props$context$action2","cartlineId","countItem","reduce","_item$data$cartline$Q","_item$data","Quantity","countItems","EmailDeliveryModeCode","cartDataResult","orderSummaryHeading","OrderSummaryWrapper","renderInvoiceSummarylines","invoiceSummaryLines","orderSummaryItems","invoices","giftCard","loyalty","invoiceSummaryLineitems","OrderSummaryItems","renderOrderSummarylines","orderSummaryLines","totalDiscounts","otherCharge","errorData","OrderSummaryErrors","Wrapper","_props$cart","promoCode","expressCheckoutButton","ExpressCheckoutSectionWrapper","createTemplateFromCartButton","renderOrderSummaryCheckout","StoreSelectorFoundLocationsMessageComponent","RichTextComponent","ContactInformationType","Phone","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","storeHoursDayPeriod","storeHoursDay","productDeliveryOptions","productDeliveryOption","PickUpMethodDropdownComponent","pickUpStatesProps","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","dataset","description","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","PickUpButtonComponent","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","preferredStoreAttribute","removePreferredStoreAttribute","_props$data$storeSele","renderStoreLocations","selectedLocationReference","_props$data$storeSele2","_props$locationListPr","renderStoreLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","Browser","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","MsDyn365","isBrowser","viewport","_data$storeSelectorSt"],"sourceRoot":""}