{"version":3,"file":"static/js/c57fef72b85ee9bc1067.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/components/pickup-option-list.tsx?6da4","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/components/store-pickup-option-list.tsx?7091","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/components/mmx-store-selector-location-line-item/date-time-helpers.ts?4c51","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/components/mmx-store-selector-location-line-item/mmx-store-selector-location-line-item.components.tsx?3770","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/components/mmx-store-selector-location-lines.tsx?7f86","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/components/mmx-store-selector-search-form.tsx?8cbc","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/components/mmx-store-selector-small-components.tsx?69e4","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/components/selected-store/selected-store.tsx?7081","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/mmx-store-selector.props.autogenerated.ts?f69c","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/mmx-store-selector.tsx?2ce3","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-store-selector/mmx-store-selector.view.tsx?f629","webpack://Msdyn365.Commerce.Online.Memx/./src/themes/memoryexpress/definition-extensions/mmx-store-selector.ext.props.autogenerated.ts?2f8a","webpack://Msdyn365.Commerce.Online.Memx/./src/themes/memoryexpress/views/mmx-store-selector.view.tsx?785f","webpack://Msdyn365.Commerce.Online.Memx/./lib/mmx-store-selector/module-registration.js?1289","webpack://Msdyn365.Commerce.Online.Memx/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online.Memx/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 { 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 { 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, 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//mmx-feature: imports --start\r\nimport { StoreSelectorProductInfo } from '../mmx-store-selector-location-lines';\r\n//mmx-feature: imports --end\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 // mmx-feature: product selection stock check (product availability) --begin\r\n limitedStock: string;\r\n // mmx-feature: product selection stock check (product availability) --end\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 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 // mmx-feature: product selection stock check (product availability) --begin\r\n productInfo?: StoreSelectorProductInfo;\r\n productAvailability?: number;\r\n // mmx-feature: product selection stock check (product availability) --end\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 // mmx-feature: product selection stock check (product availability) --begin\r\n productAvailability,\r\n productInfo,\r\n // mmx-feature: product selection stock check (product availability) --end\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 // mmx-feature: product selection stock check (product availability) --begin\r\n /*\r\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\r\n */\r\n const resourceLabel = isInStock\r\n ? resources.inStock\r\n : productAvailability && productAvailability > 0\r\n ? resources.limitedStock\r\n : resources.outOfStock;\r\n // mmx-feature: product selection stock check --end\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 {storeName}\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 {/*mmx-feature: product selection stock check (product availability) --begin*/\r\n (productInfo?.isProductStocked !== false) && productAvailability && productAvailability > 0 ? (\r\n

\r\n Quantity at location: {productAvailability}\r\n

) : (<>)\r\n /*mmx-feature: product selection stock check (product availability) --end*/}\r\n {isCurrentLocation ? (\r\n

{resources.currentLocation}

\r\n ) : canSelectLocation ? (\r\n deliveryOptionList.length === 0 ? (\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 { IMmxStoreSelectorResources } from '../mmx-store-selector.props.autogenerated';\r\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './mmx-store-selector-location-line-item';\r\n\r\n\r\n// mmx-feature: non-stocked products\r\nexport interface StoreSelectorProductInfo {\r\n productItemQuantity?: number;\r\n isProductStocked?: boolean;\r\n}\r\n// mmx-feature: non-stocked products\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: IMmxStoreSelectorResources;\r\n preferredDistanceUnit?: 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\r\n // mmx-feature: product item quantity, non-stocked products --begin\r\n productInfo: StoreSelectorProductInfo;\r\n // mmx-feature: product item quantity, non-stocked products --end\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\r\n return (\r\n
\r\n {this._stores.map((store, index) => {\r\n // mmx-feature: product item quantity, non-stocked products --begin\r\n /*\r\n return this._renderStoreLocation(store, index);\r\n */\r\n return this._renderStoreLocation(store, index, this.props.productInfo);\r\n // mmx-feature: product item quantity, non-stocked products --end\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 // mmx-feature: product item quantity, non-stocked products, non-stocked products --begin\r\n /*\r\n private _renderStoreLocation(store: IFullOrgUnitAvailability, index: number): JSX.Element | undefined {\r\n */\r\n private _renderStoreLocation(\r\n store: IFullOrgUnitAvailability,\r\n index: number,\r\n productInfo?: StoreSelectorProductInfo\r\n ): JSX.Element | undefined {\r\n // mmx-feature: product item quantity, non-stocked products, non-stocked products --end\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 // mmx-feature: product selection stock check (item quantity) --begin\r\n const productAvailability =\r\n store?.OrgUnitAvailability?.ItemAvailabilities && store?.OrgUnitAvailability?.ItemAvailabilities.length > 0\r\n ? store.OrgUnitAvailability.ItemAvailabilities[0].AvailableQuantity\r\n : undefined;\r\n // mmx-feature: product selection stock check (item quantity) --end\r\n if (orgUnitLocation) {\r\n ++this.storeCounter;\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * 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 // mmx-feature: product selection stock check (item quantity), non-stocked products --begin\r\n /*\r\n private readonly _isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\r\n */\r\n private readonly _isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined, productInfo?: StoreSelectorProductInfo): boolean => {\r\n // mmx-feature: product selection stock check (item quantity), non-stocked products --end\r\n if (!this.props.enableOutOfStockCheck) {\r\n return true;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\r\n // mmx-feature: product selection stock check (item quantity), non-stocked products --begin\r\n /*\r\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > 0 : false;\r\n */\r\n const availableQuantityMinimum = productInfo?.productItemQuantity ?? 0;\r\n return (\r\n (itemAvailabilities[0].AvailableQuantity\r\n ? itemAvailabilities[0].AvailableQuantity >= availableQuantityMinimum || !productInfo?.isProductStocked\r\n : false) || !productInfo?.isProductStocked\r\n );\r\n // mmx-feature: product selection stock check (item quantity), non-stocked products --end\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: IMmxStoreSelectorResources): 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 // mmx-feature: product selection stock check (item quantity) --begin\r\n limitedStock: resources.limitedStockText,\r\n // mmx-feature: product selection stock check (item quantity) --end\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 };\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\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 },\r\n id,\r\n value,\r\n isMapDisabled,\r\n showAllStores,\r\n displayList,\r\n locatorView,\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 )}\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 { IMmxStoreSelectorResources, ITermsOfServiceLinkData } from '../mmx-store-selector.props.autogenerated';\r\n\r\nexport interface IStoreSelectorEmptyMessageProps {\r\n resources: IMmxStoreSelectorResources;\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\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: IMmxStoreSelectorResources;\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 '../mmx-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 * IMmxStoreSelector 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 selectStore = 'selectStore'\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 IMmxStoreSelectorConfig 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 className?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface IMmxStoreSelectorResources {\r\n searchPlaceholderText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n outOfStockText: string;\r\n inStockText: string;\r\n limitedStockText: string;\r\n selectedStoreLocationText: string;\r\n emptyLocationsText: string;\r\n selectStoreText: string;\r\n selectStoreNonPickupText: 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 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 IMmxStoreSelectorProps extends Msdyn365.IModule {\r\n resources: IMmxStoreSelectorResources;\r\n config: IMmxStoreSelectorConfig;\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/mmx-store-selector-location-line-item/date-time-helpers';\r\nimport { IMmxStoreSelectorData } from './mmx-store-selector.data';\r\nimport {\r\n IMmxStoreSelectorProps,\r\n IMmxStoreSelectorResources,\r\n mode as modeEnum,\r\n searchRadiusUnit as SearchRadiusUnit,\r\n style as styleEnum\r\n} from './mmx-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}\r\n\r\n/**\r\n * StoreSelector View Props Interface.\r\n */\r\nexport interface IStoreSelectorViewProps extends IMmxStoreSelectorProps {\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 // mmx-feature: product selection stock check (product availability) --begin\r\n limitedStock: string;\r\n // mmx-feature: product selection stock check (product availability) --end\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: IMmxStoreSelectorProps) {\r\n super(props);\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.state = { isSearchInProgress: true, searchTerm: '', isSeeAllStoreValue: false, filteredPickupMode: undefined };\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 //leaving name as is to minimize changes\r\n //mmx-feature --start\r\n /*\r\n const isLocatorView = modeDefault === modeEnum.findStores;\r\n */\r\n const isLocatorView = modeDefault === modeEnum.findStores || modeDefault === modeEnum.selectStore;\r\n //mmx-feature --end\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 // mmx-feature: product selection stock check (product availability), non-stocked products --begin\r\n const itemQuantity: number | undefined = storeSelectorStateManager?.context?.additionalProperties\r\n ? storeSelectorStateManager.context.additionalProperties['amountSelected']\r\n : undefined;\r\n const isStockedProduct: boolean | undefined = storeSelectorStateManager?.context?.additionalProperties\r\n ? storeSelectorStateManager.context.additionalProperties['isStockedProuct']\r\n : undefined;\r\n const productInfo = {\r\n productItemQuantity: itemQuantity,\r\n isProductStocked: isStockedProduct\r\n };\r\n // mmx-feature: product selection stock check (product availability),non-stocked products --end\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 IMmxStoreSelectorProps),\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 //mmx-feature --start\r\n modeDefault === modeEnum.selectStore ? 'simple-select-mode' : '',\r\n //mmx-feature --end\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 \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 //mmx-feature --start\r\n /*\r\n if (modeDefault === modeEnum.findStores) {\r\n */\r\n if (modeDefault === modeEnum.findStores || modeDefault === modeEnum.selectStore ) {\r\n //mmx-feature --end\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: IMmxStoreSelectorResources): 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 // mmx-feature: product selection stock check (product availability) --begin\r\n limitedStock: resources.limitedStockText,\r\n // mmx-feature: product selection stock check (product availability) --end\r\n\r\n currentLocation: resources.selectedStoreLocationText,\r\n //mmx-feature --start\r\n /*\r\n selectLocation: resources.selectStoreText\r\n */\r\n selectLocation: this.props.config.mode === modeEnum.pickupInStore ?\r\n resources.selectStoreText : resources.selectStoreNonPickupText,\r\n //mmx-feature --end\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, IStoreSelectorViewProps } from './index';\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","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IMmxStoreSelector 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 selectStore = 'selectStore'\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 IMmxStoreSelectorConfig 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 className?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface IMmxStoreSelectorResources {\r\n searchPlaceholderText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n outOfStockText: string;\r\n inStockText: string;\r\n limitedStockText: string;\r\n selectedStoreLocationText: string;\r\n emptyLocationsText: string;\r\n selectStoreText: string;\r\n selectStoreNonPickupText: 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 pickupDeliveryOptionErrorMessage: string;\r\n pickUpMethodLabel: string;\r\n distanceString: string;\r\n closeDistanceString: string;\r\n storeHoursDayPeriod: string;\r\n storeHoursDay: string;\r\n pickupOptionDropdownPlaceholderText: string;\r\n pickupOptionDropdownErrorText: 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 IMmxStoreSelectorProps extends Msdyn365.IModule {\r\n resources: IMmxStoreSelectorResources;\r\n config: IMmxStoreSelectorConfig;\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\nimport MsDyn365, { RichTextComponent } from '@msdyn365-commerce/core';\r\nimport {\r\n ContactInformationType,\r\n DeliveryOption,\r\n IDictionary,\r\n OrgUnitContact,\r\n OrgUnitLocation,\r\n StoreHours\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n buildStoreHours,\r\n IHoursDisplayInfo,\r\n ILocationHours,\r\n IStoreSelectorFoundLocationsMessage,\r\n IStoreSelectorLocationLineItemProps,\r\n IStoreSelectorLocationLineItemResources,\r\n IStoreSelectorViewProps,\r\n secondsToTime\r\n} from '@msdyn365-commerce-modules/store-selector';\r\nimport { ISelectedStoreViewProps } from '@msdyn365-commerce-modules/store-selector/src/modules/store-selector/components/selected-store/selected-store';\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n isMobile,\r\n Module,\r\n Node,\r\n TelemetryConstant,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n//mmx-feature: import --start\r\n/*\r\nimport { IStoreSelectorProps, IStoreSelectorResources } from '../definition-extensions/store-selector.ext.props.autogenerated';\r\n*/\r\nimport {\r\n IMmxStoreSelectorProps as IStoreSelectorProps,\r\n IMmxStoreSelectorResources as IStoreSelectorResources\r\n //mmx-feature: store selector mode --start\r\n , mode\r\n //mmx-feature: store selector mode --end\r\n} from '../definition-extensions/mmx-store-selector.ext.props.autogenerated';\r\n//mmx-feature: import --end\r\n\r\n/**\r\n * PickUpMethodComponent View Props Interface.\r\n */\r\nexport interface IPickupComponent extends IStoreSelectorLocationLineItemProps {\r\n pickUpStatesProps: IStoreSelectorViewProps;\r\n}\r\n\r\nexport interface IPickUpButtonComponent {\r\n attributes: IDictionary | undefined;\r\n onPickupInStoreClickHandler?(): void;\r\n}\r\n\r\n/**\r\n * Found Locations Message component in Store Selector.\r\n * @param props - The component props.\r\n * @returns The JSX Element.\r\n */\r\nconst StoreSelectorFoundLocationsMessageComponent: React.FC = props => {\r\n const { locations, searchRadius, resources, isSeeAllStore, preferredDistanceUnit } = props;\r\n if (locations) {\r\n const storeCountMessage =\r\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\r\n\r\n return (\r\n ${locations.length.toString()}`\r\n )\r\n : storeCountMessage\r\n .replace(\r\n '{count}',\r\n `${locations.length.toString()}`\r\n )\r\n .replace(\r\n '{radius}',\r\n `${searchRadius.toString()}`\r\n )\r\n }\r\n />\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Build distance string.\r\n * @param distance - The distance.\r\n * @param preferredDistanceUnit - The preferred distance unit.\r\n * @param resources - The module resources.\r\n * @param isLocationDisabled - True if location is disabled.\r\n * @returns The distance string.\r\n */\r\nconst buildDistanceString = (\r\n distance: number | undefined,\r\n preferredDistanceUnit: string,\r\n resources: IStoreSelectorResources & IStoreSelectorResources,\r\n isLocationDisabled?: boolean\r\n): string | undefined => {\r\n const closeDistance: number = 1;\r\n if (distance === undefined || isLocationDisabled) {\r\n return undefined;\r\n } else if (distance < closeDistance) {\r\n const closeDistanceString: string = resources.closeDistanceString;\r\n return closeDistanceString.replace('{preferredDistanceUnit}', preferredDistanceUnit);\r\n }\r\n const distanceAsString: string = resources.distanceString;\r\n return distanceAsString\r\n .replace('{preferredDistanceUnit}', preferredDistanceUnit)\r\n .replace('{distance}', Math.floor(distance).toString());\r\n};\r\n\r\n/**\r\n * Extract phone number.\r\n * @param contacts - Contacts array.\r\n * @returns Phone number.\r\n */\r\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\r\n if (!contacts) {\r\n return undefined;\r\n }\r\n\r\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === ContactInformationType.Phone && !contact.IsPrivate);\r\n\r\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\r\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\r\n\r\n if (primaryPhoneContact) {\r\n return primaryPhoneContact.Locator;\r\n }\r\n\r\n return allPhoneContacts[0].Locator;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Render Store Hours Day.\r\n * @param displayTime - Store Hours Information.\r\n * @param storeHoursDayPeriodString - The string for store hours day period.\r\n * @param storeHoursDayString - The string for store hours day period.\r\n * @returns JSX element with store hours day.\r\n */\r\nconst buildStoreHoursDay = (displayTime: IHoursDisplayInfo, storeHoursDayPeriodString: string, storeHoursDayString: string) => {\r\n return (\r\n ${displayTime.startDayShort}`)\r\n .replace(\r\n '{endDay}',\r\n `${displayTime.endDayShort}`\r\n )\r\n : storeHoursDayString.replace(\r\n '{startDay}',\r\n `${displayTime.startDayShort}`\r\n )\r\n }\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Render Store Hours.\r\n * @param storeHours - Store hours.\r\n * @param storeHoursList - Store hours list.\r\n * @param locationOpen - Location open.\r\n * @param resources - The module resources.\r\n * @returns JSX element with store hours.\r\n */\r\nconst renderStoreHours = (\r\n storeHours: StoreHours | undefined,\r\n storeHoursList: IHoursDisplayInfo[] | undefined,\r\n locationOpen: ILocationHours | undefined,\r\n resources: IStoreSelectorResources & IStoreSelectorResources\r\n): JSX.Element | null => {\r\n // First, use the store hours. This will allow listing day by day hours\r\n if (storeHours?.RegularStoreHours) {\r\n return (\r\n
\r\n {storeHoursList?.map(displayTime => (\r\n
\r\n {buildStoreHoursDay(displayTime, resources.storeHoursDayPeriod, resources.storeHoursDay)}\r\n
{displayTime.timeRange}
\r\n
\r\n ))}\r\n
\r\n );\r\n }\r\n\r\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\r\n const storeOpenFrom: string = locationOpen?.openFrom ? locationOpen.openFrom : '';\r\n const storeOpenTo: string = locationOpen?.openTo ? locationOpen.openTo : '';\r\n return (\r\n
\r\n {resources.storeHoursDayPeriod.replace('{startDay}', storeOpenFrom).replace('{endDay}', storeOpenTo)}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Match delivery options.\r\n * @param productDeliveryOptions - The list of product delivery options.\r\n * @param storePickUpOptionList - The list of store pick up options.\r\n * @returns Matched delivery option.\r\n */\r\nconst matchDeliveryOptions = (\r\n productDeliveryOptions: DeliveryOption[] | undefined,\r\n storePickUpOptionList: DeliveryOption[] | undefined\r\n): DeliveryOption[] => {\r\n if (!productDeliveryOptions) {\r\n return [] as DeliveryOption[];\r\n }\r\n return productDeliveryOptions\r\n .map(productDeliveryOption => storePickUpOptionList?.find(delivery => delivery.Code === productDeliveryOption.Code))\r\n .filter(productDeliveryOption => productDeliveryOption) as DeliveryOption[];\r\n};\r\n\r\n/**\r\n * PickUpMethod Resources Interface.\r\n */\r\nexport interface IPickUpButtonResources {\r\n pickupInStoreAriaLabel: string;\r\n pickupInStoreButtonText: string;\r\n pickupDeliveryOptionErrorMessage: string;\r\n}\r\n\r\n/**\r\n * PickUpMethod Resources Interface.\r\n */\r\nexport interface IPickUpMethodResources {\r\n selectStoreText: string;\r\n pickUpMethodLabel: string;\r\n pickUpOptionPlaceholder: string;\r\n pickupOptionDropdownError: string;\r\n pickupButtonAriaLabel: string;\r\n}\r\n\r\n/**\r\n * PickUp method dropdown component.\r\n * @param props - The view props.\r\n * @returns JSX Element.\r\n */\r\nconst PickUpMethodDropdownComponent = (props: IPickupComponent & IPickUpMethodResources) => {\r\n const {\r\n handlers,\r\n location,\r\n pickUpStatesProps,\r\n selectStoreText,\r\n pickUpMethodLabel,\r\n pickUpOptionPlaceholder,\r\n pickupOptionDropdownError,\r\n pickupButtonAriaLabel,\r\n productPickUpOptionList,\r\n storePickUpOptionList\r\n } = props;\r\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\r\n const [selectedStorePickUpOption, selectStorePickUpOption] = React.useState('');\r\n const [currentStorePickUpOption, setCurrentStorePickUpOption] = React.useState(pickUpOptionPlaceholder);\r\n const [isDropdownOpen, toggleDropdown] = React.useState(false);\r\n const [isError, setError] = React.useState(false);\r\n\r\n /**\r\n * Method to handle the store pickup option change.\r\n * @param event - Change Event.\r\n */\r\n const onChangeHandler = React.useCallback((event: React.MouseEvent) => {\r\n event.preventDefault();\r\n selectStorePickUpOption(event.currentTarget.value);\r\n setCurrentStorePickUpOption(event.currentTarget.dataset.description ? event.currentTarget.dataset.description : '');\r\n toggleDropdown(false);\r\n setError(false);\r\n }, []);\r\n\r\n /**\r\n * Method to render store location line pick up button.\r\n * @param filteredDeliveryMode - Filtered Delivery Mode.\r\n * @returns JSX Element.\r\n */\r\n const renderLocationLinePickupButton = (filteredDeliveryMode: DeliveryOption | undefined) => {\r\n return filteredDeliveryMode !== undefined ? (\r\n
\r\n \r\n {filteredDeliveryMode.Description}\r\n \r\n
\r\n ) : null;\r\n };\r\n\r\n /**\r\n * Method to handle the store pickup option submit.\r\n */\r\n const onClickHandler = React.useCallback(() => {\r\n if (!StringExtensions.isNullOrEmpty(selectedStorePickUpOption)) {\r\n handlers.onSelected(location, selectedStorePickUpOption);\r\n } else if (pickUpStatesProps.state.filteredPickupMode !== undefined) {\r\n handlers.onSelected(location, pickUpStatesProps.state.filteredPickupMode);\r\n } else {\r\n toggleDropdown(false);\r\n setError(true);\r\n }\r\n }, [location, selectedStorePickUpOption, handlers, pickUpStatesProps.state.filteredPickupMode]);\r\n\r\n const handleDropdownToggle = React.useCallback(() => {\r\n toggleDropdown(!isDropdownOpen);\r\n setError(false);\r\n }, [isDropdownOpen]);\r\n\r\n const filterDeliveryOption = deliveryOptionList.find(\r\n (delivery: DeliveryOption) => delivery.Code === pickUpStatesProps.state.filteredPickupMode\r\n );\r\n\r\n const pickupInStoreButtonText: string = selectStoreText;\r\n const filteredDeliveryMode: DeliveryOption | undefined =\r\n pickUpStatesProps.state.filteredPickupMode !== undefined ? filterDeliveryOption : undefined;\r\n\r\n return (\r\n \r\n
{pickUpMethodLabel}
\r\n {pickUpStatesProps.state.filteredPickupMode === undefined ? (\r\n
\r\n \r\n {currentStorePickUpOption}\r\n \r\n
    \r\n {deliveryOptionList.map((delivery: DeliveryOption) => (\r\n \r\n \r\n {delivery.Description}\r\n \r\n \r\n ))}\r\n
\r\n
{pickupOptionDropdownError}
\r\n
\r\n ) : (\r\n renderLocationLinePickupButton(filteredDeliveryMode)\r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * PickUp button component.\r\n * @param props - The view props.\r\n * @returns JSX Element.\r\n */\r\nconst PickUpButtonComponent = (props: IPickUpButtonComponent & IPickUpButtonResources) => {\r\n const { pickupInStoreAriaLabel, pickupInStoreButtonText, pickupDeliveryOptionErrorMessage, attributes } = props;\r\n const [isError, setError] = React.useState(false);\r\n const onPickupButtonClickHandler = () => () => {\r\n setError(true);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {pickupInStoreButtonText}\r\n \r\n
\r\n {pickupDeliveryOptionErrorMessage}\r\n
\r\n \r\n );\r\n};\r\n\r\n//mmx-feature: --start\r\nconst StoreSelectButtonComponent = (props: IPickUpButtonComponent & IPickUpButtonResources\r\n & {\r\n onSelectLocationCallback: (location: OrgUnitLocation | undefined) => Promise,\r\n orgUnitLocation: OrgUnitLocation\r\n }) => {\r\n const { pickupInStoreAriaLabel, pickupInStoreButtonText, attributes, onSelectLocationCallback, orgUnitLocation } = props;\r\n const onLocationSelect = () => () => {\r\n onSelectLocationCallback(orgUnitLocation);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {pickupInStoreButtonText}\r\n \r\n \r\n );\r\n};\r\n//mmx-feature: --end\r\n\r\n/**\r\n * Method to render store location line item.\r\n * @param locationLineItem - The Location Line item view props.\r\n * @param props - The view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderStoreLocationLineItem = (\r\n locationLineItem: IStoreSelectorLocationLineItemProps,\r\n props: IStoreSelectorViewProps & IStoreSelectorProps\r\n) => {\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\r\n hideStockStatus,\r\n index,\r\n isInStock,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n location,\r\n resources,\r\n storeHours,\r\n storeHoursList,\r\n stockStatusLabel,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\r\n storeLocatorView,\r\n telemetryContent\r\n } = locationLineItem;\r\n const storeName = location.OrgUnitName;\r\n const distanceAsString: string | undefined = buildDistanceString(\r\n location.Distance,\r\n locationLineItem.preferredDistanceUnit,\r\n props.resources,\r\n locationLineItem.isLocationDisabled\r\n );\r\n const storeAddress: string | undefined = location.Address;\r\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\r\n\r\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\r\n const stockStatus = stockStatusLabel ? stockStatusLabel : resourceLabel;\r\n const stockText: string | undefined = hideStockStatus ? undefined : stockStatus;\r\n\r\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n\r\n //mmx-feature: storeSelector mode --start\r\n const isStoreSelectorMode = props.config.mode === mode.selectStore;\r\n //mmx-feature: storeSelector mode --end\r\n\r\n /**\r\n * Method to handle the change for preferred store.\r\n * @returns Void.\r\n */\r\n const onSetPreferredStoreClickHandler = () => {\r\n locationLineItem.handlers.onSetAsPreferredStore(locationLineItem.location.OrgUnitNumber);\r\n };\r\n\r\n /**\r\n * Method to handle the removal of the preferred store.\r\n * @returns Void.\r\n */\r\n const onRemovePreferredStoreClickHandler = async (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n locationLineItem.handlers.onRemovePreferredStore();\r\n await props.data.storeSelectorStateManager.result?.setSelectedStoreLocationId(undefined);\r\n };\r\n\r\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\r\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\r\n const preferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\r\n const removePreferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n
\r\n
\r\n {storeLocatorView && {index}}\r\n {storeName}\r\n {distanceAsString ? {distanceAsString} : false}\r\n
\r\n
\r\n
\r\n

{locationLineItem.resources.contactInfoHeader}

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

{locationLineItem.resources.storeHoursHeader}

\r\n {renderStoreHours(storeHours, storeHoursList, locationLineItem.locationOpen, props.resources)}\r\n
\r\n {//mmx-feature: store selector mode --start\r\n isStoreSelectorMode ? <> :\r\n !storeLocatorView && !hideStockStatus && (\r\n /*\r\n {!storeLocatorView && !hideStockStatus && (\r\n */\r\n /*mmx-feature: store selector mode --end*/\r\n
\r\n

{resources.availabilityInfoHeader}

\r\n {stockText &&

{stockText}

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

{resources.currentLocation}

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

{storeSelectorViewProps.resources.contactText}

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

{storeSelectorViewProps.resources.timeText}

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

{productAvailability}

\r\n {stockStatus &&

{stockStatus}

}\r\n
\r\n )}\r\n
\r\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\r\n {canSelectPickUpMethod}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Store Selector View.\r\n * @param props - The view props.\r\n * @returns The JSX Element.\r\n */\r\nconst StoreSelectorViewComponent: React.FC> = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Store-Selector.tsx file\r\n const {\r\n BodyContainerProps,\r\n storeResultContainerProps,\r\n FooterContainerProps,\r\n HeaderContainerProps,\r\n HeaderProps,\r\n ModuleProps,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n maps,\r\n locationsList,\r\n noLocationsMessage,\r\n terms,\r\n storeDetailsModal,\r\n selectedLocation,\r\n bodyWrapperProps,\r\n data,\r\n context\r\n } = props;\r\n const selectedLocationReference = React.useRef(null);\r\n const [isDesktopPort, setIsDesktopPort] = React.useState(false);\r\n\r\n const isDesktopViewport = React.useCallback(() => {\r\n const portView = isMobile({ variant: VariantType.Browser, context: context.request });\r\n const isDesktopPorts = portView === 'md' || portView === 'xl' || portView === 'lg';\r\n setIsDesktopPort(isDesktopPorts);\r\n }, [context]);\r\n\r\n React.useEffect(() => {\r\n if (props.locationsList) {\r\n /**\r\n * Method to handle scrolling.\r\n */\r\n const scrollIntoView = () => {\r\n const selectedLocationDiv = (selectedLocationReference as React.RefObject).current;\r\n if (selectedLocationDiv !== null) {\r\n const offset = selectedLocationDiv.getBoundingClientRect();\r\n const parent = selectedLocationDiv.parentElement?.parentElement;\r\n if (parent && offset) {\r\n const totalHeight = parent.scrollTop + offset.top;\r\n parent.scrollTop = totalHeight - parent.clientHeight;\r\n }\r\n }\r\n };\r\n scrollIntoView();\r\n }\r\n }, [props.locationsList]);\r\n\r\n React.useEffect(() => {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('resize', isDesktopViewport);\r\n }\r\n isDesktopViewport();\r\n }, [isDesktopViewport]);\r\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\r\n\r\n const isDesktopView = viewport === 'md' || viewport === 'lg' || viewport === 'xl';\r\n\r\n if (!isDesktopView || !isDesktopPort) {\r\n return (\r\n \r\n {HeaderProps}\r\n \r\n \r\n {locationsMessage && (\r\n \r\n )}\r\n {search}\r\n \r\n \r\n {state.isSearchInProgress ? (\r\n spinner\r\n ) : (\r\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\r\n )}\r\n \r\n {maps}\r\n \r\n {selectedLocation && renderSelectedStore(selectedLocation, props)}\r\n \r\n \r\n \r\n \r\n {terms}\r\n \r\n );\r\n }\r\n return (\r\n \r\n {HeaderProps}\r\n \r\n \r\n {locationsMessage && (\r\n \r\n )}\r\n {search}\r\n {state.isSearchInProgress ? (\r\n spinner\r\n ) : (\r\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\r\n )}\r\n \r\n \r\n {maps}\r\n \r\n \r\n {terms}\r\n \r\n );\r\n};\r\n\r\nexport default StoreSelectorViewComponent;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['mmx-store-selector'] = {\n c: () => require('partner/modules/mmx-store-selector/mmx-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: 'mmx-store-selector',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mmx-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|mmx-store-selector|mmx-store-selector'] = {\n c: () => require('partner/modules/mmx-store-selector/mmx-store-selector.view.tsx'),\n cn: '__local__-__local__-mmx-store-selector'\n };\nviewDictionary['__local__|__local__|themes|memoryexpress|views|mmx-store-selector'] = {\n c: () => require('partner/themes/memoryexpress/views/mmx-store-selector.view.tsx'),\n cn: '__local__-__local__-mmx-store-selector'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["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","undefined","onKeyDown","secondsToTime","seconds","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","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","productAvailability","productInfo","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","limitedStock","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","contactInfoHeader","storeHoursHeader","renderStoreHours","RegularStoreHours","displayTime","JSON","stringify","title","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","availabilityInfoHeader","isProductStocked","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","_productInfo$productI","availableQuantityMinimum","productItemQuantity","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","i","_availabilityWithHour","OrgUnitAvailability","OrgUnitLocation","InventoryLocationId","InventLocationId","StockLevelLabel","_mapResources","contactText","timeText","availabilityText","storeHoursClosedText","outOfStockText","inStockText","limitedStockText","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","classnames","show","displayList","store","_renderStoreLocation","_store$OrgUnitAvailab","_store$OrgUnitAvailab2","_store$OrgUnitAvailab3","deliveryOptions","OrgUnitPickUpDeliveryModes","ItemAvailabilities","_store$OrgUnitAvailab4","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","id","isMapDisabled","showAllStores","name","autoComplete","onSubmit","type","searchInputAriaLabel","placeholder","onKeyUp","color","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","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","selectStore","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","RecordId","warning","selectStoreNonPickupText","selectedLocation","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","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","_storeSelectorStateMa4","_storeSelectorStateMa5","_sortLocation","_storeSelectorStateMa6","_storeSelectorStateMa7","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","app","appConfig","slots","maps","mapSlot","isMobileDevice","isMobile","variant","VariantType","Viewport","isInlineView","isLocatorView","listMapViewState","canShowLocationView","isMapModuleLoaded","additionalProperties","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","spinner","locationsList","outOfStockThreshold","noLocationsMessage","terms","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","renderView","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","selectedStoreLocation","lineResources","locationOpen","openFrom","openTo","Node","renderDeliveryOptions","Module","renderBody","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","StringExtensions","isNullOrEmpty","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","PickUpButtonComponent","StoreSelectButtonComponent","onSelectLocationCallback","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","isStoreSelectorMode","preferredStoreAttribute","removePreferredStoreAttribute","_props$data$storeSele","renderStoreLocations","selectedLocationReference","_props$data$storeSele2","_props$locationListPr","renderStoreLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","storeSelectorButton","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","Number","parseInt","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","orgUnitNumber","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","Browser","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","MsDyn365","isBrowser","viewport","_data$storeSelectorSt","displayMap","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","module","exports","ReactDOM"],"sourceRoot":""}