{"version":3,"file":"static/js/f494b5b728e3b1aea4cb.bundle.js","mappings":"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","sources":["webpack://jansen-adventureworks/./src/themes/jansen-adventureworks/views/store-selector.view.tsx?742f","webpack://jansen-adventureworks/./lib/store-selector/module-registration.js?8817","webpack://jansen-adventureworks/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://jansen-adventureworks/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://jansen-adventureworks/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://jansen-adventureworks/./src/modules/store-selector/components/store-pickup-option-list.tsx?7a25","webpack://jansen-adventureworks/./src/modules/store-selector/components/store-selector-location-lines.tsx?87ff","webpack://jansen-adventureworks/./src/modules/store-selector/components/store-selector-search-form.tsx?fb9a","webpack://jansen-adventureworks/./src/modules/store-selector/components/store-selector-small-components.tsx?4335","webpack://jansen-adventureworks/./src/modules/store-selector/components/pickup-option-list.tsx?dae0","webpack://jansen-adventureworks/./src/modules/store-selector/components/selected-store/selected-store.tsx?bfbc","webpack://jansen-adventureworks/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?fe27","webpack://jansen-adventureworks/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?923d","webpack://jansen-adventureworks/./src/modules/store-selector/store-selector.tsx?e416","webpack://jansen-adventureworks/./src/modules/store-selector/store-selector.view.tsx?71a6","webpack://jansen-adventureworks/./src/modules/adventureworks/views/store-selector.view.tsx?ccdd","webpack://jansen-adventureworks/external var \"React\"?0d3b","webpack://jansen-adventureworks/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365, { RichTextComponent } from '@msdyn365-commerce/core';\r\nimport {\r\n ContactInformationType,\r\n DeliveryOption,\r\n IDictionary,\r\n OrgUnitContact,\r\n OrgUnitLocation,\r\n StoreHours\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n buildStoreHours,\r\n IHoursDisplayInfo,\r\n ILocationHours,\r\n IStoreSelectorFoundLocationsMessage,\r\n IStoreSelectorLocationLineItemProps,\r\n IStoreSelectorLocationLineItemResources,\r\n IStoreSelectorViewProps,\r\n secondsToTime\r\n} from '@msdyn365-commerce-modules/store-selector';\r\nimport { ISelectedStoreViewProps } from '@msdyn365-commerce-modules/store-selector/src/modules/store-selector/components/selected-store/selected-store';\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n isMobile,\r\n Module,\r\n Node,\r\n TelemetryConstant,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IStoreSelectorProps, IStoreSelectorResources } from '../definition-extensions/store-selector.ext.props.autogenerated';\r\n\r\n/**\r\n * PickUpMethodComponent View Props Interface.\r\n */\r\nexport interface IPickupComponent extends IStoreSelectorLocationLineItemProps {\r\n pickUpStatesProps: IStoreSelectorViewProps;\r\n}\r\n\r\nexport interface IPickUpButtonComponent {\r\n attributes: IDictionary | undefined;\r\n onPickupInStoreClickHandler?(): void;\r\n}\r\n\r\n/**\r\n * Found Locations Message component in Store Selector.\r\n * @param props - The component props.\r\n * @returns The JSX Element.\r\n */\r\nconst StoreSelectorFoundLocationsMessageComponent: React.FC = props => {\r\n const { locations, searchRadius, resources, isSeeAllStore, preferredDistanceUnit } = props;\r\n if (locations) {\r\n const storeCountMessage =\r\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\r\n\r\n return (\r\n ${locations.length.toString()}`\r\n )\r\n : storeCountMessage\r\n .replace(\r\n '{count}',\r\n `${locations.length.toString()}`\r\n )\r\n .replace(\r\n '{radius}',\r\n `${searchRadius.toString()}`\r\n )\r\n }\r\n />\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Build distance string.\r\n * @param distance - The distance.\r\n * @param preferredDistanceUnit - The preferred distance unit.\r\n * @param resources - The module resources.\r\n * @param isLocationDisabled - True if location is disabled.\r\n * @returns The distance string.\r\n */\r\nconst buildDistanceString = (\r\n distance: number | undefined,\r\n preferredDistanceUnit: string,\r\n resources: IStoreSelectorResources & IStoreSelectorResources,\r\n isLocationDisabled?: boolean\r\n): string | undefined => {\r\n const closeDistance: number = 1;\r\n if (distance === undefined || isLocationDisabled) {\r\n return undefined;\r\n } else if (distance < closeDistance) {\r\n const closeDistanceString: string = resources.closeDistanceString;\r\n return closeDistanceString.replace('{preferredDistanceUnit}', preferredDistanceUnit);\r\n }\r\n const distanceAsString: string = resources.distanceString;\r\n return distanceAsString\r\n .replace('{preferredDistanceUnit}', preferredDistanceUnit)\r\n .replace('{distance}', Math.floor(distance).toString());\r\n};\r\n\r\n/**\r\n * Extract phone number.\r\n * @param contacts - Contacts array.\r\n * @returns Phone number.\r\n */\r\nconst 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 === ContactInformationType.Phone && !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 * Render Store Hours Day.\r\n * @param displayTime - Store Hours Information.\r\n * @param storeHoursDayPeriodString - The string for store hours day period.\r\n * @param storeHoursDayString - The string for store hours day period.\r\n * @returns JSX element with store hours day.\r\n */\r\nconst buildStoreHoursDay = (displayTime: IHoursDisplayInfo, storeHoursDayPeriodString: string, storeHoursDayString: string) => {\r\n return (\r\n ${displayTime.startDayShort}`)\r\n .replace(\r\n '{endDay}',\r\n `${displayTime.endDayShort}`\r\n )\r\n : storeHoursDayString.replace(\r\n '{startDay}',\r\n `${displayTime.startDayShort}`\r\n )\r\n }\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Render Store Hours.\r\n * @param storeHours - Store hours.\r\n * @param storeHoursList - Store hours list.\r\n * @param locationOpen - Location open.\r\n * @param resources - The module resources.\r\n * @returns JSX element with store hours.\r\n */\r\nconst renderStoreHours = (\r\n storeHours: StoreHours | undefined,\r\n storeHoursList: IHoursDisplayInfo[] | undefined,\r\n locationOpen: ILocationHours | undefined,\r\n resources: IStoreSelectorResources & IStoreSelectorResources\r\n): JSX.Element | null => {\r\n // First, use the store hours. This will allow listing day by day hours\r\n if (storeHours?.RegularStoreHours) {\r\n return (\r\n
\r\n {storeHoursList?.map(displayTime => (\r\n
\r\n {buildStoreHoursDay(displayTime, resources.storeHoursDayPeriod, resources.storeHoursDay)}\r\n
{displayTime.timeRange}
\r\n
\r\n ))}\r\n
\r\n );\r\n }\r\n\r\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\r\n const storeOpenFrom: string = locationOpen?.openFrom ? locationOpen.openFrom : '';\r\n const storeOpenTo: string = locationOpen?.openTo ? locationOpen.openTo : '';\r\n return (\r\n
\r\n {resources.storeHoursDayPeriod.replace('{startDay}', storeOpenFrom).replace('{endDay}', storeOpenTo)}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Match delivery options.\r\n * @param productDeliveryOptions - The list of product delivery options.\r\n * @param storePickUpOptionList - The list of store pick up options.\r\n * @returns Matched delivery option.\r\n */\r\nconst matchDeliveryOptions = (\r\n productDeliveryOptions: DeliveryOption[] | undefined,\r\n storePickUpOptionList: DeliveryOption[] | undefined\r\n): DeliveryOption[] => {\r\n if (!productDeliveryOptions) {\r\n return [] as DeliveryOption[];\r\n }\r\n return productDeliveryOptions\r\n .map(productDeliveryOption => storePickUpOptionList?.find(delivery => delivery.Code === productDeliveryOption.Code))\r\n .filter(productDeliveryOption => productDeliveryOption) as DeliveryOption[];\r\n};\r\n\r\n/**\r\n * PickUpMethod Resources Interface.\r\n */\r\nexport interface IPickUpButtonResources {\r\n pickupInStoreAriaLabel: string;\r\n pickupInStoreButtonText: string;\r\n pickupDeliveryOptionErrorMessage: string;\r\n}\r\n\r\n/**\r\n * PickUpMethod Resources Interface.\r\n */\r\nexport interface IPickUpMethodResources {\r\n selectStoreText: string;\r\n pickUpMethodLabel: string;\r\n pickUpOptionPlaceholder: string;\r\n pickupOptionDropdownError: string;\r\n pickupButtonAriaLabel: string;\r\n}\r\n\r\n/**\r\n * PickUp method dropdown component.\r\n * @param props - The view props.\r\n * @returns JSX Element.\r\n */\r\nconst PickUpMethodDropdownComponent = (props: IPickupComponent & IPickUpMethodResources) => {\r\n const {\r\n handlers,\r\n location,\r\n pickUpStatesProps,\r\n selectStoreText,\r\n pickUpMethodLabel,\r\n pickUpOptionPlaceholder,\r\n pickupOptionDropdownError,\r\n pickupButtonAriaLabel,\r\n productPickUpOptionList,\r\n storePickUpOptionList\r\n } = props;\r\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\r\n const [selectedStorePickUpOption, selectStorePickUpOption] = React.useState('');\r\n const [currentStorePickUpOption, setCurrentStorePickUpOption] = React.useState(pickUpOptionPlaceholder);\r\n const [isDropdownOpen, toggleDropdown] = React.useState(false);\r\n const [isError, setError] = React.useState(false);\r\n\r\n /**\r\n * Method to handle the store pickup option change.\r\n * @param event - Change Event.\r\n */\r\n const onChangeHandler = React.useCallback((event: React.MouseEvent) => {\r\n event.preventDefault();\r\n selectStorePickUpOption(event.currentTarget.value);\r\n setCurrentStorePickUpOption(event.currentTarget.dataset.description ? event.currentTarget.dataset.description : '');\r\n toggleDropdown(false);\r\n setError(false);\r\n }, []);\r\n\r\n /**\r\n * Method to render store location line pick up button.\r\n * @param filteredDeliveryMode - Filtered Delivery Mode.\r\n * @returns JSX Element.\r\n */\r\n const renderLocationLinePickupButton = (filteredDeliveryMode: DeliveryOption | undefined) => {\r\n return filteredDeliveryMode !== undefined ? (\r\n
\r\n \r\n {filteredDeliveryMode.Description}\r\n \r\n
\r\n ) : null;\r\n };\r\n\r\n /**\r\n * Method to handle the store pickup option submit.\r\n */\r\n const onClickHandler = React.useCallback(() => {\r\n if (!StringExtensions.isNullOrEmpty(selectedStorePickUpOption)) {\r\n handlers.onSelected(location, selectedStorePickUpOption);\r\n } else if (pickUpStatesProps.state.filteredPickupMode !== undefined) {\r\n handlers.onSelected(location, pickUpStatesProps.state.filteredPickupMode);\r\n } else {\r\n toggleDropdown(false);\r\n setError(true);\r\n }\r\n }, [location, selectedStorePickUpOption, handlers, pickUpStatesProps.state.filteredPickupMode]);\r\n\r\n const handleDropdownToggle = React.useCallback(() => {\r\n toggleDropdown(!isDropdownOpen);\r\n setError(false);\r\n }, [isDropdownOpen]);\r\n\r\n const filterDeliveryOption = deliveryOptionList.find(\r\n (delivery: DeliveryOption) => delivery.Code === pickUpStatesProps.state.filteredPickupMode\r\n );\r\n\r\n const pickupInStoreButtonText: string = selectStoreText;\r\n const filteredDeliveryMode: DeliveryOption | undefined =\r\n pickUpStatesProps.state.filteredPickupMode !== undefined ? filterDeliveryOption : undefined;\r\n\r\n return (\r\n \r\n
{pickUpMethodLabel}
\r\n {pickUpStatesProps.state.filteredPickupMode === undefined ? (\r\n
\r\n \r\n {currentStorePickUpOption}\r\n \r\n
    \r\n {deliveryOptionList.map((delivery: DeliveryOption) => (\r\n \r\n \r\n {delivery.Description}\r\n \r\n \r\n ))}\r\n
\r\n
{pickupOptionDropdownError}
\r\n
\r\n ) : (\r\n renderLocationLinePickupButton(filteredDeliveryMode)\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * PickUp button component.\r\n * @param props - The view props.\r\n * @returns JSX Element.\r\n */\r\nconst PickUpButtonComponent = (props: IPickUpButtonComponent & IPickUpButtonResources) => {\r\n const { pickupInStoreAriaLabel, pickupInStoreButtonText, pickupDeliveryOptionErrorMessage, attributes } = props;\r\n const [isError, setError] = React.useState(false);\r\n const onPickupButtonClickHandler = () => () => {\r\n setError(true);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {pickupInStoreButtonText}\r\n \r\n
\r\n {pickupDeliveryOptionErrorMessage}\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Method to render store location line item.\r\n * @param locationLineItem - The Location Line item view props.\r\n * @param props - The view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderStoreLocationLineItem = (\r\n locationLineItem: IStoreSelectorLocationLineItemProps,\r\n props: IStoreSelectorViewProps & IStoreSelectorProps\r\n) => {\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\r\n hideStockStatus,\r\n index,\r\n isInStock,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n location,\r\n resources,\r\n storeHours,\r\n storeHoursList,\r\n stockStatusLabel,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\r\n storeLocatorView,\r\n telemetryContent\r\n } = locationLineItem;\r\n const storeName = location.OrgUnitName;\r\n const distanceAsString: string | undefined = buildDistanceString(\r\n location.Distance,\r\n locationLineItem.preferredDistanceUnit,\r\n props.resources,\r\n locationLineItem.isLocationDisabled\r\n );\r\n const storeAddress: string | undefined = location.Address;\r\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\r\n\r\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\r\n const stockStatus = stockStatusLabel ? stockStatusLabel : resourceLabel;\r\n const stockText: string | undefined = hideStockStatus ? undefined : stockStatus;\r\n\r\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n\r\n /**\r\n * Method to handle the change for preferred store.\r\n * @returns Void.\r\n */\r\n const onSetPreferredStoreClickHandler = () => {\r\n locationLineItem.handlers.onSetAsPreferredStore(locationLineItem.location.OrgUnitNumber);\r\n };\r\n\r\n /**\r\n * Method to handle the removal of the preferred store.\r\n * @returns Void.\r\n */\r\n const onRemovePreferredStoreClickHandler = async (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n locationLineItem.handlers.onRemovePreferredStore();\r\n await props.data.storeSelectorStateManager.result?.setSelectedStoreLocationId(undefined);\r\n };\r\n\r\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\r\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\r\n const preferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\r\n const removePreferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n
\r\n
\r\n {storeLocatorView && {index}}\r\n {storeName}\r\n {distanceAsString ? {distanceAsString} : false}\r\n
\r\n
\r\n
\r\n

{locationLineItem.resources.contactInfoHeader}

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

{locationLineItem.resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

\r\n {stockText &&

{stockText}

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

{resources.currentLocation}

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

{storeSelectorViewProps.resources.contactText}

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

{storeSelectorViewProps.resources.timeText}

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

{productAvailability}

\r\n {stockStatus &&

{stockStatus}

}\r\n
\r\n )}\r\n
\r\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\r\n {canSelectPickUpMethod}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Store Selector View.\r\n * @param props - The view props.\r\n * @returns The JSX Element.\r\n */\r\nconst StoreSelectorViewComponent: React.FC> = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Store-Selector.tsx file\r\n const {\r\n BodyContainerProps,\r\n storeResultContainerProps,\r\n FooterContainerProps,\r\n HeaderContainerProps,\r\n HeaderProps,\r\n ModuleProps,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n maps,\r\n locationsList,\r\n noLocationsMessage,\r\n terms,\r\n storeDetailsModal,\r\n selectedLocation,\r\n bodyWrapperProps,\r\n data,\r\n context\r\n } = props;\r\n const selectedLocationReference = React.useRef(null);\r\n const [isDesktopPort, setIsDesktopPort] = React.useState(false);\r\n\r\n const isDesktopViewport = React.useCallback(() => {\r\n const portView = isMobile({ variant: VariantType.Browser, context: context.request });\r\n const isDesktopPorts = portView === 'md' || portView === 'xl' || portView === 'lg';\r\n setIsDesktopPort(isDesktopPorts);\r\n }, [context]);\r\n\r\n React.useEffect(() => {\r\n if (props.locationsList) {\r\n /**\r\n * Method to handle scrolling.\r\n */\r\n const scrollIntoView = () => {\r\n const selectedLocationDiv = (selectedLocationReference as React.RefObject).current;\r\n if (selectedLocationDiv !== null) {\r\n const offset = selectedLocationDiv.getBoundingClientRect();\r\n const parent = selectedLocationDiv.parentElement?.parentElement;\r\n if (parent && offset) {\r\n const totalHeight = parent.scrollTop + offset.top;\r\n parent.scrollTop = totalHeight - parent.clientHeight;\r\n }\r\n }\r\n };\r\n scrollIntoView();\r\n }\r\n }, [props.locationsList]);\r\n\r\n React.useEffect(() => {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('resize', isDesktopViewport);\r\n }\r\n isDesktopViewport();\r\n }, [isDesktopViewport]);\r\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\r\n\r\n const isDesktopView = viewport === 'md' || viewport === 'lg' || viewport === 'xl';\r\n\r\n if (!isDesktopView || !isDesktopPort) {\r\n return (\r\n \r\n {HeaderProps}\r\n \r\n \r\n {locationsMessage && (\r\n \r\n )}\r\n {search}\r\n \r\n \r\n {state.isSearchInProgress ? (\r\n spinner\r\n ) : (\r\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\r\n )}\r\n \r\n {maps}\r\n \r\n {selectedLocation && renderSelectedStore(selectedLocation, props)}\r\n \r\n \r\n \r\n \r\n {terms}\r\n \r\n );\r\n }\r\n return (\r\n \r\n {HeaderProps}\r\n \r\n \r\n {locationsMessage && (\r\n \r\n )}\r\n {search}\r\n {state.isSearchInProgress ? (\r\n spinner\r\n ) : (\r\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\r\n )}\r\n \r\n \r\n {maps}\r\n \r\n \r\n {terms}\r\n \r\n );\r\n};\r\n\r\nexport default StoreSelectorViewComponent;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['store-selector'] = {\n c: () => require('@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector'),\n $type: 'containerModule',\n da: [{name:'availabilitiesWithHours', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby', runOn: 1},{name:'storeLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information', runOn: 1},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'store-selector',\n p: 'store-selector',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|jansen-adventureworks|views|store-selector'] = {\n c: () => require('partner/themes/jansen-adventureworks/views/store-selector.view.tsx'),\n cn: '__local__-__local__-store-selector'\n };\nviewDictionary['@msdyn365-commerce-modules|store-selector|modules|store-selector|store-selector'] = {\n c: () => require('@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector.view.js'),\n cn: '@msdyn365-commerce-modules-store-selector-store-selector'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|store-selector'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/store-selector.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-store-selector'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport {\n IListMapViewState,\n ILoadMapApiInput,\n IStoreInfo,\n IStoreSelectionStateContext,\n IStoreSelectorLocation,\n IStoreSelectorStateManager\n} from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(\n storeId?: string,\n storeName?: string | undefined,\n writeToCookie: boolean = false,\n latitude?: number,\n longitude?: number\n ): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (\n !searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled\n ) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl =\n actionContext.requestContext.app &&\n actionContext.requestContext.app.config &&\n actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${\n geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT\n }/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n if (window) {\n const currentWindowAPI = window.mapAPIReady;\n window.mapAPIReady = () => {\n if (currentWindowAPI) {\n currentWindowAPI();\n }\n this.isMapApiLoaded = true;\n };\n }\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${\n input.market ? `&setMkt=${input.market}` : ''\n }`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\n });\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","/*!\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 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","module.exports = React;","module.exports = ReactDOM;"],"names":["StoreSelectorFoundLocationsMessageComponent","props","locations","searchRadius","resources","isSeeAllStore","preferredDistanceUnit","storeCountMessage","milesShortText","storeCountMessageInKm","React","RichTextComponent","className","text","storeAllCountMessage","replace","length","toString","extractPhoneNumber","contacts","allPhoneContacts","filter","contact","ContactTypeValue","ContactInformationType","Phone","IsPrivate","ArrayExtensions","hasElements","primaryPhoneContact","find","IsPrimary","Locator","renderStoreHours","storeHours","storeHoursList","locationOpen","RegularStoreHours","map","displayTime","key","JSON","stringify","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","endDayShort","startDayFull","startDayShort","endDayFull","storeHoursDayPeriod","storeHoursDay","timeRange","storeOpenFrom","openFrom","storeOpenTo","openTo","matchDeliveryOptions","productDeliveryOptions","storePickUpOptionList","productDeliveryOption","delivery","Code","PickUpMethodDropdownComponent","handlers","location","pickUpStatesProps","selectStoreText","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","productPickUpOptionList","deliveryOptionList","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","isError","setError","onChangeHandler","event","preventDefault","currentTarget","value","dataset","description","onClickHandler","StringExtensions","isNullOrEmpty","undefined","state","filteredPickupMode","onSelected","handleDropdownToggle","filterDeliveryOption","pickupInStoreButtonText","filteredDeliveryMode","onClick","classnames","role","Description","renderLocationLinePickupButton","PickUpButtonComponent","pickupInStoreAriaLabel","pickupDeliveryOptionErrorMessage","attributes","Object","assign","renderStoreLocationLineItem","locationLineItem","hideStockStatus","index","isInStock","preferredStoreLocationId","isPreferredStoreEnabled","stockStatusLabel","storeLocatorView","telemetryContent","storeName","OrgUnitName","distanceAsString","buildDistanceString","distance","isLocationDisabled","closeDistanceString","distanceString","Math","floor","Distance","storeAddress","Address","phoneNumber","Contacts","resourceLabel","inStock","outOfStock","stockText","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","isPreferredStore","OrgUnitNumber","contentAction","etext","PreferredStore","preferredStoreAttribute","getTelemetryAttributes","RemovePreferredStore","removePreferredStoreAttribute","contactInfoHeader","storeHoursHeader","availabilityInfoHeader","preferredStoreAriaLabel","async","_props$data$storeSele","stopPropagation","onRemovePreferredStore","data","storeSelectorStateManager","result","setSelectedStoreLocationId","preferredStoreText","setAsPreferredStoreTextAriaLabel","onSetPreferredStoreClickHandler","onSetAsPreferredStore","setAsPreferredStoreText","renderStoreLocations","selectedLocationReference","_props$data$storeSele2","_props$locationListPr","show","listMapViewState","displayList","locationListProps","store","renderStoreLocation","isCurrentLocation","orgUnitLocation","selectedStoreLocationId","canSelectLocation","selectLocationAriaLabelFormat","selectLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","onPickupInStoreClickHandler","pickUpMethodSelection","selected","isMobileView","Number","parseInt","onKeyDown","ref","currentLocation","renderSelectedStore","selectedLocationProps","storeSelectorViewProps","_selectedStore$OrgUni","_selectedStore$OrgUni2","_selectedStore$StoreH","_selectedStore$OrgUni3","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeDetailsMain","storeHeader","storeDetailsCloseButton","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","preferredStoreButton","removePreferredStoreButton","selectedStore","OrgUnitAvailability","OrgUnitLocation","StoreHours","buildStoreHours","contactText","timeText","availabilityText","closedText","storeHoursClosedText","outOfStockText","inStockText","selectedStoreLocationText","selectStoreAriaFormatText","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","secondsToTime","OpenFrom","OpenTo","storeNameValue","getTelemetryObject","context","request","telemetryPageName","friendlyName","telemetry","orgUnitNumber","deliveryOptions","DeliveryOptions","selectedLocation","Node","_data$storeSelectorSt2","_data$storeSelectorSt3","BodyContainerProps","storeResultContainerProps","FooterContainerProps","HeaderContainerProps","HeaderProps","ModuleProps","locationsMessage","search","spinner","maps","locationsList","noLocationsMessage","terms","storeDetailsModal","bodyWrapperProps","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","isMobile","variant","VariantType","Browser","scrollIntoView","selectedLocationDiv","current","_selectedLocationDiv$","offset","getBoundingClientRect","parent","parentElement","totalHeight","scrollTop","top","clientHeight","MsDyn365","isBrowser","window","addEventListener","viewport","_data$storeSelectorSt","Module","isSearchInProgress","displayMap","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","_objectSpread","viewDictionary","cn","BaseStoreSelectorStateManager","constructor","preferredStoreLocalStorageKey","this","isMapModuleLoaded","_readFromToCookie","storeInfo","parse","preferredStore","_unused","_context","input","storeId","writeToCookie","arguments","StoreId","StoreName","Latitude","Longitude","_writeToCookie","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","localStorage","removeItem","setItem","cookieValue","getItem","__decorate","computed","observable","action","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","actionContext","requestContext","channel","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","trim","query","encodeURI","geolocationApiUrl","app","config","requestUrl","Promise","resolve","script","document","createElement","setAttribute","remove","resourceSets","point","coordinates","body","appendChild","_document","getElementById","currentWindowAPI","mapAPIReady","isMapApiLoaded","url","lang","market","reject","_document2","_document3","type","defer","src","error","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","createObservableDataAction","getGenericAction","inputData","StorePickUpOptionList","super","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","setState","_onSelect","deliveryCode","getAttribute","selectedPickupMode","onChange","_onKeyDown","_storePickupListOptionMenu","render","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","tabIndex","StoreSelectorLocationLines","_scrollIntoView","selectedLocationRef","offsetTop","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","itemAvailabilities","enableOutOfStockCheck","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","i","_availabilityWithHour","InventoryLocationId","InventLocationId","StockLevelLabel","_mapResources","storeCounter","componentDidUpdate","previousProps","componentDidMount","_stores","_sortStores","reaction","_renderStoreLocation","_store$OrgUnitAvailab","OrgUnitPickUpDeliveryModes","_store$OrgUnitAvailab2","StoreSelectorLocationLineItemComponent","ItemAvailabilities","onLocationSelected","productPickUpDeliveryOptions","shouldShowIndex","stores","_value$OrgUnitAvailab","observer","StoreSelectorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","keyCode","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","target","_handleKeyPressPrev","Enter","Space","onShowAllStores","_searchTextChanged","inputValue","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","blur","performSearch","_onChangeHandler","filterPickupModeSelected","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","shouldDisplayList","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","bind","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","autoComplete","onSubmit","searchInputAriaLabel","placeholder","onKeyUp","color","StoreSelectorEmptyMessage","_ref","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","_ref2","link","onTextChange","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","Msdyn365","editProps","StoreSelectorFoundLocationsMessage","_ref3","PickUpOptionList","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","contains","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","componentWillUnmount","removeEventListener","pickupListOptionMenuText","pickupmodeList","isExpandSiteOptionsState","_props$selectedStore","_props$selectedStore2","_props$selectedStore3","removePreferredStoreHandler","onPickupModeSelectHandler","pickupMode","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","renderPickupModes","SelectedStoreComponent","shouldHideStockStatus","parentClassName","stockLabel","preferredStoreAttributes","removePreferredStoreAttributes","tag","Button","pickUpDeliveryOptionButton","pickupModes","seconds","hours","ampm","divisorForMinutes","getShortTimeString","day","getFullTimeString","buildHoursDisplayInfo","startDay","endDay","hoursInfo","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","dateForLookup","get","buildStoreHoursString","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","push","storeSelectorLocationLineItemComponentActions","deliveryMode","productdeliveryOptions","deliveryOption","pickup","_delivery","title","pickUpButtonClickHandler","StoreSelector","shouldHideInventory","hasEnabledOutOfStockCheck","availabilitiesWithHours","storeLocations","selectedStoreResources","selectedProps","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","handleLinkTextChange","termsOfServiceLink","handleHeadingChange","heading","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","_location$OrgUnitPick","some","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","countryCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","debug","credentials","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","cookies","mode","setPreferredStoreLocation","isConsentGiven","clearPreferredStore","_setSelectedStore","isSeeAllStoreValue","geoLocate","_updateLocations","shouldShowAllStores","_navigator","style","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","PERMISSION_DENIED","timeout","_closeDialog","_storeSelectorStateMa","parentElementRef","focus","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","preferredLocationId","storeLocationList","orgUnitStoreInformation","showMapViewLink","isDialog","product","setOrgUnitStoreInformation","catch","message","radius","lookupRadius","searchRadiusUnit","calRadius","distanceUnitValue","modeDefault","localLatitude","long","lastInlineStoreLocation","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","RecordId","warning","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","_this$props$data$stor6","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$context","setTimeout","_this$props$data$stor2","_this$props$data$stor3","_this$props$data$stor4","_this$props$data$stor5","loadMapApi","locale","_this$props$data$stor7","_this$props$data$stor8","_this$props$context$a","_this$props$data$stor9","when","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","isSameContext","shouldComponentUpdate","_storeSelectorStateMa2","_storeSelectorStateMa3","_sortLocation","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","appConfig","slots","mapSlot","isMobileDevice","Viewport","isInlineView","isLocatorView","canShowLocationView","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","isEnableOutofStock","enableStockCheck","sortLocation","_getStoreLocationListProps","hasMapSlot","dialogClassName","viewProps","Modal","moduleProps","classname","autoFocus","fade","isOpen","onClosed","horizontalPosition","verticalPosition","toggle","ModalHeader","onEdit","ModalFooter","ModalBody","mapContainerProps","outOfStockThreshold","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","renderView","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","_store$OrgUnitAvailab3","selectedStoreLocation","lineResources","_store$OrgUnitAvailab4","renderDeliveryOptions","renderBody","module","exports","ReactDOM"],"sourceRoot":""}