{"version":3,"file":"static/js/e2d5aaf3db4d72529e9a.bundle.js","mappings":"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","sources":["webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?3934","webpack://henrys-ecommerce/./src/modules/store-selector/components/pickup-option-list.tsx?8604","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-pickup-option-list.tsx?8db3","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?5eda","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-lines.tsx?9c63","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-search-form.tsx?de2d","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-small-components.tsx?6ab0","webpack://henrys-ecommerce/./src/modules/store-selector/components/selected-store/selected-store.tsx?5f8b","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.props.autogenerated.ts?739b","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.tsx?ad87","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.view.tsx?46a3","webpack://henrys-ecommerce/./lib/store-selector/module-registration.js?8817","webpack://henrys-ecommerce/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://henrys-ecommerce/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://henrys-ecommerce/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.view.tsx?71a6","webpack://henrys-ecommerce/./src/modules/store-selector/components/pickup-option-list.tsx?dae0","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-pickup-option-list.tsx?7a25","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?fe27","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?923d","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-lines.tsx?87ff","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-search-form.tsx?fb9a","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-small-components.tsx?4335","webpack://henrys-ecommerce/./src/modules/store-selector/components/selected-store/selected-store.tsx?bfbc","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.tsx?e416","webpack://henrys-ecommerce/./src/modules/adventureworks/views/store-selector.view.tsx?ccdd","webpack://henrys-ecommerce/external var \"React\"?0d3b","webpack://henrys-ecommerce/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\n/* eslint-disable no-duplicate-imports */\r\nimport { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport get from 'lodash/get';\r\n\r\nimport { IStoreSelectorLocationLineItemResources } from '.';\r\n\r\nexport interface IHoursDisplayInfo {\r\n startDayShort: string;\r\n startDayFull: string;\r\n endDayShort?: string;\r\n endDayFull?: string;\r\n timeRange: string;\r\n}\r\n\r\ninterface IHoursInfo {\r\n isClosed: boolean;\r\n openTime?: number;\r\n closeTime?: number;\r\n}\r\n\r\ntype DayType = 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN';\r\n\r\nexport const secondsToTime = (seconds: number | undefined): string | undefined => {\r\n if (seconds === undefined) {\r\n return undefined;\r\n }\r\n let hours = Math.floor(seconds / (60 * 60));\r\n const ampm = hours >= 12 ? 'pm' : 'am';\r\n hours %= 12;\r\n hours = hours ? hours : 12;\r\n const divisorForMinutes = seconds % (60 * 60);\r\n const minutes = Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\r\n return `${hours}:${minutes} ${ampm}`;\r\n};\r\n\r\nconst getShortTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\r\n switch (day) {\r\n case 'MON':\r\n return resources.days.monday;\r\n case 'TUE':\r\n return resources.days.tuesday;\r\n case 'WED':\r\n return resources.days.wednesday;\r\n case 'THU':\r\n return resources.days.thursday;\r\n case 'FRI':\r\n return resources.days.friday;\r\n case 'SAT':\r\n return resources.days.saturday;\r\n default:\r\n // Case 'SUN':\r\n return resources.days.sunday;\r\n }\r\n};\r\n\r\nconst getFullTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\r\n switch (day) {\r\n case 'MON':\r\n return resources.days.mondayFull;\r\n case 'TUE':\r\n return resources.days.tuesdayFull;\r\n case 'WED':\r\n return resources.days.wednesdayFull;\r\n case 'THU':\r\n return resources.days.thursdayFull;\r\n case 'FRI':\r\n return resources.days.fridayFull;\r\n case 'SAT':\r\n return resources.days.saturdayFull;\r\n default:\r\n // Case 'SUN':\r\n return resources.days.sundayFull;\r\n }\r\n};\r\n\r\nconst buildHoursDisplayInfo = (\r\n startDay: DayType,\r\n endDay: DayType,\r\n hoursInfo: string,\r\n resources: IStoreSelectorLocationLineItemResources\r\n): IHoursDisplayInfo => {\r\n return {\r\n startDayShort: getShortTimeString(startDay, resources),\r\n startDayFull: getFullTimeString(startDay, resources),\r\n endDayShort: startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,\r\n endDayFull: startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,\r\n timeRange: hoursInfo\r\n };\r\n};\r\n\r\nconst shouldMergeLines = (firstLine: IHoursInfo, secondLine: IHoursInfo): boolean => {\r\n if (firstLine.isClosed && secondLine.isClosed) {\r\n return true;\r\n }\r\n\r\n if (!firstLine.isClosed && !secondLine.isClosed) {\r\n return firstLine.openTime === secondLine.openTime && firstLine.closeTime === secondLine.closeTime;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst getStoreHoursData = (storeHours: RegularStoreHours, dateForLookup: string): IHoursInfo => {\r\n return {\r\n isClosed: get(storeHours, `IsClosedOn${dateForLookup}`, false),\r\n openTime: get(storeHours, `${dateForLookup}OpenTime`, undefined),\r\n closeTime: get(storeHours, `${dateForLookup}CloseTime`, undefined)\r\n };\r\n};\r\n\r\nconst buildStoreHoursString = (hoursInfo: IHoursInfo, resources: IStoreSelectorLocationLineItemResources): string => {\r\n if (hoursInfo.isClosed) {\r\n return resources.closedText;\r\n }\r\n const openFrom: string | undefined = secondsToTime(hoursInfo.openTime);\r\n const openTo: string | undefined = secondsToTime(hoursInfo.closeTime);\r\n\r\n return `${openFrom}–${openTo}`;\r\n};\r\n\r\nexport const buildStoreHours = (storeHours: RegularStoreHours, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo[] => {\r\n const storeHoursList: IHoursDisplayInfo[] = [];\r\n\r\n const mondayHours = getStoreHoursData(storeHours, 'Monday');\r\n const tuesdayHours = getStoreHoursData(storeHours, 'Tuesday');\r\n const wednesdayHours = getStoreHoursData(storeHours, 'Wednesday');\r\n const thursdayHours = getStoreHoursData(storeHours, 'Thursday');\r\n const fridayHours = getStoreHoursData(storeHours, 'Friday');\r\n const saturdayHours = getStoreHoursData(storeHours, 'Saturday');\r\n const sundayHours = getStoreHoursData(storeHours, 'Sunday');\r\n\r\n let periodStart: DayType = 'MON';\r\n let periodEnd: DayType = 'MON';\r\n\r\n if (!shouldMergeLines(mondayHours, tuesdayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(mondayHours, resources), resources));\r\n\r\n periodStart = 'TUE';\r\n }\r\n periodEnd = 'TUE';\r\n\r\n if (!shouldMergeLines(tuesdayHours, wednesdayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(tuesdayHours, resources), resources));\r\n\r\n periodStart = 'WED';\r\n }\r\n periodEnd = 'WED';\r\n\r\n if (!shouldMergeLines(wednesdayHours, thursdayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(wednesdayHours, resources), resources));\r\n\r\n periodStart = 'THU';\r\n }\r\n periodEnd = 'THU';\r\n\r\n if (!shouldMergeLines(thursdayHours, fridayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(thursdayHours, resources), resources));\r\n\r\n periodStart = 'FRI';\r\n }\r\n periodEnd = 'FRI';\r\n\r\n if (!shouldMergeLines(fridayHours, saturdayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(fridayHours, resources), resources));\r\n\r\n periodStart = 'SAT';\r\n }\r\n periodEnd = 'SAT';\r\n\r\n if (!shouldMergeLines(saturdayHours, sundayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(saturdayHours, resources), resources));\r\n\r\n periodStart = 'SUN';\r\n }\r\n periodEnd = 'SUN';\r\n\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(sundayHours, resources), resources));\r\n\r\n return storeHoursList;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Interface Pickup option list.\r\n */\r\nexport interface IPickUpOptionListProps {\r\n pickupListOptionMenuText: string;\r\n pickupmodeList?: DeliveryOption[];\r\n onChange(deliveryCode: string): Promise;\r\n}\r\n\r\n/**\r\n * Interface pickup option list state.\r\n */\r\nexport interface IPickOptionListState {\r\n expandSiteOptions: boolean;\r\n}\r\n\r\n/**\r\n * Simple Pickup option dropdown with Button to get menu option.\r\n */\r\nexport class PickUpOptionList extends React.PureComponent {\r\n private readonly _pickupListOptionMenu: React.RefObject;\r\n\r\n private readonly _pickupListOptionButton: React.RefObject;\r\n\r\n private readonly eventsToBeBind = ['click', 'touchstart'];\r\n\r\n public constructor(props: IPickUpOptionListProps) {\r\n super(props);\r\n this._renderDeliveryOptions = this._renderDeliveryOptions.bind(this);\r\n this._pickupListOptionMenu = React.createRef();\r\n this._pickupListOptionButton = React.createRef();\r\n this.state = {\r\n expandSiteOptions: false\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n for (const event of this.eventsToBeBind) {\r\n window.addEventListener(event, this.handleDocumentClick, true);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n for (const event of this.eventsToBeBind) {\r\n window.removeEventListener(event, this.handleDocumentClick, true);\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { pickupListOptionMenuText, pickupmodeList } = this.props;\r\n\r\n return (\r\n
\r\n \r\n {pickupListOptionMenuText}\r\n \r\n \r\n {this.state.expandSiteOptions ? (\r\n
    \r\n {pickupmodeList?.map((delivery: DeliveryOption) => {\r\n return (\r\n
  • \r\n \r\n \r\n {delivery.Description}\r\n \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n ) : null}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Handle the document click.\r\n * @param event -- Event object.\r\n */\r\n private readonly handleDocumentClick = (event: Event): void => {\r\n const htmlElement = event.target as HTMLElement;\r\n if (\r\n !(\r\n (this._pickupListOptionButton.current !== null &&\r\n (event.target === this._pickupListOptionButton.current ||\r\n this._pickupListOptionButton.current.contains(htmlElement))) ||\r\n (this._pickupListOptionMenu.current !== null &&\r\n (event.target === this._pickupListOptionMenu.current || this._pickupListOptionMenu.current.contains(htmlElement)))\r\n )\r\n ) {\r\n this.setState({\r\n expandSiteOptions: false\r\n });\r\n }\r\n };\r\n\r\n private _renderDeliveryOptions(event: React.MouseEvent): void {\r\n event.stopPropagation();\r\n const isExpandSiteOptionsState = this.state.expandSiteOptions;\r\n this.setState({\r\n expandSiteOptions: !isExpandSiteOptionsState\r\n });\r\n }\r\n\r\n /**\r\n * Select Delivery option.\r\n * @param event -- Event Object.\r\n */\r\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\r\n event.preventDefault();\r\n const deliveryCode = event.currentTarget.getAttribute('data-value');\r\n if (deliveryCode && deliveryCode.length > 0) {\r\n await this.props.onChange(deliveryCode);\r\n }\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Store Pickup option list interface.\r\n */\r\nexport interface IStorePickUpOptionListProps {\r\n productPickupListOptionMenuText?: string;\r\n productPickupModeList?: DeliveryOption[];\r\n defaultOptionText?: string;\r\n onChange(deliveryCode: string): Promise;\r\n}\r\n\r\n/**\r\n * Store Pickup option state interface.\r\n */\r\nexport interface IStorePickOptionListState {\r\n isFilterExpanded: boolean;\r\n selectedPickupMode?: string;\r\n}\r\n\r\n/**\r\n * Simple Pickup option dropdown with Button to get menu option.\r\n */\r\nexport class StorePickUpOptionList extends React.PureComponent {\r\n private readonly _storePickupListOptionMenu: React.RefObject;\r\n\r\n public constructor(props: IStorePickUpOptionListProps) {\r\n super(props);\r\n this._storePickupListOptionMenu = React.createRef();\r\n this.state = {\r\n isFilterExpanded: false,\r\n selectedPickupMode: ''\r\n };\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { productPickupListOptionMenuText, productPickupModeList, defaultOptionText } = this.props;\r\n const selectedPickupModeDesc = defaultOptionText\r\n ? defaultOptionText\r\n : productPickupModeList?.find((delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\r\n const role = 'menu';\r\n return (\r\n
\r\n \r\n {this.state.isFilterExpanded ? (\r\n
    \r\n {productPickupModeList?.map((delivery: DeliveryOption) => {\r\n return (\r\n
  • \r\n \r\n \r\n {delivery.Description}\r\n \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n ) : null}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Method to call when drop dwon get selected.\r\n */\r\n private readonly _rendeDeliveryOptions = () => {\r\n const isExpandOptionsState = this.state.isFilterExpanded;\r\n this.setState({\r\n isFilterExpanded: !isExpandOptionsState\r\n });\r\n };\r\n\r\n /**\r\n * Method to call on select pickup mode.\r\n * @param event - Mouse event.\r\n * @returns Void.\r\n */\r\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\r\n event.preventDefault();\r\n const deliveryCode = event.currentTarget.getAttribute('data-value');\r\n if (deliveryCode !== null) {\r\n this.setState({\r\n selectedPickupMode: deliveryCode\r\n });\r\n\r\n this._rendeDeliveryOptions();\r\n await this.props.onChange(deliveryCode);\r\n }\r\n };\r\n\r\n /**\r\n * Method to call on select pickup mode.\r\n * @param event - Mouse event.\r\n * @returns Void.\r\n */\r\n private readonly _onKeyDown = async (event: React.KeyboardEvent): Promise => {\r\n event.preventDefault();\r\n const deliveryCode = event.currentTarget.getAttribute('data-value');\r\n if (deliveryCode !== null) {\r\n this.setState({\r\n selectedPickupMode: deliveryCode\r\n });\r\n\r\n this._rendeDeliveryOptions();\r\n await this.props.onChange(deliveryCode);\r\n }\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n IPayLoad,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { PickUpOptionList } from '../pickup-option-list';\r\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\r\n\r\n/**\r\n * Store Locator line item resources.\r\n */\r\nexport interface IStoreSelectorLocationLineItemResources {\r\n contactInfoHeader: string;\r\n storeHoursHeader: string;\r\n availabilityInfoHeader: string;\r\n\r\n closedText: string;\r\n\r\n outOfStock: string;\r\n inStock: string;\r\n\r\n currentLocation: string;\r\n selectLocation: string;\r\n selectLocationAriaLabelFormat: string;\r\n setAsPreferredStoreText: string;\r\n setAsPreferredStoreTextAriaLabel: string;\r\n preferredStoreText: string;\r\n preferredStoreAriaLabel: string;\r\n pickupDeliveryOptionErrorMessage?: string;\r\n\r\n days: {\r\n monday: string;\r\n tuesday: string;\r\n wednesday: string;\r\n thursday: string;\r\n friday: string;\r\n saturday: string;\r\n sunday: string;\r\n mondayFull: string;\r\n tuesdayFull: string;\r\n wednesdayFull: string;\r\n thursdayFull: string;\r\n fridayFull: string;\r\n saturdayFull: string;\r\n sundayFull: string;\r\n };\r\n}\r\n\r\n/**\r\n * Store Locator line item props.\r\n */\r\nexport interface IStoreSelectorLocationLineItemProps {\r\n location: OrgUnitLocation;\r\n storeHours?: StoreHours;\r\n\r\n storeUrl?: string;\r\n\r\n hideStockStatus?: boolean;\r\n isInStock?: boolean;\r\n isCurrentLocation?: boolean;\r\n\r\n resources: IStoreSelectorLocationLineItemResources;\r\n stockStatusLabel?: string;\r\n storeLocatorView?: boolean;\r\n isPreferredStoreEnabled?: boolean;\r\n index: string;\r\n preferredStoreLocationId: string | null;\r\n storePickUpOptionList?: DeliveryOption[];\r\n productPickUpOptionList?: DeliveryOption[];\r\n filteredPickupMode?: string;\r\n shouldShowIndex?: boolean;\r\n\r\n /**\r\n * The telemetry content.\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n preferredDistanceUnit: string;\r\n isLocationDisabled?: boolean;\r\n handlers: {\r\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\r\n onSetAsPreferredStore(locationId: string | undefined): void;\r\n onRemovePreferredStore(): void;\r\n };\r\n}\r\n\r\n/**\r\n * Store Locator line item action component.\r\n */\r\nconst storeSelectorLocationLineItemComponentActions = {\r\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\r\n props.handlers.onSelected(props.location, deliveryMode);\r\n },\r\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\r\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\r\n },\r\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\r\n props.handlers.onRemovePreferredStore();\r\n }\r\n};\r\n\r\n/**\r\n * Function to render store hours.\r\n * @param storeHours - Store Hours object.\r\n * @param location - Store Unit.\r\n * @param resources - Resources.\r\n * @returns - Jsx element.\r\n */\r\nconst renderStoreHours = (\r\n storeHours: StoreHours | undefined,\r\n location: OrgUnitLocation,\r\n resources: IStoreSelectorLocationLineItemResources\r\n): JSX.Element | null => {\r\n // First, use the store hours. This will allow listing day by day houts\r\n if (storeHours?.RegularStoreHours) {\r\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\r\n\r\n return (\r\n
\r\n {storeHoursList.map(displayTime => (\r\n
\r\n {displayTime.endDayShort ? (\r\n
\r\n {displayTime.startDayShort}–\r\n {displayTime.endDayShort}\r\n
\r\n ) : (\r\n
\r\n {displayTime.startDayShort}\r\n
\r\n )}\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 | undefined = secondsToTime(location.OpenFrom);\r\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\r\n\r\n return (\r\n
\r\n {storeOpenFrom}-{storeOpenTo}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Function to return distance measure unit.\r\n * @param distance - Store location within radius.\r\n * @param preferredDistanceUnit - Unit configuration.\r\n * @param isLocationDisabled - Flag to check user location.\r\n * @returns - Unit of distance.\r\n */\r\nexport const buildDistanceString = (\r\n distance: number | undefined,\r\n preferredDistanceUnit: string,\r\n isLocationDisabled?: boolean\r\n): string | undefined => {\r\n if (distance === undefined || isLocationDisabled) {\r\n return undefined;\r\n } else if (distance < 1) {\r\n return `(<1 ${preferredDistanceUnit})`;\r\n }\r\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\r\n};\r\n\r\n/**\r\n * Function to store contact.\r\n * @param contacts - Store location within radius.\r\n * @returns - Return primary contact number of store.\r\n */\r\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 === 1 && !contact.IsPrivate);\r\n\r\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\r\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\r\n\r\n if (primaryPhoneContact) {\r\n return primaryPhoneContact.Locator;\r\n }\r\n\r\n return allPhoneContacts[0].Locator;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * On Store locator click functionality.\r\n * @param props -Store locator location items.\r\n * @param pickupMode -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\r\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\r\n};\r\n\r\n/**\r\n * Set Preferred store functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\r\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\r\n};\r\n\r\n/**\r\n * Remove preferred store functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\r\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\r\n};\r\n\r\n/**\r\n * On Change functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\r\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\r\n return Promise.resolve();\r\n};\r\n\r\n/**\r\n * Method to render pickup modes.\r\n * @param props - StoreSelector Line item props.\r\n * @param deliveryOptionList - Product DeliveryOption List.\r\n * @param pickupInStoreButtonText - Pickup store button text.\r\n * @param pickupInStoreAriaLabel - Pickup store aria label.\r\n * @returns Jsx component.\r\n */\r\nconst renderPickupModes = (\r\n props: IStoreSelectorLocationLineItemProps,\r\n deliveryOptionList: DeliveryOption[],\r\n pickupInStoreButtonText: string,\r\n pickupInStoreAriaLabel: string\r\n): JSX.Element | null => {\r\n if (props.filteredPickupMode === undefined) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Method to check if we have atleast one common delivery code between product and channel.\r\n * @param productdeliveryOptions - Product DeliveryOption List.\r\n * @param storePickUpOptionList - Channel DeliveryOption List.\r\n * @returns DeliveryOptionList.\r\n */\r\nexport const matchDeliveryOptions = (\r\n productdeliveryOptions: DeliveryOption[] | undefined,\r\n storePickUpOptionList: DeliveryOption[] | undefined\r\n): DeliveryOption[] => {\r\n const deliveryOption: DeliveryOption[] = [];\r\n productdeliveryOptions?.map(delivery => {\r\n const pickup = storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code);\r\n if (pickup) {\r\n deliveryOption.push(pickup);\r\n }\r\n });\r\n\r\n return deliveryOption;\r\n};\r\n\r\n/**\r\n * Renders store location line items.\r\n * @param props - Store location line items props.\r\n * @returns - HTML.\r\n */\r\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\r\n const {\r\n storeUrl,\r\n hideStockStatus,\r\n isCurrentLocation,\r\n isInStock,\r\n location,\r\n resources,\r\n storeHours,\r\n stockStatusLabel,\r\n storeLocatorView,\r\n index,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n isLocationDisabled,\r\n telemetryContent,\r\n storePickUpOptionList,\r\n productPickUpOptionList,\r\n shouldShowIndex\r\n } = props;\r\n\r\n const storeName: string | undefined = location.OrgUnitName;\r\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\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 stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\r\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\r\n const canSelectLocation = hideStockStatus || isInStock;\r\n const pickupInStoreButtonText: string = resources.selectLocation;\r\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\r\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\r\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\r\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\r\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\r\n const [isError, setError] = React.useState(false);\r\n\r\n const pickUpButtonClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\r\n if (deliveryOptionList.length === 0) {\r\n setError(true);\r\n } else {\r\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\r\n }\r\n };\r\n\r\n /* eslint-disable prettier/prettier */\r\n return (\r\n
\r\n
\r\n {(shouldShowIndex || storeLocatorView) && {index}}\r\n \r\n {storeUrl && {storeName}}\r\n {!storeUrl && <>{storeName}}\r\n \r\n {distanceAsString ? \r\n {' '}\r\n {distanceAsString}\r\n : false}\r\n
\r\n
\r\n
\r\n

{resources.contactInfoHeader}

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

{resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

}\r\n {stockText &&

{stockText}

}\r\n {isCurrentLocation ? (\r\n

{resources.currentLocation}

\r\n ) : canSelectLocation ? (\r\n deliveryOptionList.length === 1 ? (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n ) : (\r\n renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel)\r\n )\r\n ) : (\r\n false\r\n )}\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 ) : null}\r\n
\r\n {isError ? (\r\n \r\n \r\n ) : ('')}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Store location line item component.\r\n */\r\nexport const StoreSelectorLocationLineItemComponent = storeSelectorLocationLineItem as (\r\n props: IStoreSelectorLocationLineItemProps\r\n) => JSX.Element;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { observable, reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IStoreSelectorResources } from '../store-selector.props.autogenerated';\r\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './store-selector-location-line-item';\r\n\r\n/**\r\n * Store selector location lines props interface.\r\n */\r\nexport interface IStoreSelectorLocationLinesProps {\r\n locations?: IFullOrgUnitAvailability[];\r\n resources: IStoreSelectorResources;\r\n preferredDistanceUnit?: string;\r\n storeUrlFormat?: string;\r\n\r\n alreadySelectedLocation?: OrgUnitLocation;\r\n outOfStockThreshold: number;\r\n enableOutOfStockCheck: boolean;\r\n storeLocatorView?: boolean;\r\n selectedStoreLocationId?: string;\r\n isPreferredStoreEnabled?: boolean;\r\n displayList?: boolean;\r\n isLocationDisabled?: boolean;\r\n productPickUpDeliveryOptions?: DeliveryOption[];\r\n onClick: (locationId: string | undefined) => void;\r\n preferredStoreLocationId: string | null;\r\n onSetAsPreferredStore: (locationId: string | undefined) => void;\r\n onRemovePreferredStore: () => void;\r\n filteredPickupMode?: string;\r\n shouldShowIndex?: boolean;\r\n inStockOnly?: boolean;\r\n\r\n /**\r\n * The telemetry content.\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n onLocationSelected(location: OrgUnitLocation | undefined): void;\r\n}\r\n\r\n/**\r\n * Displays all the location line items, or null if none exists.\r\n */\r\n@observer\r\nexport class StoreSelectorLocationLines extends React.PureComponent {\r\n @observable private _stores: IFullOrgUnitAvailability[] | undefined;\r\n\r\n private readonly selectedLocationRef: React.RefObject;\r\n\r\n private storeCounter: number;\r\n\r\n public constructor(props: IStoreSelectorLocationLinesProps) {\r\n super(props);\r\n this.selectedLocationRef = React.createRef();\r\n this.storeCounter = 0;\r\n }\r\n\r\n public componentDidUpdate(previousProps: IStoreSelectorLocationLinesProps): void {\r\n if (this.props.selectedStoreLocationId !== previousProps.selectedStoreLocationId) {\r\n this._scrollIntoView();\r\n }\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (this.props.locations) {\r\n this._stores = this._sortStores(this.props.locations);\r\n }\r\n\r\n reaction(\r\n () => this.props.locations,\r\n () => {\r\n if (this.props.locations) {\r\n this._stores = this._sortStores(this.props.locations);\r\n }\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!ArrayExtensions.hasElements(this._stores)) {\r\n return null;\r\n }\r\n\r\n this.storeCounter = 0;\r\n const regex = /\\{OrgUnitNumber\\}/g;\r\n const storeUrlFormat = this.props.storeUrlFormat;\r\n\r\n return (\r\n
\r\n {this._stores.map((store, index) => {\r\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\r\n const orgUnitNumber = orgUnitLocation?.OrgUnitNumber;\r\n const url = orgUnitNumber && storeUrlFormat && storeUrlFormat.replace(regex, orgUnitNumber);\r\n return this._renderStoreLocation(store, index, url);\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * On click Handler function.\r\n * @param orgUnitLocation -OrgUnit location.\r\n * @returns Click action on orgUnit Location.\r\n */\r\n private readonly onClickHandler = (orgUnitLocation: OrgUnitLocation | undefined) => () => {\r\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\r\n };\r\n\r\n private _renderStoreLocation(store: IFullOrgUnitAvailability, index: number, storeUrl?: string): JSX.Element | undefined {\r\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\r\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\r\n const deliveryOptions = store?.OrgUnitPickUpDeliveryModes;\r\n const defaultAriaSetsize = 0;\r\n if (orgUnitLocation) {\r\n const isInStock = this._isProductInStock(store?.OrgUnitAvailability?.ItemAvailabilities);\r\n if (!isInStock && this.props.inStockOnly) {\r\n return undefined;\r\n }\r\n\r\n ++this.storeCounter;\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Sort store.\r\n * @param stores - Array of stores data.\r\n * @returns Sorted stores array.\r\n */\r\n private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\r\n /**\r\n * IsPreferredStore.\r\n * @param value - Array of stores data.\r\n * @returns IsPreferred store boolean value.\r\n */\r\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\r\n this.props.isPreferredStoreEnabled &&\r\n this.props.preferredStoreLocationId &&\r\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === this.props.preferredStoreLocationId;\r\n\r\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\r\n }\r\n\r\n /**\r\n * Scroll into view.\r\n */\r\n private readonly _scrollIntoView = () => {\r\n const selectedLocationDiv = this.selectedLocationRef.current;\r\n const parent = selectedLocationDiv?.parentElement;\r\n if (selectedLocationDiv && parent) {\r\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop;\r\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Is current location.\r\n * @param location - Org unit location.\r\n * @returns The current location.\r\n */\r\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\r\n (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\r\n false;\r\n\r\n /**\r\n * Check the product is in stock or not.\r\n * @param itemAvailabilities - Item availabilities.\r\n * @returns If the product is in stock.\r\n */\r\n private readonly _isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\r\n if (!this.props.enableOutOfStockCheck) {\r\n return true;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\r\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > 0 : false;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n /**\r\n * Get the stock inventory label.\r\n * @param availabilityWithHours - Full org unit availability.\r\n * @returns The stock label.\r\n */\r\n private readonly _stockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\r\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\r\n for (let i = 0; i < availabilityWithHours.ProductInventoryInformation.length; i++) {\r\n if (\r\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\r\n availabilityWithHours.ProductInventoryInformation[i].InventLocationId\r\n ) {\r\n return availabilityWithHours.ProductInventoryInformation[i].StockLevelLabel;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Map resources.\r\n * @param resources - Store resources.\r\n * @returns Resources.\r\n */\r\n private readonly _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 pickupDeliveryOptionErrorMessage: resources.pickupDeliveryOptionErrorMessage,\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 * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n IPayLoad,\r\n ITelemetryContent,\r\n KeyCodes,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { StorePickUpOptionList } from './store-pickup-option-list';\r\n\r\n/**\r\n * Store Selector Search Form Props interface.\r\n */\r\nexport interface IStoreSelectorSearchFormProps {\r\n resources: {\r\n searchInputAriaLabel: string;\r\n searchButtonAriaLabel: string;\r\n searchPlaceholderText: string;\r\n seeAllStoresText: string;\r\n viewListText: string;\r\n viewMapText: string;\r\n pickupFilterByHeading?: string;\r\n pickupFilterMenuHeading?: string;\r\n inStockOnlyLabel: string;\r\n };\r\n\r\n id: string;\r\n value: string;\r\n isMapDisabled?: boolean;\r\n showAllStores?: boolean;\r\n displayList?: boolean;\r\n locatorView?: boolean;\r\n productPickUpDeliveryOptions?: DeliveryOption[];\r\n hasEnabledPickupFilterToShowStore?: boolean;\r\n filteredPickupMode?: string;\r\n isLocatorView?: boolean;\r\n inStockOnly: boolean;\r\n toggleInStockOnly: () => void;\r\n\r\n /**\r\n * The telemetry content.\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n onShowAllStores(): void;\r\n onToggleListMapViewState(): void;\r\n performSearch(searchTerm: string): Promise;\r\n searchTermChanged(searchTerm: string): Promise;\r\n filterPickupModeSelected(pickupMode: string): void;\r\n}\r\n\r\n/**\r\n * Simple search form consisting of search text and a search button.\r\n */\r\nexport class StoreSelectorSearchForm extends React.PureComponent {\r\n private readonly searchBoxRef: React.RefObject = React.createRef();\r\n\r\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n private readonly showAllStoreAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n private readonly toggleMapViewAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n private previousValue: string = '';\r\n\r\n private isSearchResultOpened: boolean = false;\r\n\r\n public constructor(props: IStoreSelectorSearchFormProps) {\r\n super(props);\r\n this.state = { value: '' };\r\n this._handleKeyPressPrev = this._handleKeyPressPrev.bind(this);\r\n const payLoad: IPayLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SearchStore);\r\n this.storeSearchAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.ShowAllStore;\r\n this.showAllStoreAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.ToggleMapView;\r\n this.toggleMapViewAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n resources: {\r\n searchButtonAriaLabel,\r\n searchPlaceholderText,\r\n seeAllStoresText,\r\n viewListText,\r\n viewMapText,\r\n pickupFilterByHeading,\r\n pickupFilterMenuHeading,\r\n inStockOnlyLabel\r\n },\r\n id,\r\n value,\r\n isMapDisabled,\r\n showAllStores,\r\n displayList,\r\n locatorView,\r\n isLocatorView,\r\n inStockOnly,\r\n toggleInStockOnly,\r\n onShowAllStores,\r\n productPickUpDeliveryOptions,\r\n hasEnabledPickupFilterToShowStore\r\n } = this.props;\r\n\r\n const toggleButtonText = displayList ? viewMapText : viewListText;\r\n\r\n return (\r\n
\r\n \r\n
\r\n {this.renderPickupModesList(\r\n this.props,\r\n toggleButtonText,\r\n productPickUpDeliveryOptions,\r\n pickupFilterMenuHeading,\r\n locatorView,\r\n pickupFilterByHeading,\r\n hasEnabledPickupFilterToShowStore,\r\n displayList\r\n )}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handles the key press on the input box.\r\n * @param event - Event object.\r\n */\r\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\r\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\r\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\r\n // In order to avoid that. Checking if the search result is open or not.\r\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\r\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\r\n if (activeDescedantValue) {\r\n if (this.previousValue === '') {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n return;\r\n }\r\n\r\n if (activeDescedantValue !== this.previousValue) {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n } else {\r\n this.isSearchResultOpened = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Calls method display result.\r\n * @param event - The first number.\r\n */\r\n private readonly _handleKeyPressPrev = (event: React.KeyboardEvent): void => {\r\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Space) {\r\n this.props.onShowAllStores();\r\n }\r\n };\r\n\r\n /**\r\n * Method called on search text changed.\r\n * @param event - Input value.\r\n */\r\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\r\n const inputValue: string = event.target.value;\r\n\r\n await this.props.searchTermChanged(inputValue);\r\n };\r\n\r\n /**\r\n * Method called on search submit.\r\n * @param event - Input value.\r\n */\r\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\r\n event.preventDefault(); // Prevents form submission\r\n this.searchBoxRef.current?.blur();\r\n if (!this.isSearchResultOpened) {\r\n await this.props.performSearch(this.props.value);\r\n }\r\n this.isSearchResultOpened = false;\r\n };\r\n\r\n /**\r\n * Method called on product pickup option change.\r\n * @returns - Void.\r\n */\r\n private readonly _onChangeHandler = () => async (deliveryCode: string): Promise => {\r\n this.props.filterPickupModeSelected(deliveryCode);\r\n return Promise.resolve();\r\n };\r\n\r\n /**\r\n * Method to render pickup mode list.\r\n * @param props - Store selector search form props.\r\n * @param toggleButtonText - Locator view button text.\r\n * @param productPickUpDeliveryOptions - Product DeliveryOption List.\r\n * @param pickupFilterMenuHeading - Pickup store button text.\r\n * @param locatorView - Locator View is on\\off.\r\n * @param pickupFilterByHeading - Pickup list label text.\r\n * @param hasEnabledPickupFilterToShowStore - Flag to check header filter is enabled.\r\n * @param shouldDisplayList - Display List.\r\n * @returns Jsx component.\r\n */\r\n private readonly renderPickupModesList = (\r\n props: IStoreSelectorSearchFormProps,\r\n toggleButtonText: string,\r\n productPickUpDeliveryOptions: DeliveryOption[] | undefined,\r\n pickupFilterMenuHeading: string | undefined,\r\n locatorView: boolean | undefined,\r\n pickupFilterByHeading: string | undefined,\r\n hasEnabledPickupFilterToShowStore: boolean | undefined,\r\n shouldDisplayList?: boolean\r\n ): JSX.Element | null => {\r\n const toggleButtonClass = shouldDisplayList ? 'view-map' : 'list-view';\r\n if (hasEnabledPickupFilterToShowStore) {\r\n return (\r\n
\r\n {locatorView && (\r\n \r\n {toggleButtonText}\r\n \r\n )}\r\n \r\n
{pickupFilterByHeading}
\r\n
\r\n );\r\n }\r\n if (locatorView) {\r\n return (\r\n \r\n {toggleButtonText}\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IStoreSelectorResources, ITermsOfServiceLinkData } from '../store-selector.props.autogenerated';\r\n\r\nexport interface IStoreSelectorEmptyMessageProps {\r\n resources: IStoreSelectorResources;\r\n}\r\nexport const StoreSelectorEmptyMessage: React.FC = ({ resources }) => (\r\n
\r\n

{resources.emptyLocationsText}

\r\n
\r\n);\r\n\r\nexport const StoreSelectorWaiting: React.FC = () => (\r\n
\r\n \r\n
\r\n);\r\n\r\nexport interface IStoreSelectorTermsOfServiceProps {\r\n link?: ITermsOfServiceLinkData;\r\n requestContext: Msdyn365.IRequestContext;\r\n onTextChange?(event: Msdyn365.ContentEditableEvent): void;\r\n}\r\n\r\nexport const StoreSelectorTermsOfService: React.FC = ({ link, requestContext, onTextChange }) => {\r\n if (link) {\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'ms-store-select__terms-link',\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'link'\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nexport interface IStoreSelectorFoundLocationsMessage {\r\n resources: IStoreSelectorResources;\r\n locations?: IFullOrgUnitAvailability[];\r\n searchRadius: number;\r\n preferredDistanceUnit: string;\r\n isSeeAllStore: boolean;\r\n}\r\nexport const StoreSelectorFoundLocationsMessage: React.FC = ({\r\n locations,\r\n searchRadius,\r\n resources,\r\n isSeeAllStore,\r\n preferredDistanceUnit\r\n}) => {\r\n if (locations) {\r\n const storeCountMessage =\r\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\r\n return (\r\n
\r\n {isSeeAllStore\r\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\r\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { DeliveryOption, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n IPayLoad,\r\n ITelemetryContent,\r\n NodeTag,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { PickUpOptionList } from '../pickup-option-list';\r\nimport { buildDistanceString, matchDeliveryOptions } from '../store-selector-location-line-item';\r\n\r\n/**\r\n * Store Locator line item resources.\r\n */\r\nexport interface ISelectedStoreResources {\r\n availabilityInfoHeader: string;\r\n closedText: string;\r\n outOfStock: string;\r\n inStock: string;\r\n currentLocation: string;\r\n selectLocation: string;\r\n selectLocationAriaLabelFormat: string;\r\n setAsPreferredStoreText: string;\r\n setAsPreferredStoreTextAriaLabel: string;\r\n preferredStoreText: string;\r\n preferredStoreAriaLabel: string;\r\n}\r\n\r\n/**\r\n * Store Selector resources.\r\n */\r\nexport interface ISelectedStoreProps {\r\n className?: string;\r\n shouldHideStockStatus?: boolean;\r\n isCurrentLocation?: boolean;\r\n isInStock?: boolean;\r\n selectedStore?: IFullOrgUnitAvailability;\r\n resources: ISelectedStoreResources;\r\n stockStatusLabel?: string;\r\n preferredStoreLocationId: string | null;\r\n isPreferredStoreEnabled?: boolean;\r\n isLocationDisabled?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n storePickUpOptionList?: DeliveryOption[];\r\n productPickUpOptionList?: DeliveryOption[];\r\n preferredDistanceUnit: string;\r\n filteredPickupMode?: string;\r\n handlers: {\r\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\r\n onSetAsPreferredStore(locationId: string | undefined): void;\r\n onRemovePreferredStore(): void;\r\n closeStoreDetailsModal(): Promise;\r\n };\r\n}\r\n\r\n/**\r\n * Store Selector resources.\r\n */\r\nexport interface ISelectedStoreViewProps {\r\n isCurrentLocation?: boolean;\r\n canSelectLocation?: boolean;\r\n selectedStore?: IFullOrgUnitAvailability;\r\n deliveryOptions?: DeliveryOption[];\r\n isPreferredStore?: boolean;\r\n resources: ISelectedStoreResources;\r\n\r\n storeDetailsMain: INodeProps;\r\n storeHeader: INodeProps;\r\n storeName: React.ReactNode;\r\n storeDistance: React.ReactNode;\r\n storeDetailsAvailabilityContainer: INodeProps;\r\n productAvailability: React.ReactNode;\r\n stockStatus: React.ReactNode;\r\n currentLocation: React.ReactNode;\r\n pickUpDeliveryOptionButton: React.ReactNode;\r\n pickupModes?: React.ReactNode;\r\n preferredStoreButton?: React.ReactNode;\r\n removePreferredStoreButton?: React.ReactNode;\r\n storeDetailsCloseButton?: React.ReactNode;\r\n handlers: {\r\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\r\n onSetAsPreferredStore(locationId: string | undefined): void;\r\n onRemovePreferredStore(): void;\r\n closeStoreDetailsModal(): Promise;\r\n };\r\n}\r\n\r\n/**\r\n * On Store locator click functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\nconst onPickupInStoreClickHandler = (props: ISelectedStoreProps) => () => {\r\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\r\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation);\r\n }\r\n};\r\n\r\n/**\r\n * Set Preferred store functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\nconst onSetPreferredStoreClickHandler = (props: ISelectedStoreProps) => () => {\r\n props.handlers.onSetAsPreferredStore(props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber);\r\n};\r\n\r\n/**\r\n * On Change functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\nconst onChangeHandler = (props: ISelectedStoreProps) => async (deliveryCode: string): Promise => {\r\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\r\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, deliveryCode);\r\n }\r\n return Promise.resolve();\r\n};\r\n\r\n/**\r\n * Remove preferred store functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\nconst removePreferredStoreHandler = (props: ISelectedStoreProps) => () => {\r\n props.handlers.onRemovePreferredStore();\r\n};\r\n\r\n/**\r\n * On Store locator click functionality.\r\n * @param props -Store locator location items.\r\n * @param pickupMode -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\nconst onPickupModeSelectHandler = (props: ISelectedStoreProps, pickupMode?: string) => () => {\r\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\r\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, pickupMode);\r\n }\r\n};\r\n\r\n/**\r\n * On store details close functionality.\r\n * @param props -Store locator location items.\r\n * @returns Void promise.\r\n */\r\nconst storeDetailsModalHandler = (props: ISelectedStoreProps) => async (): Promise => {\r\n await props.handlers.closeStoreDetailsModal();\r\n};\r\n\r\n/**\r\n * Method to render pickup modes.\r\n * @param props - StoreSelector Line item props.\r\n * @param deliveryOptionList - Product DeliveryOption List.\r\n * @param pickupInStoreButtonText - Pickup store button text.\r\n * @param pickupInStoreAriaLabel - Pickup store aria label.\r\n * @returns Jsx component.\r\n */\r\nconst renderPickupModes = (\r\n props: ISelectedStoreProps,\r\n deliveryOptionList: DeliveryOption[],\r\n pickupInStoreButtonText: string,\r\n pickupInStoreAriaLabel: string\r\n): JSX.Element | null => {\r\n if (props.filteredPickupMode === undefined) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Renders selected store details.\r\n * @param props - Store location details props.\r\n * @returns - Selected Store view props.\r\n */\r\nconst selectedStoreDetails = (props: ISelectedStoreProps): ISelectedStoreViewProps => {\r\n const {\r\n className,\r\n shouldHideStockStatus,\r\n isCurrentLocation,\r\n isInStock,\r\n selectedStore,\r\n resources,\r\n stockStatusLabel,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n isLocationDisabled,\r\n telemetryContent,\r\n storePickUpOptionList,\r\n productPickUpOptionList,\r\n preferredDistanceUnit\r\n } = props;\r\n\r\n const parentClassName = className ? className : 'ms-store-select__map__selected_store';\r\n const storeName: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\r\n const location = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\r\n const distanceAsString: string | undefined = buildDistanceString(location?.Distance, preferredDistanceUnit, isLocationDisabled);\r\n\r\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\r\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\r\n // eslint-disable-next-line no-nested-ternary -- Required to check stock Label\r\n const stockText: string | undefined = shouldHideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\r\n const canSelectLocation = !shouldHideStockStatus && isInStock;\r\n const pickupInStoreButtonText: string = resources.selectLocation;\r\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\r\n const isPreferredStore = preferredStoreLocationId === location?.OrgUnitNumber;\r\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\r\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\r\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\r\n\r\n const viewProps: ISelectedStoreViewProps = {\r\n selectedStore,\r\n isCurrentLocation,\r\n canSelectLocation,\r\n isPreferredStore,\r\n resources,\r\n deliveryOptions: deliveryOptionList,\r\n storeDetailsMain: {\r\n tag: 'div' as NodeTag,\r\n className: `${parentClassName}__main`\r\n },\r\n storeHeader: {\r\n tag: 'div' as NodeTag,\r\n className: `${parentClassName}__header`\r\n },\r\n storeName: {storeName},\r\n storeDetailsCloseButton: \r\n ),\r\n pickupModes: renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel),\r\n preferredStoreButton: isPreferredStoreEnabled ? (\r\n \r\n {resources.preferredStoreText}\r\n \r\n ) : null,\r\n removePreferredStoreButton: isPreferredStoreEnabled ? (\r\n \r\n {resources.setAsPreferredStoreText}\r\n \r\n ) : null,\r\n handlers: {\r\n onSelected: props.handlers.onSelected,\r\n onSetAsPreferredStore: props.handlers.onSetAsPreferredStore,\r\n onRemovePreferredStore: props.handlers.onRemovePreferredStore,\r\n closeStoreDetailsModal: props.handlers.closeStoreDetailsModal\r\n }\r\n };\r\n\r\n return viewProps;\r\n};\r\n\r\n/**\r\n * Store location line item component.\r\n */\r\nexport const SelectedStoreComponent = selectedStoreDetails as (props: ISelectedStoreProps) => ISelectedStoreViewProps;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IStoreSelector containerModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport const enum mode {\r\n findStores = 'findStores',\r\n pickupInStore = 'pickupInStore'\r\n}\r\n\r\nexport const enum searchRadiusUnit {\r\n miles = 'miles',\r\n kilometers = 'kilometers'\r\n}\r\n\r\nexport const enum style {\r\n inline = 'inline',\r\n dialog = 'dialog'\r\n}\r\n\r\nexport interface IStoreSelectorConfig extends Msdyn365.IModuleConfig {\r\n heading?: string;\r\n termsOfServiceLink?: ITermsOfServiceLinkData;\r\n mode?: mode;\r\n searchRadiusUnit?: searchRadiusUnit;\r\n lookupRadius: number;\r\n style?: style;\r\n setAsPreferredStore?: boolean;\r\n enablePickupFilterToShowStore?: boolean;\r\n showAllStores?: boolean;\r\n autoSuggestionEnabled?: boolean;\r\n autoSuggestOptions?: IAutoSuggestOptionsData;\r\n storeUrlFormat?: string;\r\n className?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface IStoreSelectorResources {\r\n searchPlaceholderText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n outOfStockText: string;\r\n inStockText: string;\r\n selectedStoreLocationText: string;\r\n emptyLocationsText: string;\r\n selectStoreText: string;\r\n selectStoreAriaFormatText: string;\r\n setAsPreferredStoreText: string;\r\n setAsPreferredStoreTextAriaLabel: string;\r\n preferredStoreText: string;\r\n preferredStoreAriaLabel: string;\r\n timeText: string;\r\n captionText: string;\r\n milesShortText: string;\r\n kilometersShortText: string;\r\n contactText: string;\r\n availabilityText: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeConfiguration: string;\r\n productDimensionTypeSize: string;\r\n productDimensionTypeStyle: string;\r\n storeHoursClosedText: string;\r\n storeHoursMondayText: string;\r\n storeHoursTuesdayText: string;\r\n storeHoursWednesdayText: string;\r\n storeHoursThursdayText: string;\r\n storeHoursFridayText: string;\r\n storeHoursSaturdayText: string;\r\n storeHoursSundayText: string;\r\n storeHoursMondayFullText: string;\r\n storeHoursTuesdayFullText: string;\r\n storeHoursWednesdayFullText: string;\r\n storeHoursThursdayFullText: string;\r\n storeHoursFridayFullText: string;\r\n storeHoursSaturdayFullText: string;\r\n storeHoursSundayFullText: string;\r\n storePhoneAriaLabel: string;\r\n storeAddressAriaLabel: string;\r\n storeCountMessage: string;\r\n storeAllCountMessage: string;\r\n storeCountMessageInKm: string;\r\n storeSelectorHeaderText: string;\r\n storeLocatorHeaderText: string;\r\n seeAllStoresText: string;\r\n viewMapText: string;\r\n viewListText: string;\r\n pickupFilterByHeading: string;\r\n pickupFilterMenuHeading: string;\r\n inStockOnlyLabel: string;\r\n pickupDeliveryOptionErrorMessage: string;\r\n}\r\n\r\nexport interface ITermsOfServiceLinkData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface IAutoSuggestOptionsData {\r\n maxResults?: number;\r\n}\r\n\r\nexport interface IStoreSelectorProps extends Msdyn365.IModule {\r\n resources: IStoreSelectorResources;\r\n config: IStoreSelectorConfig;\r\n slots: {\r\n maps: React.ReactNode[];\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/// \r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport { IStoreInfo, IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n ArrayExtensions,\r\n getFullAvailableInventoryNearby,\r\n GetFullAvailableInventoryNearbyInput,\r\n getOrgUnitLocationsByArea,\r\n GetOrgUnitLocationsByAreaInput,\r\n IFullOrgUnitAvailability\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getTelemetryObject,\r\n IModuleProps,\r\n INodeProps,\r\n isMobile,\r\n ITelemetryContent,\r\n Modal,\r\n ModalBody,\r\n ModalFooter,\r\n ModalHeader,\r\n NodeTag,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport { reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n StoreSelectorEmptyMessage,\r\n StoreSelectorFoundLocationsMessage,\r\n StoreSelectorLocationLines,\r\n StoreSelectorSearchForm,\r\n StoreSelectorTermsOfService,\r\n StoreSelectorWaiting\r\n} from './components';\r\nimport { ISelectedStoreProps, ISelectedStoreViewProps, SelectedStoreComponent } from './components/selected-store/selected-store';\r\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './components/store-selector-location-line-item/date-time-helpers';\r\nimport { IStoreSelectorData } from './store-selector.data';\r\nimport {\r\n IStoreSelectorProps,\r\n IStoreSelectorResources,\r\n mode as modeEnum,\r\n searchRadiusUnit as SearchRadiusUnit,\r\n style as styleEnum\r\n} from './store-selector.props.autogenerated';\r\n\r\n/**\r\n * StoreSelector State Interface.\r\n */\r\nexport interface IStoreSelectorState {\r\n isSearchInProgress: boolean;\r\n searchTerm?: string;\r\n isSeeAllStoreValue: boolean;\r\n isLocationDisabled?: boolean;\r\n filteredPickupMode?: string;\r\n inStockStoreOnly: boolean;\r\n}\r\n\r\n/**\r\n * StoreSelector View Props Interface.\r\n */\r\nexport interface IStoreSelectorViewProps extends IStoreSelectorProps {\r\n state: IStoreSelectorState;\r\n\r\n // Containers:\r\n ModuleProps: IModuleProps;\r\n BodyContainerProps: INodeProps;\r\n FooterContainerProps: INodeProps;\r\n HeaderContainerProps: INodeProps;\r\n HeaderProps?: React.ReactNode;\r\n\r\n // Components\r\n locationsMessage?: React.ReactNode;\r\n search?: React.ReactNode;\r\n spinner?: React.ReactNode;\r\n locationsList?: React.ReactNode;\r\n selectedLocation?: ISelectedStoreViewProps;\r\n noLocationsMessage?: React.ReactNode;\r\n terms?: React.ReactNode;\r\n headerText?: React.ReactNode;\r\n sortLocations?: IFullOrgUnitAvailability[];\r\n locationListProps?: IStoreSelectorLocationLineItemProps[];\r\n bodyWrapperProps?: INodeProps;\r\n storeResultContainerProps?: INodeProps;\r\n mapContainerProps?: INodeProps;\r\n maps?: React.ReactNode;\r\n isMobileView?: boolean;\r\n storeDetailsModal?: INodeProps;\r\n\r\n callbacks: {\r\n closeDialog(): Promise;\r\n searchTermChanged(searchTerm: string): Promise;\r\n performSearch(searchTerm: string): Promise;\r\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\r\n getAndUpdateUserLocation(): Promise;\r\n attachMapAutoSuggest(): Promise;\r\n onSuggestionSelected(result: Microsoft.Maps.ISuggestionResult): Promise;\r\n setPreferredStore(storeId: string | undefined): Promise;\r\n removePreferredStore(): Promise;\r\n setSelectedStore(storeId: string | undefined): Promise;\r\n setOrgUnitStoreInformation(location: OrgUnitLocation | undefined): Promise;\r\n };\r\n}\r\n\r\n/**\r\n * StoreSelectorLocation Line Resources Interface.\r\n */\r\nexport interface IStoreSelectorLocationLineItemResources {\r\n contactInfoHeader: string;\r\n storeHoursHeader: string;\r\n availabilityInfoHeader: string;\r\n closedText: string;\r\n outOfStock: string;\r\n inStock: string;\r\n currentLocation: string;\r\n selectLocation: string;\r\n selectLocationAriaLabelFormat: string;\r\n setAsPreferredStoreText: string;\r\n setAsPreferredStoreTextAriaLabel: string;\r\n preferredStoreText: string;\r\n preferredStoreAriaLabel: string;\r\n\r\n days: {\r\n monday: string;\r\n tuesday: string;\r\n wednesday: string;\r\n thursday: string;\r\n friday: string;\r\n saturday: string;\r\n sunday: string;\r\n mondayFull: string;\r\n tuesdayFull: string;\r\n wednesdayFull: string;\r\n thursdayFull: string;\r\n fridayFull: string;\r\n saturdayFull: string;\r\n sundayFull: string;\r\n };\r\n}\r\n\r\n/**\r\n * ILocationHours Interface.\r\n */\r\nexport interface ILocationHours {\r\n openFrom?: string;\r\n openTo?: string;\r\n}\r\n\r\n/**\r\n * StoreSelectorLocation Line Item Props Interface.\r\n */\r\nexport interface IStoreSelectorLocationLineItemProps {\r\n location: OrgUnitLocation;\r\n storeHours?: StoreHours;\r\n storeHoursList?: IHoursDisplayInfo[];\r\n\r\n hideStockStatus?: boolean;\r\n isInStock?: boolean;\r\n isCurrentLocation?: boolean;\r\n\r\n resources: IStoreSelectorLocationLineItemResources;\r\n stockStatusLabel?: string;\r\n storeLocatorView?: boolean;\r\n isPreferredStoreEnabled?: boolean;\r\n index: string;\r\n preferredStoreLocationId: string | null;\r\n storePickUpOptionList?: DeliveryOption[];\r\n productPickUpOptionList?: DeliveryOption[];\r\n selectedStoreLocationId?: string;\r\n locationOpen?: ILocationHours;\r\n\r\n /**\r\n * The telemetry content.\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n preferredDistanceUnit: string;\r\n isLocationDisabled?: boolean;\r\n handlers: {\r\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\r\n onSetAsPreferredStore(locationId: string | undefined): void;\r\n onRemovePreferredStore(): void;\r\n closeStoreDetailsModal(): Promise;\r\n };\r\n onClick: (locationId: string | undefined) => void;\r\n}\r\n\r\n/**\r\n *\r\n * Pick Up In Store module.\r\n * @extends React.Component>}\r\n */\r\n@observer\r\nclass StoreSelector extends React.Component, IStoreSelectorState> {\r\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private storeCounter: number;\r\n\r\n private isPreferredStoreEnabled?: boolean;\r\n\r\n public constructor(props: IStoreSelectorProps) {\r\n super(props);\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.state = {\r\n isSearchInProgress: true,\r\n searchTerm: '',\r\n isSeeAllStoreValue: false,\r\n filteredPickupMode: undefined,\r\n inStockStoreOnly: true\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.storeCounter = 0;\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\r\n } = this.props;\r\n\r\n // Adding Timeout to make sure it loads the data based upon the preferred store.\r\n setTimeout(() => {\r\n this._getAndUpdateStoreLocation();\r\n }, 0);\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isDialogOpen,\r\n async () => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (context?.id === this.props.id) {\r\n this._getAndUpdateStoreLocation();\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\r\n async () => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (!context || context.id === this.props.id) {\r\n await this._searchTermChanged('');\r\n this._getAndUpdateStoreLocation();\r\n }\r\n }\r\n );\r\n\r\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\r\n await this.props.data.storeSelectorStateManager.result.loadMapApi({\r\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\r\n lang: this.props.context.actionContext.requestContext.locale,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\r\n });\r\n }\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\r\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\r\n lang: this.props.context.actionContext.requestContext.locale,\r\n market: this.props.context.actionContext.requestContext.channel?.ChannelCountryRegionISOCode\r\n });\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.availabilitiesWithHours.result,\r\n async () => {\r\n if (this.props.data.storeSelectorStateManager.result?.isDialogOpen) {\r\n const storeLocationList = this.props.data.availabilitiesWithHours.result;\r\n if (storeLocationList) {\r\n await this._setOrgUnitStoreInformation(storeLocationList);\r\n }\r\n }\r\n }\r\n );\r\n\r\n if (isAutoSuggestionEnabled) {\r\n when(\r\n () => {\r\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\r\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\r\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\r\n return isMapApiLoaded && isDialogOpen && isSameContext;\r\n },\r\n () => {\r\n setTimeout(async () => {\r\n await this._attachMapAutoSuggest();\r\n }, 0);\r\n }\r\n );\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(): boolean {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n if (context && context.id === this.props.id) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\r\n public render(): JSX.Element {\r\n const {\r\n config: {\r\n termsOfServiceLink,\r\n className,\r\n heading,\r\n mode,\r\n style,\r\n setAsPreferredStore: shouldSetAsPreferredStore,\r\n showAllStores: shouldShowAllStores,\r\n lookupRadius,\r\n enablePickupFilterToShowStore: hasEnablePickupFilterToShowStore,\r\n searchRadiusUnit\r\n },\r\n context: {\r\n telemetry,\r\n app: { config: appConfig },\r\n actionContext: {\r\n requestContext: { channel, cookies }\r\n }\r\n },\r\n slots: { maps: mapSlot },\r\n resources,\r\n data: {\r\n availabilitiesWithHours: { result: availabilitiesWithHours },\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n storeLocations: { result: storeLocations }\r\n }\r\n } = this.props;\r\n\r\n this.storeCounter = 0;\r\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\r\n const isMapDisabled = !(channel?.BingMapsApiKey && channel.BingMapsEnabled);\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n const isDialogOpen: boolean = storeSelectorStateManager\r\n ? storeSelectorStateManager.isDialogOpen && context?.id === this.props.id\r\n : false;\r\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\r\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\r\n const isInlineView = styleDefault === styleEnum.inline;\r\n const isLocatorView = modeDefault === modeEnum.findStores;\r\n const shouldHideInventory = isLocatorView;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\r\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\r\n this.isPreferredStoreEnabled = shouldSetAsPreferredStore && cookies?.isConsentGiven();\r\n const canShowLocationView =\r\n context && (context.showMapViewLink === undefined || context.showMapViewLink) && storeSelectorStateManager?.isMapModuleLoaded;\r\n\r\n const storeSelectorActions = {\r\n async toggleListMapViewState(): Promise {\r\n await storeSelectorStateManager?.toggleListMapViewState();\r\n }\r\n };\r\n\r\n if (!channel?.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n }\r\n\r\n const configHeading = heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText;\r\n const preferredDistanceUnit =\r\n searchRadiusUnit === SearchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\r\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\r\n let storeLocationList: IFullOrgUnitAvailability[] | undefined = shouldHideInventory ? storeLocations : availabilitiesWithHours;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Reading value from app config.\r\n const isEnableOutofStock: boolean = appConfig?.enableStockCheck || false;\r\n const alreadySelectedLocation = context ? context.alreadySelectedLocation : undefined;\r\n const productPickUpOptionList = storeSelectorStateManager?.context?.deliveryOptions?.DeliveryOptions;\r\n if (this.state.filteredPickupMode && storeLocationList) {\r\n storeLocationList = this.onFilterLocations(storeLocationList, this.state.filteredPickupMode);\r\n }\r\n\r\n let sortLocation = null;\r\n if (storeLocationList) {\r\n sortLocation = this._sortStores(storeLocationList, this.isPreferredStoreEnabled, preferredLocationId);\r\n }\r\n\r\n const locationListProps = this._getStoreLocationListProps(\r\n isEnableOutofStock,\r\n isLocatorView,\r\n preferredLocationId,\r\n this.isPreferredStoreEnabled,\r\n selectedStoreLocationId,\r\n sortLocation ?? null,\r\n preferredDistanceUnit,\r\n alreadySelectedLocation,\r\n productPickUpOptionList\r\n );\r\n\r\n const hasMapSlot = ArrayExtensions.hasElements(mapSlot);\r\n const dialogClassName = hasMapSlot ? 'ms-store-select__map' : '';\r\n const viewProps: IStoreSelectorViewProps = {\r\n ...(this.props as IStoreSelectorProps),\r\n state: this.state,\r\n maps: hasMapSlot ? mapSlot[0] : undefined,\r\n\r\n ModuleProps: {\r\n tag: isInlineView ? ('div' as NodeTag) : Modal,\r\n moduleProps: this.props,\r\n className: classname(\r\n `ms-store-${isInlineView ? 'locate' : 'select'}`,\r\n className,\r\n dialogClassName,\r\n isInlineView ? '' : 'msc-modal-input-required'\r\n ),\r\n autoFocus: true,\r\n fade: true,\r\n isOpen: isDialogOpen,\r\n 'aria-label': configHeading,\r\n onClosed: this._closeDialog,\r\n horizontalPosition: 'center',\r\n verticalPosition: 'center',\r\n toggle: this._closeDialog\r\n },\r\n isMobileView: isMobileDevice,\r\n HeaderContainerProps: {\r\n tag: isInlineView ? ('div' as NodeTag) : ModalHeader,\r\n className: `ms-store-select__${isInlineView ? 'header' : 'modal-header'}`,\r\n toggle: this._closeDialog\r\n },\r\n HeaderProps: configHeading && (\r\n \r\n ),\r\n FooterContainerProps: {\r\n tag: isInlineView ? ('div' as NodeTag) : ModalFooter,\r\n className: `ms-store-select__${isInlineView ? 'footer' : 'modal-footer'} ${!shouldDisplayList ? 'map-only-view' : ''}`\r\n },\r\n BodyContainerProps: {\r\n tag: isInlineView ? ('div' as NodeTag) : ModalBody,\r\n className: `ms-store-select__${isInlineView ? 'body' : 'modal-body'}`\r\n },\r\n bodyWrapperProps: {\r\n tag: 'div' as NodeTag,\r\n className: 'ms-store-select__body_wrapper'\r\n },\r\n storeResultContainerProps: {\r\n tag: 'div' as NodeTag,\r\n className: 'ms-store-select__store_container'\r\n },\r\n mapContainerProps: {\r\n tag: 'div' as NodeTag,\r\n className: 'ms-store-select__map_container'\r\n },\r\n storeDetailsModal: {\r\n tag: 'div' as NodeTag,\r\n className: `ms-store-select__map__selected_store__modal ${\r\n selectedStoreLocationId && isDialogOpen && !shouldDisplayList ? 'show' : 'hide'\r\n }`\r\n },\r\n locationsMessage: !this.state.isLocationDisabled && (\r\n \r\n ),\r\n selectedLocation: this.renderSelectedStore(\r\n shouldHideInventory,\r\n preferredDistanceUnit,\r\n preferredStore,\r\n this.isPreferredStoreEnabled,\r\n isEnableOutofStock,\r\n productPickUpOptionList,\r\n shouldDisplayList\r\n ),\r\n search: (\r\n this.setState(s => ({ inStockStoreOnly: !s.inStockStoreOnly }))}\r\n />\r\n ),\r\n spinner: ,\r\n locationsList: ArrayExtensions.hasElements(storeLocationList) ? (\r\n \r\n ) : (\r\n undefined\r\n ),\r\n noLocationsMessage: ,\r\n terms: (\r\n \r\n ),\r\n\r\n // Not being used in current context, we can use it here to pass more props.\r\n headerText: (\r\n {heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText}\r\n ),\r\n sortLocations: sortLocation,\r\n locationListProps,\r\n callbacks: {\r\n searchTermChanged: this._searchTermChanged,\r\n performSearch: this._performSearch,\r\n closeDialog: this._closeDialog,\r\n selectedLocation: this._onOrgUnitLocationSelected,\r\n getAndUpdateUserLocation: async () => {\r\n this._getAndUpdateStoreLocation();\r\n return Promise.resolve();\r\n },\r\n attachMapAutoSuggest: this._attachMapAutoSuggest,\r\n onSuggestionSelected: this._onOrgUnitLocationSelected,\r\n setPreferredStore: this._setPreferredStore,\r\n removePreferredStore: this._removePreferredStore,\r\n setSelectedStore: this._setSelectedStore,\r\n setOrgUnitStoreInformation: this._setOrgUnitStoreInformation\r\n }\r\n } as IStoreSelectorViewProps;\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Render the selected store for the mobile devices.\r\n * @param shouldHideInventory -- Hide Inventory.\r\n * @param preferredDistanceUnit -- Preferred Distance Unit.\r\n * @param preferredStore -- Preferred Store.\r\n * @param isPreferredStoreEnabled -- Is Preferred Store Enabled.\r\n * @param hasEnabledOutOfStockCheck -- Stock check is enabled or not.\r\n * @param productPickUpOptionList -- Product pickup option list.\r\n * @param shouldDisplayList - Should Display list.\r\n * @returns -- Returns the view props.\r\n */\r\n public renderSelectedStore = (\r\n shouldHideInventory: boolean,\r\n preferredDistanceUnit: string,\r\n preferredStore: IStoreInfo | undefined,\r\n isPreferredStoreEnabled: boolean | undefined,\r\n hasEnabledOutOfStockCheck: boolean,\r\n productPickUpOptionList?: DeliveryOption[],\r\n shouldDisplayList?: boolean\r\n ): ISelectedStoreViewProps | undefined => {\r\n const {\r\n resources,\r\n data: {\r\n availabilitiesWithHours: { result: availabilitiesWithHours },\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n storeLocations: { result: storeLocations }\r\n }\r\n } = this.props;\r\n\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n const selectedStore = (shouldHideInventory ? storeLocations : availabilitiesWithHours)?.find(\r\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === selectedStoreLocationId\r\n );\r\n const orgUnitLocation = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\r\n const selectedStoreResources = this._mapResources(resources);\r\n\r\n if (!shouldDisplayList && selectedStore) {\r\n const selectedProps: ISelectedStoreProps = {\r\n shouldHideStockStatus: shouldHideInventory,\r\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, context?.alreadySelectedLocation),\r\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, selectedStore.OrgUnitAvailability?.ItemAvailabilities),\r\n selectedStore,\r\n resources: selectedStoreResources,\r\n stockStatusLabel: this._stockInventoryLabel(selectedStore),\r\n preferredStoreLocationId: preferredStore?.StoreId ? preferredStore.StoreId : '',\r\n isPreferredStoreEnabled,\r\n isLocationDisabled: this.state.isLocationDisabled,\r\n telemetryContent: this.telemetryContent,\r\n storePickUpOptionList: selectedStore.OrgUnitPickUpDeliveryModes?.DeliveryOptions,\r\n productPickUpOptionList,\r\n preferredDistanceUnit,\r\n handlers: {\r\n onSelected: this._onOrgUnitLocationSelected,\r\n onSetAsPreferredStore: this._setPreferredStore,\r\n onRemovePreferredStore: this._removePreferredStore,\r\n closeStoreDetailsModal: this._closeStoreDetailModal\r\n }\r\n };\r\n\r\n return SelectedStoreComponent(selectedProps);\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Method to be called on link text change.\r\n * @param event -Content Edit Event.\r\n */\r\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent): void => {\r\n if (this.props.config.termsOfServiceLink) {\r\n this.props.config.termsOfServiceLink.linkText = event.target.value;\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called on heading change.\r\n * @param event -Content Edit Event.\r\n */\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\r\n this.props.config.heading = event.target.value;\r\n };\r\n\r\n /**\r\n * Show all stores handler function.\r\n */\r\n private readonly onShowAllStoresHandler = () => {\r\n this._getAndUpdateStoreLocation(true);\r\n this.setState({ filteredPickupMode: undefined });\r\n };\r\n\r\n /**\r\n * Method to be called for filtered the store location based on the filter selected by the user.\r\n * @param stores -All the stores from the API.\r\n * @param filteredPickupMode -Filter selected by the user.\r\n * @returns -Filtered stores.\r\n */\r\n private readonly onFilterLocations = (stores: IFullOrgUnitAvailability[], filteredPickupMode: string) => {\r\n return stores.filter(location => {\r\n return location.OrgUnitPickUpDeliveryModes?.DeliveryOptions?.some(deliveryOption => {\r\n return deliveryOption.Code === filteredPickupMode;\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Filter Store by pickup mode.\r\n * @param deliveryCode -Delivery Code.\r\n */\r\n private readonly onFilteredPickupMode = (deliveryCode: string) => {\r\n this.setState({ filteredPickupMode: deliveryCode });\r\n };\r\n\r\n /**\r\n * Method will sort all stores.\r\n * @param stores -Stores List.\r\n * @param isPreferredStoreEnabled -Module config value.\r\n * @param preferredStoreLocationId -Store Id.\r\n * @returns List of Stores.\r\n */\r\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\r\n private _sortStores(\r\n stores: IFullOrgUnitAvailability[],\r\n isPreferredStoreEnabled: boolean | undefined,\r\n preferredStoreLocationId: string\r\n ): IFullOrgUnitAvailability[] {\r\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\r\n isPreferredStoreEnabled &&\r\n preferredStoreLocationId &&\r\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreLocationId;\r\n\r\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\r\n }\r\n\r\n /**\r\n * Method will list of store selector location line.\r\n * @param hasEnabledOutOfStockCheck -Stores List.\r\n * @param isStoreLocatorView -Module config value.\r\n * @param preferredStoreLocationId -Store Id.\r\n * @param isPreferredStoreEnabled -Stores List.\r\n * @param selectedStoreLocationId -Module config value.\r\n * @param stores -Store Id.\r\n * @param preferredDistanceUnit -Module config value.\r\n * @param alreadySelectedLocation -Already Selected Location.\r\n * @param productPickUpOptionList -Product supported Pickup Modes List.\r\n * @returns List of StoreSelectorLocation Line.\r\n */\r\n private _getStoreLocationListProps(\r\n hasEnabledOutOfStockCheck: boolean,\r\n isStoreLocatorView: boolean,\r\n preferredStoreLocationId: string,\r\n isPreferredStoreEnabled: boolean | undefined,\r\n selectedStoreLocationId: string | undefined,\r\n stores: IFullOrgUnitAvailability[] | null,\r\n preferredDistanceUnit?: string | undefined,\r\n alreadySelectedLocation?: OrgUnitLocation,\r\n productPickUpOptionList?: DeliveryOption[]\r\n ): IStoreSelectorLocationLineItemProps[] {\r\n const storeList: IStoreSelectorLocationLineItemProps[] = [];\r\n if (ArrayExtensions.hasElements(stores)) {\r\n stores.map((store, index: number) => {\r\n const storeLineProps = this._createStoreLocationList(\r\n store,\r\n index,\r\n hasEnabledOutOfStockCheck,\r\n isStoreLocatorView,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n selectedStoreLocationId,\r\n preferredDistanceUnit,\r\n alreadySelectedLocation,\r\n productPickUpOptionList\r\n );\r\n if (storeLineProps) {\r\n storeList.push(storeLineProps);\r\n }\r\n });\r\n }\r\n return storeList;\r\n }\r\n\r\n /**\r\n * Initialize Map AutoSuggest.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise => {\r\n const {\r\n config: { autoSuggestOptions },\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\r\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\r\n /**\r\n * Callback for the autosuggest API.\r\n */\r\n callback: () => {\r\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\r\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\r\n this.autoSuggestManager.attachAutosuggest(\r\n `#ms-store-select__search-box_${this.props.id}`,\r\n `#ms-store-select__search-box-container_${this.props.id}`,\r\n this._onSuggestionSelected\r\n );\r\n },\r\n\r\n /**\r\n * Error call back for autosuggest API.\r\n */\r\n errorCallback: () => {\r\n if (telemetry) {\r\n telemetry.debug('Unable to attach map auto suggest.');\r\n }\r\n },\r\n credentials: channel?.BingMapsApiKey\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * On Selecting Location Suggestion.\r\n * @param result - Map Suggestions List.\r\n */\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (context && context.id === this.props.id) {\r\n await this._searchTermChanged(result.formattedSuggestion);\r\n await this._performSearch(result.formattedSuggestion);\r\n }\r\n };\r\n\r\n /**\r\n * On Selecting Preferred Store.\r\n * @param storeId - Store Id.\r\n */\r\n private readonly _setPreferredStore = async (storeId: string | undefined): Promise => {\r\n if (!storeId) {\r\n return;\r\n }\r\n\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { cookies }\r\n }\r\n },\r\n config: { mode },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n storeLocations: { result: storeLocations },\r\n availabilitiesWithHours: { result: availabilitiesWithHours }\r\n }\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\r\n\r\n let stores: IFullOrgUnitAvailability[];\r\n if (modeDefault === modeEnum.findStores && storeLocations) {\r\n stores = storeLocations;\r\n } else {\r\n stores = availabilitiesWithHours!;\r\n }\r\n\r\n const preferredStore = stores.find(store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === storeId);\r\n\r\n await storeSelectorStateManager.setPreferredStoreLocation(\r\n storeId,\r\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\r\n cookies.isConsentGiven(),\r\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude,\r\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude\r\n );\r\n };\r\n\r\n /**\r\n * On Removing Preferred Store.\r\n */\r\n private readonly _removePreferredStore = async (): Promise => {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { cookies }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n await storeSelectorStateManager.clearPreferredStore(cookies.isConsentGiven());\r\n };\r\n\r\n /**\r\n * Method called to close the store details modal that comes up on clicking the pushpin.\r\n * @returns Void promise.\r\n */\r\n private readonly _closeStoreDetailModal = async (): Promise => {\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\r\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\r\n };\r\n\r\n /**\r\n * On Selecting Store for pickup.\r\n * @param storeId - Store Id.\r\n */\r\n private readonly _setSelectedStore = async (storeId: string | undefined): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n await storeSelectorStateManager.setSelectedStoreLocationId(storeId);\r\n };\r\n\r\n /**\r\n * Method to be called on search.\r\n * @param searchTerm - Search string.\r\n */\r\n private readonly _performSearch = async (searchTerm: string): Promise => {\r\n const {\r\n context: { actionContext },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!searchTerm || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\r\n\r\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\r\n\r\n if (location) {\r\n await this._updateLocations(location.latitude, location.longitude);\r\n } else {\r\n await this._updateLocations();\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n };\r\n\r\n /**\r\n * Method to be called on search term changed.\r\n * @param searchTerm - Search string.\r\n */\r\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\r\n this.setState({ searchTerm });\r\n };\r\n\r\n /**\r\n * Method to be called updating the store location.\r\n * @param shouldShowAllStores - Flag to show all stores.\r\n */\r\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\r\n const {\r\n config: { style },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\r\n\r\n if (styleDefault !== styleEnum.inline && (!storeSelectorStateManager || !storeSelectorStateManager.isDialogOpen)) {\r\n // Store selector dialog isn't open yet, so don't try and update anything\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\r\n\r\n if (navigator?.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n async position => {\r\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\r\n this.setState({ isLocationDisabled: false, isSearchInProgress: true });\r\n if (shouldShowAllStores) {\r\n this.setState({ isSeeAllStoreValue: true });\r\n await this._searchTermChanged('');\r\n await this._updateLocations(position.coords.latitude, position.coords.longitude, 0);\r\n } else {\r\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n async error => {\r\n // If the location setting is turned off\r\n if (error.PERMISSION_DENIED) {\r\n this.setState({ isLocationDisabled: true, isSeeAllStoreValue: true });\r\n await this._searchTermChanged('');\r\n await this._updateLocations(0, 0, 0);\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n { timeout: 5000 }\r\n );\r\n } else {\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called closing the store selector dialog.\r\n * @returns Void promise.\r\n */\r\n private readonly _closeDialog = async (): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n this.setState({ searchTerm: '' });\r\n\r\n if (storeSelectorStateManager) {\r\n storeSelectorStateManager.context?.parentElementRef?.current?.focus();\r\n return storeSelectorStateManager.closeDialog();\r\n }\r\n };\r\n\r\n /**\r\n * Method to set store info.\r\n * @param orgUnitStoreInformation - Store Info Object.\r\n * @returns Void promise.\r\n */\r\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n config: { style },\r\n telemetry\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n const context = storeSelectorStateManager.context;\r\n const moduleId: string = context?.id ? context.id : this.props.id;\r\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\r\n let input: IStoreSelectionStateContext = {\r\n /**\r\n * On Location selected.\r\n * @returns - Returns promise.\r\n */\r\n onLocationSelected: async () => {\r\n // TO-DO handle event for when location in selected\r\n return Promise.resolve();\r\n }\r\n };\r\n\r\n if (storeSelectorStateManager.context) {\r\n input = storeSelectorStateManager.context;\r\n }\r\n\r\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager.preferredStore;\r\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\r\n const storeLocationList = this._sortStores(orgUnitStoreInformation, this.isPreferredStoreEnabled, preferredLocationId);\r\n\r\n input = {\r\n ...input,\r\n id: moduleId,\r\n showMapViewLink: context?.showMapViewLink,\r\n parentElementRef: context?.parentElementRef,\r\n isDialog: styleDefault === styleEnum.dialog,\r\n orgUnitStoreInformation: storeLocationList,\r\n product: context?.product\r\n };\r\n\r\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\r\n if (telemetry) {\r\n telemetry.error(error.message);\r\n telemetry.debug('Unable to Update store location state');\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Method to update user location.\r\n * @param latitude - User location.\r\n * @param longitude - User location.\r\n * @param radius - Search Criteria Radius.\r\n * @returns Void promise.\r\n */\r\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\r\n const {\r\n config: { mode, lookupRadius, style, searchRadiusUnit },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\r\n const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\r\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.kilometers ? 1 : 0;\r\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\r\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\r\n let localLatitude = this.state.searchTerm || !preferredStore?.Latitude ? latitude : preferredStore.Latitude;\r\n let long = this.state.searchTerm || !preferredStore?.Longitude ? longitude : preferredStore.Longitude;\r\n if (styleDefault === styleEnum.inline) {\r\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\r\n if (lastInlineStoreLocation && !this.state.searchTerm) {\r\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\r\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\r\n }\r\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\r\n }\r\n\r\n if (modeDefault === modeEnum.findStores) {\r\n await this.getOrgUnitLocationByArea(calRadius, distanceUnitValue, localLatitude, long);\r\n return;\r\n }\r\n\r\n await this.getFullAvailableInventoryNearby(calRadius, distanceUnitValue, localLatitude, long);\r\n };\r\n\r\n /**\r\n * Get org unit location by area.\r\n * @param calRadius - Radius.\r\n * @param distanceUnitValue - Distance unit value.\r\n * @param latitude - Latitude.\r\n * @param longitude - Longitude.\r\n * @returns - Returns a void promise.\r\n */\r\n private readonly getOrgUnitLocationByArea = async (\r\n calRadius: number,\r\n distanceUnitValue: number,\r\n latitude?: number,\r\n longitude?: number\r\n ): Promise => {\r\n const {\r\n context: { actionContext }\r\n } = this.props;\r\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\r\n latitude,\r\n longitude,\r\n calRadius,\r\n distanceUnitValue,\r\n this.state.isLocationDisabled\r\n );\r\n\r\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\r\n if (orgUnitLocations) {\r\n await this._setOrgUnitStoreInformation(orgUnitLocations);\r\n await this._setSelectedStore(undefined);\r\n }\r\n };\r\n\r\n /**\r\n * Get full available inventory nearby.\r\n * @param calRadius - Radius.\r\n * @param distanceUnitValue - Distance unit value.\r\n * @param latitude - Latitude.\r\n * @param longitude - Longitude.\r\n * @returns - Returns a void promise.\r\n */\r\n private readonly getFullAvailableInventoryNearby = async (\r\n calRadius: number,\r\n distanceUnitValue: number,\r\n latitude?: number,\r\n longitude?: number\r\n ): Promise => {\r\n const {\r\n telemetry,\r\n context: { actionContext },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager || !storeSelectorStateManager.context) {\r\n // Store selector dialog isn't open yet, so don't try and update anything\r\n return;\r\n }\r\n\r\n if (!storeSelectorStateManager.context.product) {\r\n // TODO: Use alternative search method here to not make inventory check\r\n return;\r\n }\r\n\r\n const input = new GetFullAvailableInventoryNearbyInput(\r\n storeSelectorStateManager.context.product.RecordId,\r\n latitude ?? 0,\r\n longitude ?? 0,\r\n calRadius,\r\n distanceUnitValue,\r\n this.state.isLocationDisabled\r\n );\r\n\r\n await getFullAvailableInventoryNearby(input, actionContext).catch(error => {\r\n telemetry.warning(error);\r\n telemetry.error(error.message);\r\n telemetry.debug('Unable to get full available inventory near by');\r\n });\r\n };\r\n\r\n /**\r\n * Method to called on store selected.\r\n * @param location - Store Info.\r\n * @param deliveryMode - Pickup mode.\r\n * @returns Void promise.\r\n */\r\n private readonly _onOrgUnitLocationSelected = async (location: OrgUnitLocation | undefined, deliveryMode?: string): Promise => {\r\n const {\r\n telemetry,\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager) {\r\n if (location && storeSelectorStateManager.context) {\r\n // Want to eat exceptions here so that the dialog still closes even if the onLocationSelected call goes wrong\r\n await storeSelectorStateManager.context.onLocationSelected(location, deliveryMode).catch(error => {\r\n telemetry.warning(error);\r\n telemetry.error(error.message);\r\n telemetry.debug('Unable to get on org unit location selected');\r\n });\r\n }\r\n\r\n await storeSelectorStateManager.closeDialog();\r\n }\r\n };\r\n\r\n /**\r\n * Method will list of store selector location line.\r\n * @param store -Store Info.\r\n * @param index - List index.\r\n * @param hasEnabledOutOfStockCheck -Stores List.\r\n * @param isStoreLocatorView -Module config value.\r\n * @param preferredStoreLocationId -Store Id.\r\n * @param isPreferredStoreEnabled -Stores List.\r\n * @param selectedStoreLocationId -Module config value.\r\n * @param preferredDistanceUnit -Module config value.\r\n * @param alreadySelectedLocation -Already Selected Location.\r\n * @param productPickUpOptionList -Product supported Pickup Modes List.\r\n * @returns StoreSelectorLocation Line Prop.\r\n */\r\n private _createStoreLocationList(\r\n store: IFullOrgUnitAvailability,\r\n index: number,\r\n hasEnabledOutOfStockCheck: boolean,\r\n isStoreLocatorView: boolean,\r\n preferredStoreLocationId: string,\r\n isPreferredStoreEnabled: boolean | undefined,\r\n selectedStoreLocationId: string | undefined,\r\n preferredDistanceUnit?: string | undefined,\r\n alreadySelectedLocation?: OrgUnitLocation,\r\n productPickUpOptionList?: DeliveryOption[]\r\n ): IStoreSelectorLocationLineItemProps | undefined {\r\n const orgUnitLocation = store.OrgUnitAvailability?.OrgUnitLocation;\r\n const selectedStoreLocation = selectedStoreLocationId;\r\n const deliveryOptions = store.OrgUnitPickUpDeliveryModes;\r\n const lineResources = this._mapResources(this.props.resources);\r\n const storeOpenFrom: string | undefined = secondsToTime(orgUnitLocation?.OpenFrom);\r\n const storeOpenTo: string | undefined = secondsToTime(orgUnitLocation?.OpenTo);\r\n const storeHours = store.StoreHours;\r\n\r\n if (orgUnitLocation) {\r\n ++this.storeCounter;\r\n return {\r\n location: orgUnitLocation,\r\n selectedStoreLocationId: selectedStoreLocation,\r\n storeHours,\r\n resources: lineResources,\r\n preferredDistanceUnit: preferredDistanceUnit!,\r\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, alreadySelectedLocation),\r\n hideStockStatus: !hasEnabledOutOfStockCheck,\r\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, store.OrgUnitAvailability?.ItemAvailabilities),\r\n stockStatusLabel: this._stockInventoryLabel(store),\r\n storeLocatorView: isStoreLocatorView,\r\n index: this.storeCounter.toString(),\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n telemetryContent: this.telemetryContent,\r\n isLocationDisabled: this.state.isLocationDisabled,\r\n storePickUpOptionList: deliveryOptions?.DeliveryOptions,\r\n productPickUpOptionList,\r\n locationOpen: { openFrom: storeOpenFrom, openTo: storeOpenTo },\r\n storeHoursList: storeHours?.RegularStoreHours ? buildStoreHours(storeHours.RegularStoreHours, lineResources) : [],\r\n onClick: this._setSelectedStore,\r\n handlers: {\r\n onSelected: this._onOrgUnitLocationSelected,\r\n onSetAsPreferredStore: this._setPreferredStore,\r\n onRemovePreferredStore: this._removePreferredStore,\r\n closeStoreDetailsModal: this._closeStoreDetailModal\r\n }\r\n };\r\n }\r\n return undefined;\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\n private readonly _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 private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined, selectedLocation?: OrgUnitLocation): boolean =>\r\n (selectedLocation && location && selectedLocation.OrgUnitNumber === location.OrgUnitNumber) || false;\r\n\r\n /**\r\n * Method to get stock.\r\n * @param hasEnableOutOfStockCheck - Config to check for stock check enabled.\r\n * @param itemAvailabilities - Item quantity availability.\r\n * @returns Boolean value for item stock.\r\n */\r\n private readonly _isProductInStock = (\r\n hasEnableOutOfStockCheck: boolean,\r\n itemAvailabilities: ItemAvailability[] | undefined\r\n ): boolean => {\r\n if (!hasEnableOutOfStockCheck) {\r\n return true;\r\n }\r\n const quantityCount = 0;\r\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\r\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > quantityCount : false;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n /**\r\n * Method to get stocklevel label.\r\n * @param isInStock - Stock available in store.\r\n * @returns Label for stock status.\r\n */\r\n private readonly _stockInventoryLabel = (isInStock: IFullOrgUnitAvailability | undefined): string | undefined => {\r\n if (isInStock?.ProductInventoryInformation && ArrayExtensions.hasElements(isInStock.ProductInventoryInformation)) {\r\n for (let index = 0; index < isInStock.ProductInventoryInformation.length; index++) {\r\n if (\r\n isInStock.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\r\n isInStock.ProductInventoryInformation[index].InventLocationId\r\n ) {\r\n return isInStock.ProductInventoryInformation[index].StockLevelLabel;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n };\r\n}\r\n\r\nexport default StoreSelector;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ISelectedStoreViewProps } from './components/selected-store/selected-store';\r\nimport { IStoreSelectorViewProps } from './store-selector';\r\n\r\n/**\r\n * Renders the pickup Delivery options.\r\n * @param props -- Selected store view props.\r\n * @returns -- HTML.\r\n */\r\nconst renderDeliveryOptions: React.FC = props => {\r\n const { canSelectLocation, deliveryOptions, pickUpDeliveryOptionButton, pickupModes } = props;\r\n\r\n return (\r\n <>\r\n {/* eslint-disable-next-line no-nested-ternary -- Need this.*/}\r\n {canSelectLocation ? (ArrayExtensions.hasElements(deliveryOptions) ? pickupModes : pickUpDeliveryOptionButton) : false}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the selected store.\r\n * @param props -- Selected store view props.\r\n * @returns -- HTML.\r\n */\r\nconst renderSelectedStore: React.FC = props => {\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 isCurrentLocation,\r\n currentLocation,\r\n isPreferredStore,\r\n preferredStoreButton,\r\n removePreferredStoreButton\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {storeDetailsCloseButton}\r\n {storeName}\r\n {storeDistance}\r\n \r\n \r\n {productAvailability}\r\n {stockStatus}\r\n \r\n {isCurrentLocation ? currentLocation : renderDeliveryOptions(props)}\r\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the body of the popup.\r\n * @param props -- Store selector view props.\r\n * @returns -- Returns the html.\r\n */\r\nconst renderBody: React.FC = props => {\r\n const {\r\n BodyContainerProps,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n locationsList,\r\n noLocationsMessage,\r\n maps,\r\n bodyWrapperProps,\r\n storeResultContainerProps,\r\n mapContainerProps,\r\n isMobileView,\r\n storeDetailsModal,\r\n selectedLocation\r\n } = props;\r\n\r\n if (isMobileView) {\r\n return (\r\n \r\n {locationsMessage}\r\n {search}\r\n \r\n \r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\r\n {maps}\r\n {selectedLocation && renderSelectedStore(selectedLocation)}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {locationsMessage}\r\n {search}\r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\r\n \r\n {maps}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Store selector view props.\r\n * @param props - Store selector view props.\r\n * @returns - HTML.\r\n */\r\nconst StoreSelectorView: React.FC = props => {\r\n const {\r\n FooterContainerProps,\r\n HeaderContainerProps,\r\n HeaderProps,\r\n ModuleProps,\r\n\r\n terms\r\n } = props;\r\n\r\n return (\r\n \r\n {HeaderProps}\r\n {renderBody(props)}\r\n {terms}\r\n \r\n );\r\n};\r\n\r\nexport default StoreSelectorView;\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('partner/modules/store-selector/store-selector.tsx'),\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: false,\n ns: '__local__',\n n: 'store-selector',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/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__|modules|store-selector|store-selector'] = {\n c: () => require('partner/modules/store-selector/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 { 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 { 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 } 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 { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\n\nimport { IStoreSelectorLocationLineItemResources } from '.';\n\nexport interface IHoursDisplayInfo {\n startDayShort: string;\n startDayFull: string;\n endDayShort?: string;\n endDayFull?: string;\n timeRange: string;\n}\n\ninterface IHoursInfo {\n isClosed: boolean;\n openTime?: number;\n closeTime?: number;\n}\n\ntype DayType = 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN';\n\nexport const secondsToTime = (seconds: number | undefined): string | undefined => {\n if (seconds === undefined) {\n return undefined;\n }\n let hours = Math.floor(seconds / (60 * 60));\n const ampm = hours >= 12 ? 'pm' : 'am';\n hours %= 12;\n hours = hours ? hours : 12;\n const divisorForMinutes = seconds % (60 * 60);\n const minutes = Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\n return `${hours}:${minutes} ${ampm}`;\n};\n\nconst getShortTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.monday;\n case 'TUE':\n return resources.days.tuesday;\n case 'WED':\n return resources.days.wednesday;\n case 'THU':\n return resources.days.thursday;\n case 'FRI':\n return resources.days.friday;\n case 'SAT':\n return resources.days.saturday;\n default:\n // Case 'SUN':\n return resources.days.sunday;\n }\n};\n\nconst getFullTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.mondayFull;\n case 'TUE':\n return resources.days.tuesdayFull;\n case 'WED':\n return resources.days.wednesdayFull;\n case 'THU':\n return resources.days.thursdayFull;\n case 'FRI':\n return resources.days.fridayFull;\n case 'SAT':\n return resources.days.saturdayFull;\n default:\n // Case 'SUN':\n return resources.days.sundayFull;\n }\n};\n\nconst buildHoursDisplayInfo = (\n startDay: DayType,\n endDay: DayType,\n hoursInfo: string,\n resources: IStoreSelectorLocationLineItemResources\n): IHoursDisplayInfo => {\n return {\n startDayShort: getShortTimeString(startDay, resources),\n startDayFull: getFullTimeString(startDay, resources),\n endDayShort: startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,\n endDayFull: startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,\n timeRange: hoursInfo\n };\n};\n\nconst shouldMergeLines = (firstLine: IHoursInfo, secondLine: IHoursInfo): boolean => {\n if (firstLine.isClosed && secondLine.isClosed) {\n return true;\n }\n\n if (!firstLine.isClosed && !secondLine.isClosed) {\n return firstLine.openTime === secondLine.openTime && firstLine.closeTime === secondLine.closeTime;\n }\n\n return false;\n};\n\nconst getStoreHoursData = (storeHours: RegularStoreHours, dateForLookup: string): IHoursInfo => {\n return {\n isClosed: get(storeHours, `IsClosedOn${dateForLookup}`, false),\n openTime: get(storeHours, `${dateForLookup}OpenTime`, undefined),\n closeTime: get(storeHours, `${dateForLookup}CloseTime`, undefined)\n };\n};\n\nconst buildStoreHoursString = (hoursInfo: IHoursInfo, resources: IStoreSelectorLocationLineItemResources): string => {\n if (hoursInfo.isClosed) {\n return resources.closedText;\n }\n const openFrom: string | undefined = secondsToTime(hoursInfo.openTime);\n const openTo: string | undefined = secondsToTime(hoursInfo.closeTime);\n\n return `${openFrom}–${openTo}`;\n};\n\nexport const buildStoreHours = (storeHours: RegularStoreHours, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo[] => {\n const storeHoursList: IHoursDisplayInfo[] = [];\n\n const mondayHours = getStoreHoursData(storeHours, 'Monday');\n const tuesdayHours = getStoreHoursData(storeHours, 'Tuesday');\n const wednesdayHours = getStoreHoursData(storeHours, 'Wednesday');\n const thursdayHours = getStoreHoursData(storeHours, 'Thursday');\n const fridayHours = getStoreHoursData(storeHours, 'Friday');\n const saturdayHours = getStoreHoursData(storeHours, 'Saturday');\n const sundayHours = getStoreHoursData(storeHours, 'Sunday');\n\n let periodStart: DayType = 'MON';\n let periodEnd: DayType = 'MON';\n\n if (!shouldMergeLines(mondayHours, tuesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(mondayHours, resources), resources));\n\n periodStart = 'TUE';\n }\n periodEnd = 'TUE';\n\n if (!shouldMergeLines(tuesdayHours, wednesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(tuesdayHours, resources), resources));\n\n periodStart = 'WED';\n }\n periodEnd = 'WED';\n\n if (!shouldMergeLines(wednesdayHours, thursdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(wednesdayHours, resources), resources));\n\n periodStart = 'THU';\n }\n periodEnd = 'THU';\n\n if (!shouldMergeLines(thursdayHours, fridayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(thursdayHours, resources), resources));\n\n periodStart = 'FRI';\n }\n periodEnd = 'FRI';\n\n if (!shouldMergeLines(fridayHours, saturdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(fridayHours, resources), resources));\n\n periodStart = 'SAT';\n }\n periodEnd = 'SAT';\n\n if (!shouldMergeLines(saturdayHours, sundayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(saturdayHours, resources), resources));\n\n periodStart = 'SUN';\n }\n periodEnd = 'SUN';\n\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(sundayHours, resources), resources));\n\n return storeHoursList;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\n\n/**\n * Store Locator line item resources.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n\n closedText: string;\n\n outOfStock: string;\n inStock: string;\n\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n pickupDeliveryOptionErrorMessage?: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * Store Locator line item props.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n };\n}\n\n/**\n * Store Locator line item action component.\n */\nconst storeSelectorLocationLineItemComponentActions = {\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\n props.handlers.onSelected(props.location, deliveryMode);\n },\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\n },\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onRemovePreferredStore();\n }\n};\n\n/**\n * Function to render store hours.\n * @param storeHours - Store Hours object.\n * @param location - Store Unit.\n * @param resources - Resources.\n * @returns - Jsx element.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n location: OrgUnitLocation,\n resources: IStoreSelectorLocationLineItemResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day houts\n if (storeHours?.RegularStoreHours) {\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\n\n return (\n
\n {storeHoursList.map(displayTime => (\n
\n {displayTime.endDayShort ? (\n
\n {displayTime.startDayShort}–\n {displayTime.endDayShort}\n
\n ) : (\n
\n {displayTime.startDayShort}\n
\n )}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string | undefined = secondsToTime(location.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\n\n return (\n
\n {storeOpenFrom}-{storeOpenTo}\n
\n );\n};\n\n/**\n * Function to return distance measure unit.\n * @param distance - Store location within radius.\n * @param preferredDistanceUnit - Unit configuration.\n * @param isLocationDisabled - Flag to check user location.\n * @returns - Unit of distance.\n */\nexport const buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n isLocationDisabled?: boolean\n): string | undefined => {\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < 1) {\n return `(<1 ${preferredDistanceUnit})`;\n }\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\n};\n\n/**\n * Function to store contact.\n * @param contacts - Store location within radius.\n * @returns - Return primary contact number of store.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\n return Promise.resolve();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: IStoreSelectorLocationLineItemProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns DeliveryOptionList.\n */\nexport const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n const deliveryOption: DeliveryOption[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n });\n\n return deliveryOption;\n};\n\n/**\n * Renders store location line items.\n * @param props - Store location line items props.\n * @returns - HTML.\n */\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\n const {\n hideStockStatus,\n isCurrentLocation,\n isInStock,\n location,\n resources,\n storeHours,\n stockStatusLabel,\n storeLocatorView,\n index,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n shouldShowIndex\n } = props;\n\n const storeName: string | undefined = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = hideStockStatus || isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [isError, setError] = React.useState(false);\n\n const pickUpButtonClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n if (deliveryOptionList.length === 0) {\n setError(true);\n } else {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\n }\n };\n\n /* eslint-disable prettier/prettier */\n return (\n
\n
\n {(shouldShowIndex || storeLocatorView) && {index}}\n {storeName}\n {distanceAsString ? \n {' '}\n {distanceAsString}\n : false}\n
\n
\n
\n

{resources.contactInfoHeader}

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

{resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

}\n {stockText &&

{stockText}

}\n {isCurrentLocation ? (\n

{resources.currentLocation}

\n ) : canSelectLocation ? (\n deliveryOptionList.length === 0 ? (\n \n {pickupInStoreButtonText}\n \n ) : (\n renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel)\n )\n ) : (\n false\n )}\n
\n )}\n {isPreferredStoreEnabled ? (\n isPreferredStore ? (\n \n {resources.preferredStoreText}\n \n ) : (\n \n {resources.setAsPreferredStoreText}\n \n )\n ) : null}\n
\n {isError ? (\n \n \n ) : ('')}\n
\n );\n};\n\n/**\n * Store location line item component.\n */\nexport const StoreSelectorLocationLineItemComponent = storeSelectorLocationLineItem as (\n props: IStoreSelectorLocationLineItemProps\n) => JSX.Element;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, 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, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildDistanceString, matchDeliveryOptions } from '../store-selector-location-line-item';\n\n/**\n * Store Locator line item resources.\n */\nexport interface ISelectedStoreResources {\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreProps {\n className?: string;\n shouldHideStockStatus?: boolean;\n isCurrentLocation?: boolean;\n isInStock?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n resources: ISelectedStoreResources;\n stockStatusLabel?: string;\n preferredStoreLocationId: string | null;\n isPreferredStoreEnabled?: boolean;\n isLocationDisabled?: boolean;\n telemetryContent?: ITelemetryContent;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n preferredDistanceUnit: string;\n filteredPickupMode?: string;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreViewProps {\n isCurrentLocation?: boolean;\n canSelectLocation?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n deliveryOptions?: DeliveryOption[];\n isPreferredStore?: boolean;\n resources: ISelectedStoreResources;\n\n storeDetailsMain: INodeProps;\n storeHeader: INodeProps;\n storeName: React.ReactNode;\n storeDistance: React.ReactNode;\n storeDetailsAvailabilityContainer: INodeProps;\n productAvailability: React.ReactNode;\n stockStatus: React.ReactNode;\n currentLocation: React.ReactNode;\n pickUpDeliveryOptionButton: React.ReactNode;\n pickupModes?: React.ReactNode;\n preferredStoreButton?: React.ReactNode;\n removePreferredStoreButton?: React.ReactNode;\n storeDetailsCloseButton?: React.ReactNode;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupInStoreClickHandler = (props: ISelectedStoreProps) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation);\n }\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onSetAsPreferredStore(props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: ISelectedStoreProps) => async (deliveryCode: string): Promise => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, deliveryCode);\n }\n return Promise.resolve();\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onRemovePreferredStore();\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: ISelectedStoreProps, pickupMode?: string) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, pickupMode);\n }\n};\n\n/**\n * On store details close functionality.\n * @param props -Store locator location items.\n * @returns Void promise.\n */\nconst storeDetailsModalHandler = (props: ISelectedStoreProps) => async (): Promise => {\n await props.handlers.closeStoreDetailsModal();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: ISelectedStoreProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Renders selected store details.\n * @param props - Store location details props.\n * @returns - Selected Store view props.\n */\nconst selectedStoreDetails = (props: ISelectedStoreProps): ISelectedStoreViewProps => {\n const {\n className,\n shouldHideStockStatus,\n isCurrentLocation,\n isInStock,\n selectedStore,\n resources,\n stockStatusLabel,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n preferredDistanceUnit\n } = props;\n\n const parentClassName = className ? className : 'ms-store-select__map__selected_store';\n const storeName: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\n const location = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const distanceAsString: string | undefined = buildDistanceString(location?.Distance, preferredDistanceUnit, isLocationDisabled);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n // eslint-disable-next-line no-nested-ternary -- Required to check stock Label\n const stockText: string | undefined = shouldHideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = !shouldHideStockStatus && isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\n const isPreferredStore = preferredStoreLocationId === location?.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n\n const viewProps: ISelectedStoreViewProps = {\n selectedStore,\n isCurrentLocation,\n canSelectLocation,\n isPreferredStore,\n resources,\n deliveryOptions: deliveryOptionList,\n storeDetailsMain: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__main`\n },\n storeHeader: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__header`\n },\n storeName: {storeName},\n storeDetailsCloseButton: \n ),\n pickupModes: renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel),\n preferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.preferredStoreText}\n \n ) : null,\n removePreferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.setAsPreferredStoreText}\n \n ) : null,\n handlers: {\n onSelected: props.handlers.onSelected,\n onSetAsPreferredStore: props.handlers.onSetAsPreferredStore,\n onRemovePreferredStore: props.handlers.onRemovePreferredStore,\n closeStoreDetailsModal: props.handlers.closeStoreDetailsModal\n }\n };\n\n return viewProps;\n};\n\n/**\n * Store location line item component.\n */\nexport const SelectedStoreComponent = selectedStoreDetails as (props: ISelectedStoreProps) => ISelectedStoreViewProps;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/// \n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreInfo, IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n getOrgUnitLocationsByArea,\n GetOrgUnitLocationsByAreaInput,\n IFullOrgUnitAvailability\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n NodeTag,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n StoreSelectorEmptyMessage,\n StoreSelectorFoundLocationsMessage,\n StoreSelectorLocationLines,\n StoreSelectorSearchForm,\n StoreSelectorTermsOfService,\n StoreSelectorWaiting\n} from './components';\nimport { ISelectedStoreProps, ISelectedStoreViewProps, SelectedStoreComponent } from './components/selected-store/selected-store';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './components/store-selector-location-line-item/date-time-helpers';\nimport { IStoreSelectorData } from './store-selector.data';\nimport {\n IStoreSelectorProps,\n IStoreSelectorResources,\n mode as modeEnum,\n searchRadiusUnit as SearchRadiusUnit,\n style as styleEnum\n} from './store-selector.props.autogenerated';\n\n/**\n * StoreSelector State Interface.\n */\nexport interface IStoreSelectorState {\n isSearchInProgress: boolean;\n searchTerm?: string;\n isSeeAllStoreValue: boolean;\n isLocationDisabled?: boolean;\n filteredPickupMode?: string;\n}\n\n/**\n * StoreSelector View Props Interface.\n */\nexport interface IStoreSelectorViewProps extends IStoreSelectorProps {\n state: IStoreSelectorState;\n\n // Containers:\n ModuleProps: IModuleProps;\n BodyContainerProps: INodeProps;\n FooterContainerProps: INodeProps;\n HeaderContainerProps: INodeProps;\n HeaderProps?: React.ReactNode;\n\n // Components\n locationsMessage?: React.ReactNode;\n search?: React.ReactNode;\n spinner?: React.ReactNode;\n locationsList?: React.ReactNode;\n selectedLocation?: ISelectedStoreViewProps;\n noLocationsMessage?: React.ReactNode;\n terms?: React.ReactNode;\n headerText?: React.ReactNode;\n sortLocations?: IFullOrgUnitAvailability[];\n locationListProps?: IStoreSelectorLocationLineItemProps[];\n bodyWrapperProps?: INodeProps;\n storeResultContainerProps?: INodeProps;\n mapContainerProps?: INodeProps;\n maps?: React.ReactNode;\n isMobileView?: boolean;\n storeDetailsModal?: INodeProps;\n\n callbacks: {\n closeDialog(): Promise;\n searchTermChanged(searchTerm: string): Promise;\n performSearch(searchTerm: string): Promise;\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\n getAndUpdateUserLocation(): Promise;\n attachMapAutoSuggest(): Promise;\n onSuggestionSelected(result: Microsoft.Maps.ISuggestionResult): Promise;\n setPreferredStore(storeId: string | undefined): Promise;\n removePreferredStore(): Promise;\n setSelectedStore(storeId: string | undefined): Promise;\n setOrgUnitStoreInformation(location: OrgUnitLocation | undefined): Promise;\n };\n}\n\n/**\n * StoreSelectorLocation Line Resources Interface.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * ILocationHours Interface.\n */\nexport interface ILocationHours {\n openFrom?: string;\n openTo?: string;\n}\n\n/**\n * StoreSelectorLocation Line Item Props Interface.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n storeHoursList?: IHoursDisplayInfo[];\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n selectedStoreLocationId?: string;\n locationOpen?: ILocationHours;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n onClick: (locationId: string | undefined) => void;\n}\n\n/**\n *\n * Pick Up In Store module.\n * @extends React.Component>}\n */\n@observer\nclass StoreSelector extends React.Component, IStoreSelectorState> {\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private storeCounter: number;\n\n private isPreferredStoreEnabled?: boolean;\n\n public constructor(props: IStoreSelectorProps) {\n super(props);\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.state = { isSearchInProgress: true, searchTerm: '', isSeeAllStoreValue: false, filteredPickupMode: undefined };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.storeCounter = 0;\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\n } = this.props;\n\n // Adding Timeout to make sure it loads the data based upon the preferred store.\n setTimeout(() => {\n this._getAndUpdateStoreLocation();\n }, 0);\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isDialogOpen,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context?.id === this.props.id) {\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (!context || context.id === this.props.id) {\n await this._searchTermChanged('');\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\n await this.props.data.storeSelectorStateManager.result.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\n });\n }\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\n () => {\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context.actionContext.requestContext.channel?.ChannelCountryRegionISOCode\n });\n }\n );\n\n reaction(\n () => this.props.data.availabilitiesWithHours.result,\n async () => {\n if (this.props.data.storeSelectorStateManager.result?.isDialogOpen) {\n const storeLocationList = this.props.data.availabilitiesWithHours.result;\n if (storeLocationList) {\n await this._setOrgUnitStoreInformation(storeLocationList);\n }\n }\n }\n );\n\n if (isAutoSuggestionEnabled) {\n when(\n () => {\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\n return isMapApiLoaded && isDialogOpen && isSameContext;\n },\n () => {\n setTimeout(async () => {\n await this._attachMapAutoSuggest();\n }, 0);\n }\n );\n }\n }\n\n public shouldComponentUpdate(): boolean {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n if (context && context.id === this.props.id) {\n return true;\n }\n return false;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element {\n const {\n config: {\n termsOfServiceLink,\n className,\n heading,\n mode,\n style,\n setAsPreferredStore: shouldSetAsPreferredStore,\n showAllStores: shouldShowAllStores,\n lookupRadius,\n enablePickupFilterToShowStore: hasEnablePickupFilterToShowStore,\n searchRadiusUnit\n },\n context: {\n telemetry,\n app: { config: appConfig },\n actionContext: {\n requestContext: { channel, cookies }\n }\n },\n slots: { maps: mapSlot },\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n this.storeCounter = 0;\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n const isMapDisabled = !(channel?.BingMapsApiKey && channel.BingMapsEnabled);\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const isDialogOpen: boolean = storeSelectorStateManager\n ? storeSelectorStateManager.isDialogOpen && context?.id === this.props.id\n : false;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const isInlineView = styleDefault === styleEnum.inline;\n const isLocatorView = modeDefault === modeEnum.findStores;\n const shouldHideInventory = isLocatorView;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\n this.isPreferredStoreEnabled = shouldSetAsPreferredStore && cookies?.isConsentGiven();\n const canShowLocationView =\n context && (context.showMapViewLink === undefined || context.showMapViewLink) && storeSelectorStateManager?.isMapModuleLoaded;\n\n const storeSelectorActions = {\n async toggleListMapViewState(): Promise {\n await storeSelectorStateManager?.toggleListMapViewState();\n }\n };\n\n if (!channel?.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n }\n\n const configHeading = heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText;\n const preferredDistanceUnit =\n searchRadiusUnit === SearchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n let storeLocationList: IFullOrgUnitAvailability[] | undefined = shouldHideInventory ? storeLocations : availabilitiesWithHours;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Reading value from app config.\n const isEnableOutofStock: boolean = appConfig?.enableStockCheck || false;\n const alreadySelectedLocation = context ? context.alreadySelectedLocation : undefined;\n const productPickUpOptionList = storeSelectorStateManager?.context?.deliveryOptions?.DeliveryOptions;\n if (this.state.filteredPickupMode && storeLocationList) {\n storeLocationList = this.onFilterLocations(storeLocationList, this.state.filteredPickupMode);\n }\n\n let sortLocation = null;\n if (storeLocationList) {\n sortLocation = this._sortStores(storeLocationList, this.isPreferredStoreEnabled, preferredLocationId);\n }\n\n const locationListProps = this._getStoreLocationListProps(\n isEnableOutofStock,\n isLocatorView,\n preferredLocationId,\n this.isPreferredStoreEnabled,\n selectedStoreLocationId,\n sortLocation ?? null,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n\n const hasMapSlot = ArrayExtensions.hasElements(mapSlot);\n const dialogClassName = hasMapSlot ? 'ms-store-select__map' : '';\n const viewProps: IStoreSelectorViewProps = {\n ...(this.props as IStoreSelectorProps),\n state: this.state,\n maps: hasMapSlot ? mapSlot[0] : undefined,\n\n ModuleProps: {\n tag: isInlineView ? ('div' as NodeTag) : Modal,\n moduleProps: this.props,\n className: classname(\n `ms-store-${isInlineView ? 'locate' : 'select'}`,\n className,\n dialogClassName,\n isInlineView ? '' : 'msc-modal-input-required'\n ),\n autoFocus: true,\n fade: true,\n isOpen: isDialogOpen,\n 'aria-label': configHeading,\n onClosed: this._closeDialog,\n horizontalPosition: 'center',\n verticalPosition: 'center',\n toggle: this._closeDialog\n },\n isMobileView: isMobileDevice,\n HeaderContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalHeader,\n className: `ms-store-select__${isInlineView ? 'header' : 'modal-header'}`,\n toggle: this._closeDialog\n },\n HeaderProps: configHeading && (\n \n ),\n FooterContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalFooter,\n className: `ms-store-select__${isInlineView ? 'footer' : 'modal-footer'} ${!shouldDisplayList ? 'map-only-view' : ''}`\n },\n BodyContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalBody,\n className: `ms-store-select__${isInlineView ? 'body' : 'modal-body'}`\n },\n bodyWrapperProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__body_wrapper'\n },\n storeResultContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__store_container'\n },\n mapContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__map_container'\n },\n storeDetailsModal: {\n tag: 'div' as NodeTag,\n className: `ms-store-select__map__selected_store__modal ${\n selectedStoreLocationId && isDialogOpen && !shouldDisplayList ? 'show' : 'hide'\n }`\n },\n locationsMessage: !this.state.isLocationDisabled && (\n \n ),\n selectedLocation: this.renderSelectedStore(\n shouldHideInventory,\n preferredDistanceUnit,\n preferredStore,\n this.isPreferredStoreEnabled,\n isEnableOutofStock,\n productPickUpOptionList,\n shouldDisplayList\n ),\n search: (\n \n ),\n spinner: ,\n locationsList: ArrayExtensions.hasElements(storeLocationList) ? (\n \n ) : (\n undefined\n ),\n noLocationsMessage: ,\n terms: (\n \n ),\n\n // Not being used in current context, we can use it here to pass more props.\n headerText: (\n {heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText}\n ),\n sortLocations: sortLocation,\n locationListProps,\n callbacks: {\n searchTermChanged: this._searchTermChanged,\n performSearch: this._performSearch,\n closeDialog: this._closeDialog,\n selectedLocation: this._onOrgUnitLocationSelected,\n getAndUpdateUserLocation: async () => {\n this._getAndUpdateStoreLocation();\n return Promise.resolve();\n },\n attachMapAutoSuggest: this._attachMapAutoSuggest,\n onSuggestionSelected: this._onOrgUnitLocationSelected,\n setPreferredStore: this._setPreferredStore,\n removePreferredStore: this._removePreferredStore,\n setSelectedStore: this._setSelectedStore,\n setOrgUnitStoreInformation: this._setOrgUnitStoreInformation\n }\n } as IStoreSelectorViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Render the selected store for the mobile devices.\n * @param shouldHideInventory -- Hide Inventory.\n * @param preferredDistanceUnit -- Preferred Distance Unit.\n * @param preferredStore -- Preferred Store.\n * @param isPreferredStoreEnabled -- Is Preferred Store Enabled.\n * @param hasEnabledOutOfStockCheck -- Stock check is enabled or not.\n * @param productPickUpOptionList -- Product pickup option list.\n * @param shouldDisplayList - Should Display list.\n * @returns -- Returns the view props.\n */\n public renderSelectedStore = (\n shouldHideInventory: boolean,\n preferredDistanceUnit: string,\n preferredStore: IStoreInfo | undefined,\n isPreferredStoreEnabled: boolean | undefined,\n hasEnabledOutOfStockCheck: boolean,\n productPickUpOptionList?: DeliveryOption[],\n shouldDisplayList?: boolean\n ): ISelectedStoreViewProps | undefined => {\n const {\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const selectedStore = (shouldHideInventory ? storeLocations : availabilitiesWithHours)?.find(\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === selectedStoreLocationId\n );\n const orgUnitLocation = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreResources = this._mapResources(resources);\n\n if (!shouldDisplayList && selectedStore) {\n const selectedProps: ISelectedStoreProps = {\n shouldHideStockStatus: shouldHideInventory,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, context?.alreadySelectedLocation),\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, selectedStore.OrgUnitAvailability?.ItemAvailabilities),\n selectedStore,\n resources: selectedStoreResources,\n stockStatusLabel: this._stockInventoryLabel(selectedStore),\n preferredStoreLocationId: preferredStore?.StoreId ? preferredStore.StoreId : '',\n isPreferredStoreEnabled,\n isLocationDisabled: this.state.isLocationDisabled,\n telemetryContent: this.telemetryContent,\n storePickUpOptionList: selectedStore.OrgUnitPickUpDeliveryModes?.DeliveryOptions,\n productPickUpOptionList,\n preferredDistanceUnit,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n\n return SelectedStoreComponent(selectedProps);\n }\n\n return undefined;\n };\n\n /**\n * Method to be called on link text change.\n * @param event -Content Edit Event.\n */\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.termsOfServiceLink) {\n this.props.config.termsOfServiceLink.linkText = event.target.value;\n }\n };\n\n /**\n * Method to be called on heading change.\n * @param event -Content Edit Event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading = event.target.value;\n };\n\n /**\n * Show all stores handler function.\n */\n private readonly onShowAllStoresHandler = () => {\n this._getAndUpdateStoreLocation(true);\n this.setState({ filteredPickupMode: undefined });\n };\n\n /**\n * Method to be called for filtered the store location based on the filter selected by the user.\n * @param stores -All the stores from the API.\n * @param filteredPickupMode -Filter selected by the user.\n * @returns -Filtered stores.\n */\n private readonly onFilterLocations = (stores: IFullOrgUnitAvailability[], filteredPickupMode: string) => {\n return stores.filter(location => {\n return location.OrgUnitPickUpDeliveryModes?.DeliveryOptions?.some(deliveryOption => {\n return deliveryOption.Code === filteredPickupMode;\n });\n });\n };\n\n /**\n * Filter Store by pickup mode.\n * @param deliveryCode -Delivery Code.\n */\n private readonly onFilteredPickupMode = (deliveryCode: string) => {\n this.setState({ filteredPickupMode: deliveryCode });\n };\n\n /**\n * Method will sort all stores.\n * @param stores -Stores List.\n * @param isPreferredStoreEnabled -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @returns List of Stores.\n */\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\n private _sortStores(\n stores: IFullOrgUnitAvailability[],\n isPreferredStoreEnabled: boolean | undefined,\n preferredStoreLocationId: string\n ): IFullOrgUnitAvailability[] {\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n isPreferredStoreEnabled &&\n preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Method will list of store selector location line.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param stores -Store Id.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns List of StoreSelectorLocation Line.\n */\n private _getStoreLocationListProps(\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n stores: IFullOrgUnitAvailability[] | null,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps[] {\n const storeList: IStoreSelectorLocationLineItemProps[] = [];\n if (ArrayExtensions.hasElements(stores)) {\n stores.map((store, index: number) => {\n const storeLineProps = this._createStoreLocationList(\n store,\n index,\n hasEnabledOutOfStockCheck,\n isStoreLocatorView,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n selectedStoreLocationId,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n if (storeLineProps) {\n storeList.push(storeLineProps);\n }\n });\n }\n return storeList;\n }\n\n /**\n * Initialize Map AutoSuggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n config: { autoSuggestOptions },\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\n /**\n * Callback for the autosuggest API.\n */\n callback: () => {\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\n this.autoSuggestManager.attachAutosuggest(\n `#ms-store-select__search-box_${this.props.id}`,\n `#ms-store-select__search-box-container_${this.props.id}`,\n this._onSuggestionSelected\n );\n },\n\n /**\n * Error call back for autosuggest API.\n */\n errorCallback: () => {\n if (telemetry) {\n telemetry.debug('Unable to attach map auto suggest.');\n }\n },\n credentials: channel?.BingMapsApiKey\n });\n }\n };\n\n /**\n * On Selecting Location Suggestion.\n * @param result - Map Suggestions List.\n */\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context && context.id === this.props.id) {\n await this._searchTermChanged(result.formattedSuggestion);\n await this._performSearch(result.formattedSuggestion);\n }\n };\n\n /**\n * On Selecting Preferred Store.\n * @param storeId - Store Id.\n */\n private readonly _setPreferredStore = async (storeId: string | undefined): Promise => {\n if (!storeId) {\n return;\n }\n\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n config: { mode },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations },\n availabilitiesWithHours: { result: availabilitiesWithHours }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n\n let stores: IFullOrgUnitAvailability[];\n if (modeDefault === modeEnum.findStores && storeLocations) {\n stores = storeLocations;\n } else {\n stores = availabilitiesWithHours!;\n }\n\n const preferredStore = stores.find(store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === storeId);\n\n await storeSelectorStateManager.setPreferredStoreLocation(\n storeId,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\n cookies.isConsentGiven(),\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude\n );\n };\n\n /**\n * On Removing Preferred Store.\n */\n private readonly _removePreferredStore = async (): Promise => {\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.clearPreferredStore(cookies.isConsentGiven());\n };\n\n /**\n * Method called to close the store details modal that comes up on clicking the pushpin.\n * @returns Void promise.\n */\n private readonly _closeStoreDetailModal = async (): Promise => {\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\n };\n\n /**\n * On Selecting Store for pickup.\n * @param storeId - Store Id.\n */\n private readonly _setSelectedStore = async (storeId: string | undefined): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.setSelectedStoreLocationId(storeId);\n };\n\n /**\n * Method to be called on search.\n * @param searchTerm - Search string.\n */\n private readonly _performSearch = async (searchTerm: string): Promise => {\n const {\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!searchTerm || !storeSelectorStateManager) {\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\n\n if (location) {\n await this._updateLocations(location.latitude, location.longitude);\n } else {\n await this._updateLocations();\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n };\n\n /**\n * Method to be called on search term changed.\n * @param searchTerm - Search string.\n */\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\n this.setState({ searchTerm });\n };\n\n /**\n * Method to be called updating the store location.\n * @param shouldShowAllStores - Flag to show all stores.\n */\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\n const {\n config: { style },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n\n if (styleDefault !== styleEnum.inline && (!storeSelectorStateManager || !storeSelectorStateManager.isDialogOpen)) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n if (navigator?.geolocation) {\n navigator.geolocation.getCurrentPosition(\n async position => {\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\n this.setState({ isLocationDisabled: false, isSearchInProgress: true });\n if (shouldShowAllStores) {\n this.setState({ isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(position.coords.latitude, position.coords.longitude, 0);\n } else {\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n async error => {\n // If the location setting is turned off\n if (error.PERMISSION_DENIED) {\n this.setState({ isLocationDisabled: true, isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(0, 0, 0);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n { timeout: 5000 }\n );\n } else {\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n }\n };\n\n /**\n * Method to be called closing the store selector dialog.\n * @returns Void promise.\n */\n private readonly _closeDialog = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n this.setState({ searchTerm: '' });\n\n if (storeSelectorStateManager) {\n storeSelectorStateManager.context?.parentElementRef?.current?.focus();\n return storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method to set store info.\n * @param orgUnitStoreInformation - Store Info Object.\n * @returns Void promise.\n */\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n config: { style },\n telemetry\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n const context = storeSelectorStateManager.context;\n const moduleId: string = context?.id ? context.id : this.props.id;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n let input: IStoreSelectionStateContext = {\n /**\n * On Location selected.\n * @returns - Returns promise.\n */\n onLocationSelected: async () => {\n // TO-DO handle event for when location in selected\n return Promise.resolve();\n }\n };\n\n if (storeSelectorStateManager.context) {\n input = storeSelectorStateManager.context;\n }\n\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager.preferredStore;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n const storeLocationList = this._sortStores(orgUnitStoreInformation, this.isPreferredStoreEnabled, preferredLocationId);\n\n input = {\n ...input,\n id: moduleId,\n showMapViewLink: context?.showMapViewLink,\n parentElementRef: context?.parentElementRef,\n isDialog: styleDefault === styleEnum.dialog,\n orgUnitStoreInformation: storeLocationList,\n product: context?.product\n };\n\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\n if (telemetry) {\n telemetry.error(error.message);\n telemetry.debug('Unable to Update store location state');\n }\n });\n };\n\n /**\n * Method to update user location.\n * @param latitude - User location.\n * @param longitude - User location.\n * @param radius - Search Criteria Radius.\n * @returns Void promise.\n */\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\n const {\n config: { mode, lookupRadius, style, searchRadiusUnit },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.kilometers ? 1 : 0;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n let localLatitude = this.state.searchTerm || !preferredStore?.Latitude ? latitude : preferredStore.Latitude;\n let long = this.state.searchTerm || !preferredStore?.Longitude ? longitude : preferredStore.Longitude;\n if (styleDefault === styleEnum.inline) {\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\n if (lastInlineStoreLocation && !this.state.searchTerm) {\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\n }\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\n }\n\n if (modeDefault === modeEnum.findStores) {\n await this.getOrgUnitLocationByArea(calRadius, distanceUnitValue, localLatitude, long);\n return;\n }\n\n await this.getFullAvailableInventoryNearby(calRadius, distanceUnitValue, localLatitude, long);\n };\n\n /**\n * Get org unit location by area.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getOrgUnitLocationByArea = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n context: { actionContext }\n } = this.props;\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\n latitude,\n longitude,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\n if (orgUnitLocations) {\n await this._setOrgUnitStoreInformation(orgUnitLocations);\n await this._setSelectedStore(undefined);\n }\n };\n\n /**\n * Get full available inventory nearby.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getFullAvailableInventoryNearby = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n telemetry,\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager || !storeSelectorStateManager.context) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n if (!storeSelectorStateManager.context.product) {\n // TODO: Use alternative search method here to not make inventory check\n return;\n }\n\n const input = new GetFullAvailableInventoryNearbyInput(\n storeSelectorStateManager.context.product.RecordId,\n latitude ?? 0,\n longitude ?? 0,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n await getFullAvailableInventoryNearby(input, actionContext).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get full available inventory near by');\n });\n };\n\n /**\n * Method to called on store selected.\n * @param location - Store Info.\n * @param deliveryMode - Pickup mode.\n * @returns Void promise.\n */\n private readonly _onOrgUnitLocationSelected = async (location: OrgUnitLocation | undefined, deliveryMode?: string): Promise => {\n const {\n telemetry,\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager) {\n if (location && storeSelectorStateManager.context) {\n // Want to eat exceptions here so that the dialog still closes even if the onLocationSelected call goes wrong\n await storeSelectorStateManager.context.onLocationSelected(location, deliveryMode).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get on org unit location selected');\n });\n }\n\n await storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method will list of store selector location line.\n * @param store -Store Info.\n * @param index - List index.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns StoreSelectorLocation Line Prop.\n */\n private _createStoreLocationList(\n store: IFullOrgUnitAvailability,\n index: number,\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps | undefined {\n const orgUnitLocation = store.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocation = selectedStoreLocationId;\n const deliveryOptions = store.OrgUnitPickUpDeliveryModes;\n const lineResources = this._mapResources(this.props.resources);\n const storeOpenFrom: string | undefined = secondsToTime(orgUnitLocation?.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(orgUnitLocation?.OpenTo);\n const storeHours = store.StoreHours;\n\n if (orgUnitLocation) {\n ++this.storeCounter;\n return {\n location: orgUnitLocation,\n selectedStoreLocationId: selectedStoreLocation,\n storeHours,\n resources: lineResources,\n preferredDistanceUnit: preferredDistanceUnit!,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, alreadySelectedLocation),\n hideStockStatus: !hasEnabledOutOfStockCheck,\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, store.OrgUnitAvailability?.ItemAvailabilities),\n stockStatusLabel: this._stockInventoryLabel(store),\n storeLocatorView: isStoreLocatorView,\n index: this.storeCounter.toString(),\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n telemetryContent: this.telemetryContent,\n isLocationDisabled: this.state.isLocationDisabled,\n storePickUpOptionList: deliveryOptions?.DeliveryOptions,\n productPickUpOptionList,\n locationOpen: { openFrom: storeOpenFrom, openTo: storeOpenTo },\n storeHoursList: storeHours?.RegularStoreHours ? buildStoreHours(storeHours.RegularStoreHours, lineResources) : [],\n onClick: this._setSelectedStore,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n }\n return undefined;\n }\n\n /**\n * Method to map resources with Location Item.\n * @param resources - List of strings for module.\n * @returns Resources for StoreSelector location line.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined, selectedLocation?: OrgUnitLocation): boolean =>\n (selectedLocation && location && selectedLocation.OrgUnitNumber === location.OrgUnitNumber) || false;\n\n /**\n * Method to get stock.\n * @param hasEnableOutOfStockCheck - Config to check for stock check enabled.\n * @param itemAvailabilities - Item quantity availability.\n * @returns Boolean value for item stock.\n */\n private readonly _isProductInStock = (\n hasEnableOutOfStockCheck: boolean,\n itemAvailabilities: ItemAvailability[] | undefined\n ): boolean => {\n if (!hasEnableOutOfStockCheck) {\n return true;\n }\n const quantityCount = 0;\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > quantityCount : false;\n }\n\n return false;\n };\n\n /**\n * Method to get stocklevel label.\n * @param isInStock - Stock available in store.\n * @returns Label for stock status.\n */\n private readonly _stockInventoryLabel = (isInStock: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (isInStock?.ProductInventoryInformation && ArrayExtensions.hasElements(isInStock.ProductInventoryInformation)) {\n for (let index = 0; index < isInStock.ProductInventoryInformation.length; index++) {\n if (\n isInStock.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n isInStock.ProductInventoryInformation[index].InventLocationId\n ) {\n return isInStock.ProductInventoryInformation[index].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n}\n\nexport default StoreSelector;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport 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":["secondsToTime","seconds","undefined","hours","Math","floor","ampm","divisorForMinutes","getShortTimeString","day","resources","days","monday","tuesday","wednesday","thursday","friday","saturday","sunday","getFullTimeString","mondayFull","tuesdayFull","wednesdayFull","thursdayFull","fridayFull","saturdayFull","sundayFull","buildHoursDisplayInfo","startDay","endDay","hoursInfo","startDayShort","startDayFull","endDayShort","endDayFull","timeRange","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","storeHours","dateForLookup","get","buildStoreHoursString","closedText","buildStoreHours","storeHoursList","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","push","PickUpOptionList","React","constructor","props","super","eventsToBeBind","handleDocumentClick","event","htmlElement","target","this","_pickupListOptionButton","current","contains","_pickupListOptionMenu","setState","expandSiteOptions","_onSelect","async","preventDefault","deliveryCode","currentTarget","getAttribute","length","onChange","_renderDeliveryOptions","bind","state","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","render","pickupListOptionMenuText","pickupmodeList","className","onClick","ref","role","map","delivery","key","Code","tabIndex","Description","stopPropagation","isExpandSiteOptionsState","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","find","onKeyDown","storeSelectorLocationLineItemComponentActions","onLocationSelected","deliveryMode","handlers","onSelected","location","onSetAsPreferredStore","OrgUnitNumber","onRemovePreferredStore","buildDistanceString","distance","preferredDistanceUnit","isLocationDisabled","onPickupModeSelectHandler","pickupMode","onSetPreferredStoreClickHandler","removePreferredStoreHandler","onChangeHandler","Promise","resolve","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","pickup","_delivery","StoreSelectorLocationLineItemComponent","storeUrl","hideStockStatus","isCurrentLocation","isInStock","stockStatusLabel","storeLocatorView","index","preferredStoreLocationId","isPreferredStoreEnabled","telemetryContent","productPickUpOptionList","shouldShowIndex","storeName","OrgUnitName","distanceAsString","Distance","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","filter","contact","ContactTypeValue","IsPrivate","ArrayExtensions","hasElements","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","resourceLabel","inStock","outOfStock","stockLabel","stockText","canSelectLocation","pickupInStoreButtonText","selectLocation","pickupInStoreAriaLabel","selectLocationAriaLabelFormat","replace","isPreferredStore","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","attributes","getTelemetryAttributes","contentAction","etext","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","deliveryOptionList","isError","setError","href","contactInfoHeader","storeHoursHeader","renderStoreHours","RegularStoreHours","displayTime","JSON","stringify","title","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","availabilityInfoHeader","currentLocation","Object","assign","pickUpButtonClickHandler","renderPickupModes","filteredPickupMode","preferredStoreAriaLabel","preferredStoreText","setAsPreferredStoreTextAriaLabel","setAsPreferredStoreText","pickupDeliveryOptionErrorMessage","StoreSelectorLocationLines","onClickHandler","orgUnitLocation","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","itemAvailabilities","enableOutOfStockCheck","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","i","_availabilityWithHour","OrgUnitAvailability","OrgUnitLocation","InventoryLocationId","InventLocationId","StockLevelLabel","_mapResources","contactText","timeText","availabilityText","storeHoursClosedText","outOfStockText","inStockText","selectedStoreLocationText","selectStoreText","selectStoreAriaFormatText","storeHoursMondayText","storeHoursTuesdayText","storeHoursWednesdayText","storeHoursThursdayText","storeHoursFridayText","storeHoursSaturdayText","storeHoursSundayText","storeHoursMondayFullText","storeHoursTuesdayFullText","storeHoursWednesdayFullText","storeHoursThursdayFullText","storeHoursFridayFullText","storeHoursSaturdayFullText","storeHoursSundayFullText","storeCounter","componentDidUpdate","previousProps","selectedStoreLocationId","locations","_stores","_sortStores","reaction","regex","storeUrlFormat","classnames","show","displayList","store","_store$OrgUnitAvailab","orgUnitNumber","url","_renderStoreLocation","_store$OrgUnitAvailab2","deliveryOptions","OrgUnitPickUpDeliveryModes","_store$OrgUnitAvailab3","ItemAvailabilities","inStockOnly","selected","StoreHours","toString","DeliveryOptions","productPickUpDeliveryOptions","stores","value","_value$OrgUnitAvailab","__decorate","observable","observer","StoreSelectorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","keyCode","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Enter","Space","onShowAllStores","_searchTextChanged","inputValue","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","blur","performSearch","_onChangeHandler","filterPickupModeSelected","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","shouldDisplayList","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","inStockOnlyLabel","id","isMapDisabled","showAllStores","isLocatorView","toggleInStockOnly","name","autoComplete","onSubmit","type","searchInputAriaLabel","placeholder","onKeyUp","color","checked","htmlFor","StoreSelectorEmptyMessage","_ref","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","_ref2","link","requestContext","onTextChange","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","Msdyn365","editProps","StoreSelectorFoundLocationsMessage","_ref3","searchRadius","isSeeAllStore","storeCountMessage","milesShortText","storeCountMessageInKm","storeAllCountMessage","onPickupInStoreClickHandler","_props$selectedStore","selectedStore","_props$selectedStore2","_props$selectedStore3","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","parentClassName","storeDetailsMain","tag","storeHeader","storeDetailsCloseButton","Button","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","pickUpDeliveryOptionButton","pickupModes","preferredStoreButton","removePreferredStoreButton","mode","searchRadiusUnit","style","StoreSelector","renderSelectedStore","shouldHideInventory","preferredStore","hasEnabledOutOfStockCheck","data","availabilitiesWithHours","result","storeSelectorStateManager","storeLocations","context","selectedStoreResources","_selectedStore$OrgUni3","selectedProps","StoreId","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","handleLinkTextChange","config","termsOfServiceLink","handleHeadingChange","heading","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","_location$OrgUnitPick","some","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","telemetry","actionContext","channel","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","_objectSpread","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","debug","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","storeId","cookies","modeEnum","pickupInStore","findStores","setPreferredStoreLocation","isConsentGiven","Latitude","Longitude","clearPreferredStore","setSelectedStoreLocationId","_setSelectedStore","searchTerm","isSearchInProgress","isSeeAllStoreValue","geoLocate","trim","_updateLocations","latitude","longitude","shouldShowAllStores","_navigator","styleEnum","dialog","inline","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","error","PERMISSION_DENIED","timeout","_closeDialog","_storeSelectorStateMa","parentElementRef","focus","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","input","preferredLocationId","storeLocationList","orgUnitStoreInformation","showMapViewLink","isDialog","product","setOrgUnitStoreInformation","catch","message","radius","lookupRadius","calRadius","distanceUnitValue","SearchRadiusUnit","kilometers","modeDefault","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","RecordId","warning","selectedLocation","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","inStockStoreOnly","getTelemetryObject","request","telemetryPageName","friendlyName","_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","BingMapsEnabled","lang","locale","market","_this$props$data$stor7","_this$props$data$stor8","_this$props$context$a","_this$props$data$stor9","when","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","isSameContext","shouldComponentUpdate","_storeSelectorStateMa2","_storeSelectorStateMa3","_sortLocation","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","app","appConfig","slots","maps","mapSlot","isMobileDevice","isMobile","variant","VariantType","Viewport","isInlineView","listMapViewState","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","isEnableOutofStock","enableStockCheck","sortLocation","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","viewProps","ModuleProps","Modal","moduleProps","classname","autoFocus","fade","isOpen","onClosed","horizontalPosition","verticalPosition","toggle","isMobileView","HeaderContainerProps","ModalHeader","HeaderProps","text","onEdit","FooterContainerProps","ModalFooter","BodyContainerProps","ModalBody","bodyWrapperProps","storeResultContainerProps","mapContainerProps","storeDetailsModal","locationsMessage","search","s","spinner","locationsList","outOfStockThreshold","noLocationsMessage","terms","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","renderView","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","selectedStoreLocation","lineResources","_store$OrgUnitAvailab4","locationOpen","openFrom","openTo","Node","renderDeliveryOptions","Module","renderBody","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","BaseStoreSelectorStateManager","displayMap","preferredStoreLocalStorageKey","_readFromToCookie","storeInfo","parse","_unused","_context","writeToCookie","arguments","StoreName","_writeToCookie","_removeCookie","MsDyn365","isBrowser","localStorage","removeItem","setItem","cookieValue","getItem","computed","action","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchContent","jsonp","crypto","getRandomValues","Uint32Array","query","encodeURI","geolocationApiUrl","requestUrl","script","document","createElement","setAttribute","remove","resourceSets","point","coordinates","body","appendChild","_document","StringExtensions","isNullOrEmpty","getElementById","currentWindowAPI","mapAPIReady","reject","_document2","_document3","defer","src","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","createObservableDataAction","getGenericAction","inputData","StoreSelectorFoundLocationsMessageComponent","RichTextComponent","ContactInformationType","Phone","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","storeHoursDayPeriod","storeHoursDay","productDeliveryOptions","productDeliveryOption","PickUpMethodDropdownComponent","pickUpStatesProps","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","dataset","description","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","PickUpButtonComponent","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","preferredStoreAttribute","removePreferredStoreAttribute","_props$data$storeSele","renderStoreLocations","selectedLocationReference","_props$data$storeSele2","_props$locationListPr","renderStoreLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","Number","parseInt","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","Browser","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","viewport","_data$storeSelectorSt","module","exports","ReactDOM"],"sourceRoot":""}