{"version":3,"file":"static/js/9d62cb3891642e6f1bd3.bundle.js","mappings":"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","sources":["webpack://goodwill-loyalty/./lib/store-selector/module-registration.js?8817","webpack://goodwill-loyalty/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://goodwill-loyalty/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://goodwill-loyalty/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://goodwill-loyalty/./src/modules/store-selector/components/pickup-option-list.tsx?dae0","webpack://goodwill-loyalty/./src/modules/store-selector/components/store-pickup-option-list.tsx?7a25","webpack://goodwill-loyalty/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?fe27","webpack://goodwill-loyalty/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?923d","webpack://goodwill-loyalty/./src/modules/store-selector/components/store-selector-location-lines.tsx?87ff","webpack://goodwill-loyalty/./src/modules/store-selector/components/store-selector-search-form.tsx?fb9a","webpack://goodwill-loyalty/./src/modules/store-selector/components/store-selector-small-components.tsx?4335","webpack://goodwill-loyalty/./src/modules/store-selector/components/selected-store/selected-store.tsx?bfbc","webpack://goodwill-loyalty/./src/modules/store-selector/store-selector.tsx?e416","webpack://goodwill-loyalty/./src/modules/store-selector/store-selector.view.tsx?71a6","webpack://goodwill-loyalty/external var \"React\"?0d3b","webpack://goodwill-loyalty/external var \"ReactDOM\"?853b"],"sourcesContent":["const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['store-selector'] = {\n c: () => require('@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector'),\n $type: 'containerModule',\n da: [{name:'availabilitiesWithHours', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby', runOn: 1},{name:'storeLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information', runOn: 1},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'store-selector',\n p: 'store-selector',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['@msdyn365-commerce-modules|store-selector|modules|store-selector|store-selector'] = {\n c: () => require('@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector.view.js'),\n cn: '@msdyn365-commerce-modules-store-selector-store-selector'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport {\n IListMapViewState,\n ILoadMapApiInput,\n IStoreInfo,\n IStoreSelectionStateContext,\n IStoreSelectorLocation,\n IStoreSelectorStateManager\n} from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(\n storeId?: string,\n storeName?: string | undefined,\n writeToCookie: boolean = false,\n latitude?: number,\n longitude?: number\n ): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (\n !searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled\n ) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl =\n actionContext.requestContext.app &&\n actionContext.requestContext.app.config &&\n actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${\n geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT\n }/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${\n input.market ? `&setMkt=${input.market}` : ''\n }`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\n });\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Interface Pickup option list.\n */\nexport interface IPickUpOptionListProps {\n pickupListOptionMenuText: string;\n pickupmodeList?: DeliveryOption[];\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Interface pickup option list state.\n */\nexport interface IPickOptionListState {\n expandSiteOptions: boolean;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class PickUpOptionList extends React.PureComponent {\n private readonly _pickupListOptionMenu: React.RefObject;\n\n private readonly _pickupListOptionButton: React.RefObject;\n\n private readonly eventsToBeBind = ['click', 'touchstart'];\n\n public constructor(props: IPickUpOptionListProps) {\n super(props);\n this._renderDeliveryOptions = this._renderDeliveryOptions.bind(this);\n this._pickupListOptionMenu = React.createRef();\n this._pickupListOptionButton = React.createRef();\n this.state = {\n expandSiteOptions: false\n };\n }\n\n public componentDidMount(): void {\n for (const event of this.eventsToBeBind) {\n window.addEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public componentWillUnmount(): void {\n for (const event of this.eventsToBeBind) {\n window.removeEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public render(): JSX.Element {\n const { pickupListOptionMenuText, pickupmodeList } = this.props;\n\n return (\n
\n \n {pickupListOptionMenuText}\n \n \n {this.state.expandSiteOptions ? (\n
    \n {pickupmodeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Handle the document click.\n * @param event -- Event object.\n */\n private readonly handleDocumentClick = (event: Event): void => {\n const htmlElement = event.target as HTMLElement;\n if (\n !(\n (this._pickupListOptionButton.current !== null &&\n (event.target === this._pickupListOptionButton.current ||\n this._pickupListOptionButton.current.contains(htmlElement))) ||\n (this._pickupListOptionMenu.current !== null &&\n (event.target === this._pickupListOptionMenu.current || this._pickupListOptionMenu.current.contains(htmlElement)))\n )\n ) {\n this.setState({\n expandSiteOptions: false\n });\n }\n };\n\n private _renderDeliveryOptions(event: React.MouseEvent): void {\n event.stopPropagation();\n const isExpandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !isExpandSiteOptionsState\n });\n }\n\n /**\n * Select Delivery option.\n * @param event -- Event Object.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode && deliveryCode.length > 0) {\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Store Pickup option list interface.\n */\nexport interface IStorePickUpOptionListProps {\n productPickupListOptionMenuText?: string;\n productPickupModeList?: DeliveryOption[];\n defaultOptionText?: string;\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Store Pickup option state interface.\n */\nexport interface IStorePickOptionListState {\n isFilterExpanded: boolean;\n selectedPickupMode?: string;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class StorePickUpOptionList extends React.PureComponent {\n private readonly _storePickupListOptionMenu: React.RefObject;\n\n public constructor(props: IStorePickUpOptionListProps) {\n super(props);\n this._storePickupListOptionMenu = React.createRef();\n this.state = {\n isFilterExpanded: false,\n selectedPickupMode: ''\n };\n }\n\n public render(): JSX.Element {\n const { productPickupListOptionMenuText, productPickupModeList, defaultOptionText } = this.props;\n const selectedPickupModeDesc = defaultOptionText\n ? defaultOptionText\n : productPickupModeList?.find((delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\n const role = 'menu';\n return (\n
\n \n {this.state.isFilterExpanded ? (\n
    \n {productPickupModeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Method to call when drop dwon get selected.\n */\n private readonly _rendeDeliveryOptions = () => {\n const isExpandOptionsState = this.state.isFilterExpanded;\n this.setState({\n isFilterExpanded: !isExpandOptionsState\n });\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onKeyDown = async (event: React.KeyboardEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\n\nimport { IStoreSelectorLocationLineItemResources } from '.';\n\nexport interface IHoursDisplayInfo {\n startDayShort: string;\n startDayFull: string;\n endDayShort?: string;\n endDayFull?: string;\n timeRange: string;\n}\n\ninterface IHoursInfo {\n isClosed: boolean;\n openTime?: number;\n closeTime?: number;\n}\n\ntype DayType = 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN';\n\nexport const secondsToTime = (seconds: number | undefined): string | undefined => {\n if (seconds === undefined) {\n return undefined;\n }\n let hours = Math.floor(seconds / (60 * 60));\n const ampm = hours >= 12 ? 'pm' : 'am';\n hours %= 12;\n hours = hours ? hours : 12;\n const divisorForMinutes = seconds % (60 * 60);\n const minutes = Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\n return `${hours}:${minutes} ${ampm}`;\n};\n\nconst getShortTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.monday;\n case 'TUE':\n return resources.days.tuesday;\n case 'WED':\n return resources.days.wednesday;\n case 'THU':\n return resources.days.thursday;\n case 'FRI':\n return resources.days.friday;\n case 'SAT':\n return resources.days.saturday;\n default:\n // Case 'SUN':\n return resources.days.sunday;\n }\n};\n\nconst getFullTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.mondayFull;\n case 'TUE':\n return resources.days.tuesdayFull;\n case 'WED':\n return resources.days.wednesdayFull;\n case 'THU':\n return resources.days.thursdayFull;\n case 'FRI':\n return resources.days.fridayFull;\n case 'SAT':\n return resources.days.saturdayFull;\n default:\n // Case 'SUN':\n return resources.days.sundayFull;\n }\n};\n\nconst buildHoursDisplayInfo = (\n startDay: DayType,\n endDay: DayType,\n hoursInfo: string,\n resources: IStoreSelectorLocationLineItemResources\n): IHoursDisplayInfo => {\n return {\n startDayShort: getShortTimeString(startDay, resources),\n startDayFull: getFullTimeString(startDay, resources),\n endDayShort: startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,\n endDayFull: startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,\n timeRange: hoursInfo\n };\n};\n\nconst shouldMergeLines = (firstLine: IHoursInfo, secondLine: IHoursInfo): boolean => {\n if (firstLine.isClosed && secondLine.isClosed) {\n return true;\n }\n\n if (!firstLine.isClosed && !secondLine.isClosed) {\n return firstLine.openTime === secondLine.openTime && firstLine.closeTime === secondLine.closeTime;\n }\n\n return false;\n};\n\nconst getStoreHoursData = (storeHours: RegularStoreHours, dateForLookup: string): IHoursInfo => {\n return {\n isClosed: get(storeHours, `IsClosedOn${dateForLookup}`, false),\n openTime: get(storeHours, `${dateForLookup}OpenTime`, undefined),\n closeTime: get(storeHours, `${dateForLookup}CloseTime`, undefined)\n };\n};\n\nconst buildStoreHoursString = (hoursInfo: IHoursInfo, resources: IStoreSelectorLocationLineItemResources): string => {\n if (hoursInfo.isClosed) {\n return resources.closedText;\n }\n const openFrom: string | undefined = secondsToTime(hoursInfo.openTime);\n const openTo: string | undefined = secondsToTime(hoursInfo.closeTime);\n\n return `${openFrom}–${openTo}`;\n};\n\nexport const buildStoreHours = (storeHours: RegularStoreHours, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo[] => {\n const storeHoursList: IHoursDisplayInfo[] = [];\n\n const mondayHours = getStoreHoursData(storeHours, 'Monday');\n const tuesdayHours = getStoreHoursData(storeHours, 'Tuesday');\n const wednesdayHours = getStoreHoursData(storeHours, 'Wednesday');\n const thursdayHours = getStoreHoursData(storeHours, 'Thursday');\n const fridayHours = getStoreHoursData(storeHours, 'Friday');\n const saturdayHours = getStoreHoursData(storeHours, 'Saturday');\n const sundayHours = getStoreHoursData(storeHours, 'Sunday');\n\n let periodStart: DayType = 'MON';\n let periodEnd: DayType = 'MON';\n\n if (!shouldMergeLines(mondayHours, tuesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(mondayHours, resources), resources));\n\n periodStart = 'TUE';\n }\n periodEnd = 'TUE';\n\n if (!shouldMergeLines(tuesdayHours, wednesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(tuesdayHours, resources), resources));\n\n periodStart = 'WED';\n }\n periodEnd = 'WED';\n\n if (!shouldMergeLines(wednesdayHours, thursdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(wednesdayHours, resources), resources));\n\n periodStart = 'THU';\n }\n periodEnd = 'THU';\n\n if (!shouldMergeLines(thursdayHours, fridayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(thursdayHours, resources), resources));\n\n periodStart = 'FRI';\n }\n periodEnd = 'FRI';\n\n if (!shouldMergeLines(fridayHours, saturdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(fridayHours, resources), resources));\n\n periodStart = 'SAT';\n }\n periodEnd = 'SAT';\n\n if (!shouldMergeLines(saturdayHours, sundayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(saturdayHours, resources), resources));\n\n periodStart = 'SUN';\n }\n periodEnd = 'SUN';\n\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(sundayHours, resources), resources));\n\n return storeHoursList;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\n\n/**\n * Store Locator line item resources.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n\n closedText: string;\n\n outOfStock: string;\n inStock: string;\n\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * Store Locator line item props.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n };\n}\n\n/**\n * Store Locator line item action component.\n */\nconst storeSelectorLocationLineItemComponentActions = {\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\n props.handlers.onSelected(props.location, deliveryMode);\n },\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\n },\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onRemovePreferredStore();\n }\n};\n\n/**\n * Function to render store hours.\n * @param storeHours - Store Hours object.\n * @param location - Store Unit.\n * @param resources - Resources.\n * @returns - Jsx element.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n location: OrgUnitLocation,\n resources: IStoreSelectorLocationLineItemResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day houts\n if (storeHours?.RegularStoreHours) {\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\n\n return (\n
\n {storeHoursList.map(displayTime => (\n
\n {displayTime.endDayShort ? (\n
\n {displayTime.startDayShort}–\n {displayTime.endDayShort}\n
\n ) : (\n
\n {displayTime.startDayShort}\n
\n )}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string | undefined = secondsToTime(location.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\n\n return (\n
\n {storeOpenFrom}-{storeOpenTo}\n
\n );\n};\n\n/**\n * Function to retrun distance measure unit.\n * @param distance - Store location within radius.\n * @param preferredDistanceUnit - Unit configuration.\n * @param isLocationDisabled - Flag to check user location.\n * @returns - Unit of distance.\n */\nexport const buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n isLocationDisabled?: boolean\n): string | undefined => {\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < 1) {\n return `(<1 ${preferredDistanceUnit})`;\n }\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\n};\n\n/**\n * Function to store contact.\n * @param contacts - Store location within radius.\n * @returns - Return primary contact number of store.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupInStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\n return Promise.resolve();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: IStoreSelectorLocationLineItemProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns DeliveryOptionList.\n */\nexport const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n const deliveryOption: DeliveryOption[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n });\n\n return deliveryOption;\n};\n\n/**\n * Renders store location line items.\n * @param props - Store location line items props.\n * @returns - HTML.\n */\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\n const {\n hideStockStatus,\n isCurrentLocation,\n isInStock,\n location,\n resources,\n storeHours,\n stockStatusLabel,\n storeLocatorView,\n index,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n shouldShowIndex\n } = props;\n\n const storeName: string | undefined = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = hideStockStatus || isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n /* eslint-disable prettier/prettier */\n return (\n
\n
\n {(shouldShowIndex || storeLocatorView) && {index}}\n {storeName}\n {distanceAsString ? \n {' '}\n {distanceAsString}\n : false}\n
\n
\n
\n

{resources.contactInfoHeader}

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

{resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

\n {stockText &&

{stockText}

}\n {isCurrentLocation ? (\n

{resources.currentLocation}

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

{resources.emptyLocationsText}

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