{"version":3,"sources":["webpack:///src/modules/store-selector/store-selector.view.tsx?b873","webpack:///src/index.ts?c6ae","webpack:///src/modules/store-selector/components/selected-store/selected-store.tsx?8d1a","webpack:///src/modules/store-selector/store-selector.tsx?ce13","webpack:///src/store-selector-state-manager/base-store-selector-state-manager.ts?edbe","webpack:///src/store-selector-state-manager/map-store-selector-state-manager.ts?d1f8","webpack:///src/store-selector-state-manager/store-selector-state-manager-data-action.ts?22fb","webpack:///src/modules/store-selector/components/store-pickup-option-list.tsx?27e0","webpack:///src/modules/store-selector/components/store-selector-location-lines.tsx?0668","webpack:///src/modules/store-selector/components/store-selector-search-form.tsx?1a99","webpack:///src/modules/store-selector/components/store-selector-small-components.tsx?c26d","webpack:///external \"React\"?c481","webpack:///src/modules/store-selector/components/pickup-option-list.tsx?9a9c","webpack:///external \"ReactDOM\"?4b2d","webpack:///./lib/store-selector/module-registration.js?8817","webpack:///src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?5a50","webpack:///src/modules/adventureworks/views/store-selector.view.tsx?1470","webpack:///src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?89f3"],"names":["renderSelectedStore","props","storeDetailsMain","storeHeader","storeName","storeDetailsCloseButton","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","isCurrentLocation","currentLocation","isPreferredStore","preferredStoreButton","removePreferredStoreButton","React","Node","Object","assign","canSelectLocation","deliveryOptions","pickUpDeliveryOptionButton","pickupModes","ArrayExtensions","hasElements","renderDeliveryOptions","StoreSelectorView","FooterContainerProps","HeaderContainerProps","HeaderProps","ModuleProps","terms","Module","BodyContainerProps","locationsMessage","search","state","spinner","locationsList","noLocationsMessage","maps","bodyWrapperProps","storeResultContainerProps","mapContainerProps","isMobileView","storeDetailsModal","selectedLocation","isSearchInProgress","renderBody","onPickupInStoreClickHandler","_props$selectedStore","selectedStore","OrgUnitAvailability","OrgUnitLocation","handlers","onSelected","onSetPreferredStoreClickHandler","_props$selectedStore2","onSetAsPreferredStore","OrgUnitNumber","onChangeHandler","async","_props$selectedStore3","deliveryCode","Promise","resolve","removePreferredStoreHandler","onRemovePreferredStore","onPickupModeSelectHandler","pickupMode","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","renderPickupModes","deliveryOptionList","pickupInStoreButtonText","pickupInStoreAriaLabel","undefined","filteredPickupMode","createElement","PickUpOptionList","pickupListOptionMenuText","pickupmodeList","onChange","className","onClick","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","isInStock","resources","stockStatusLabel","preferredStoreLocationId","isPreferredStoreEnabled","isLocationDisabled","telemetryContent","storePickUpOptionList","productPickUpOptionList","preferredDistanceUnit","parentClassName","OrgUnitName","location","distanceAsString","buildDistanceString","Distance","resourceLabel","inStock","outOfStock","stockLabel","stockText","selectLocation","selectLocationAriaLabelFormat","replace","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","attributes","getTelemetryAttributes","contentAction","etext","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","matchDeliveryOptions","tag","Button","availabilityInfoHeader","role","preferredStoreAriaLabel","preferredStoreText","setAsPreferredStoreTextAriaLabel","setAsPreferredStoreText","StoreSelector","constructor","super","shouldHideInventory","preferredStore","hasEnabledOutOfStockCheck","shouldDisplayList","_ref","data","availabilitiesWithHours","result","storeSelectorStateManager","storeLocations","this","context","selectedStoreLocationId","find","store","_store$OrgUnitAvailab","orgUnitLocation","selectedStoreResources","_mapResources","_selectedStore$OrgUni3","selectedProps","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","ItemAvailabilities","_stockInventoryLabel","StoreId","OrgUnitPickUpDeliveryModes","DeliveryOptions","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","handleLinkTextChange","event","config","termsOfServiceLink","linkText","target","value","handleHeadingChange","heading","onShowAllStoresHandler","_getAndUpdateStoreLocation","setState","onFilterLocations","stores","filter","_location$OrgUnitPick","some","deliveryOption","Code","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","telemetry","actionContext","requestContext","channel","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","_objectSpread","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","id","_onSuggestionSelected","errorCallback","debug","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","storeId","cookies","mode","_store$OrgUnitAvailab2","setPreferredStoreLocation","isConsentGiven","Latitude","Longitude","clearPreferredStore","setSelectedStoreLocationId","_setSelectedStore","searchTerm","isSeeAllStoreValue","geoLocate","trim","_updateLocations","latitude","longitude","shouldShowAllStores","_navigator","style","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","error","PERMISSION_DENIED","timeout","_closeDialog","_storeSelectorStateMa","parentElementRef","current","focus","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","input","onLocationSelected","preferredLocationId","storeLocationList","_sortStores","orgUnitStoreInformation","showMapViewLink","isDialog","product","setOrgUnitStoreInformation","catch","message","radius","lookupRadius","searchRadiusUnit","calRadius","distanceUnitValue","modeDefault","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","RecordId","warning","deliveryMode","contactInfoHeader","contactText","storeHoursHeader","timeText","availabilityText","closedText","storeHoursClosedText","outOfStockText","inStockText","selectedStoreLocationText","selectStoreText","selectStoreAriaFormatText","days","monday","storeHoursMondayText","tuesday","storeHoursTuesdayText","wednesday","storeHoursWednesdayText","thursday","storeHoursThursdayText","friday","storeHoursFridayText","saturday","storeHoursSaturdayText","sunday","storeHoursSundayText","mondayFull","storeHoursMondayFullText","tuesdayFull","storeHoursTuesdayFullText","wednesdayFull","storeHoursWednesdayFullText","thursdayFull","storeHoursThursdayFullText","fridayFull","storeHoursFridayFullText","saturdayFull","storeHoursSaturdayFullText","sundayFull","storeHoursSundayFullText","hasEnableOutOfStockCheck","itemAvailabilities","AvailableQuantity","ProductInventoryInformation","index","length","_isInStock$OrgUnitAva","InventoryLocationId","InventLocationId","StockLevelLabel","getTelemetryObject","request","telemetryPageName","friendlyName","storeCounter","_this$props$data$stor6","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$context","setTimeout","reaction","_this$props$data$stor2","_this$props$data$stor3","_this$props$data$stor4","_this$props$data$stor5","loadMapApi","key","BingMapsEnabled","lang","locale","market","_this$props$data$stor7","_this$props$data$stor8","_this$props$context$a","_this$props$data$stor9","when","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","isSameContext","shouldComponentUpdate","render","_storeSelectorStateMa2","_storeSelectorStateMa3","_sortLocation","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","shouldSetAsPreferredStore","showAllStores","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","app","appConfig","slots","mapSlot","isMobileDevice","isMobile","variant","VariantType","Viewport","isMapDisabled","isInlineView","isLocatorView","listMapViewState","displayList","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","milesShortText","sortLocation","isEnableOutofStock","enableStockCheck","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","viewProps","Modal","moduleProps","classname","autoFocus","fade","isOpen","onClosed","horizontalPosition","verticalPosition","toggle","ModalHeader","Msdyn365","text","editProps","onEdit","ModalFooter","ModalBody","StoreSelectorFoundLocationsMessage","locations","searchRadius","isSeeAllStore","StoreSelectorSearchForm","performSearch","searchTermChanged","onShowAllStores","onToggleListMapViewState","locatorView","productPickUpDeliveryOptions","filterPickupModeSelected","hasEnabledPickupFilterToShowStore","StoreSelectorWaiting","StoreSelectorLocationLines","outOfStockThreshold","enableOutOfStockCheck","storeLocatorView","shouldShowIndex","StoreSelectorEmptyMessage","StoreSelectorTermsOfService","link","onTextChange","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","renderView","_value$OrgUnitAvailab","isStoreLocatorView","storeList","map","storeLineProps","_createStoreLocationList","push","_store$OrgUnitAvailab3","selectedStoreLocation","lineResources","storeOpenFrom","secondsToTime","OpenFrom","storeOpenTo","OpenTo","storeHours","StoreHours","_store$OrgUnitAvailab4","toString","locationOpen","openFrom","openTo","storeHoursList","RegularStoreHours","buildStoreHours","__decorate","observer","BaseStoreSelectorStateManager","displayMap","preferredStoreLocalStorageKey","_readFromToCookie","storeInfo","JSON","parse","_unused","_context","writeToCookie","arguments","StoreName","_writeToCookie","stringify","_removeCookie","Error","MsDyn365","isBrowser","window","localStorage","removeItem","setItem","cookieValue","getItem","computed","observable","action","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchContent","jsonp","crypto","getRandomValues","Uint32Array","query","encodeURI","geolocationApiUrl","requestUrl","script","document","setAttribute","remove","resourceSets","point","coordinates","body","appendChild","_document","StringExtensions","isNullOrEmpty","getElementById","url","reject","_document2","_document3","type","defer","src","mapAPIReady","addEventListener","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","createObservableDataAction","getGenericAction","inputData","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","_onSelect","preventDefault","currentTarget","getAttribute","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","delivery","Description","ref","tabIndex","onKeyDown","onClickHandler","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","availabilityWithHours","i","_availabilityWithHour","pickupDeliveryOptionErrorMessage","componentDidUpdate","previousProps","componentDidMount","_stores","classnames","show","_renderStoreLocation","selected","StoreSelectorLocationLineItemComponent","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","keyCode","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Enter","Space","_searchTextChanged","inputValue","_onSubmit","_this$searchBoxRef$cu","blur","_onChangeHandler","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","pickupFilterByHeading","toggleButtonClass","toggleMapViewAttributes","bind","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","name","autoComplete","onSubmit","searchInputAriaLabel","placeholder","onKeyUp","color","emptyLocationsText","_ref2","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","_ref3","storeCountMessage","storeCountMessageInKm","storeAllCountMessage","module","exports","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","contains","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","componentWillUnmount","removeEventListener","stopPropagation","isExpandSiteOptionsState","ReactDOM","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","storeSelectorLocationLineItemComponentActions","distance","Math","floor","productdeliveryOptions","pickup","_delivery","hideStockStatus","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","isError","setError","renderStoreHours","displayTime","endDayShort","title","startDayFull","startDayShort","endDayFull","timeRange","pickUpButtonClickHandler","StoreSelectorFoundLocationsMessageComponent","RichTextComponent","ContactInformationType","Phone","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","storeHoursDayPeriod","storeHoursDay","productDeliveryOptions","productDeliveryOption","PickUpMethodDropdownComponent","pickUpStatesProps","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","dataset","description","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","PickUpButtonComponent","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","preferredStoreAttribute","removePreferredStoreAttribute","_props$data$storeSele","renderStoreLocations","selectedLocationReference","_props$data$storeSele2","_props$locationListPr","renderStoreLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","Number","parseInt","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","orgUnitNumber","StoreSelectorViewComponent","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","Browser","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","viewport","_data$storeSelectorSt","seconds","hours","ampm","divisorForMinutes","getShortTimeString","day","getFullTimeString","buildHoursDisplayInfo","startDay","endDay","hoursInfo","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","dateForLookup","get","buildStoreHoursString","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd"],"mappings":"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","file":"static/js/143.6a6be486f6dee80231c1.chunk.js","sourcesContent":["/*!\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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport StoreSelector from './modules/store-selector/store-selector';\nimport StoreSelectorView from './modules/store-selector/store-selector.view';\n\nexport * from './modules/store-selector/components';\nexport * from './modules/store-selector/components/store-selector-location-line-item/date-time-helpers';\nexport * from './modules/store-selector/store-selector';\nexport * from './modules/store-selector/store-selector.data';\nexport * from './modules/store-selector/store-selector.props.autogenerated';\nexport * from './modules/store-selector/store-selector.view';\n\nexport { StoreSelector, StoreSelectorView };\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 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 * Store Pickup option list interface.\n */\nexport interface IStorePickUpOptionListProps {\n productPickupListOptionMenuText?: string;\n productPickupModeList?: DeliveryOption[];\n defaultOptionText?: string;\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Store Pickup option state interface.\n */\nexport interface IStorePickOptionListState {\n isFilterExpanded: boolean;\n selectedPickupMode?: string;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class StorePickUpOptionList extends React.PureComponent {\n private readonly _storePickupListOptionMenu: React.RefObject;\n\n public constructor(props: IStorePickUpOptionListProps) {\n super(props);\n this._storePickupListOptionMenu = React.createRef();\n this.state = {\n isFilterExpanded: false,\n selectedPickupMode: ''\n };\n }\n\n public render(): JSX.Element {\n const { productPickupListOptionMenuText, productPickupModeList, defaultOptionText } = this.props;\n const selectedPickupModeDesc = defaultOptionText\n ? defaultOptionText\n : productPickupModeList?.find((delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\n const role = 'menu';\n return (\n
\n \n {this.state.isFilterExpanded ? (\n
    \n {productPickupModeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Method to call when drop dwon get selected.\n */\n private readonly _rendeDeliveryOptions = () => {\n const isExpandOptionsState = this.state.isFilterExpanded;\n this.setState({\n isFilterExpanded: !isExpandOptionsState\n });\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onKeyDown = async (event: React.KeyboardEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources } from '../store-selector.props.autogenerated';\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './store-selector-location-line-item';\n\n/**\n * Store selector location lines props interface.\n */\nexport interface IStoreSelectorLocationLinesProps {\n locations?: IFullOrgUnitAvailability[];\n resources: IStoreSelectorResources;\n preferredDistanceUnit?: string;\n\n alreadySelectedLocation?: OrgUnitLocation;\n outOfStockThreshold: number;\n enableOutOfStockCheck: boolean;\n storeLocatorView?: boolean;\n selectedStoreLocationId?: string;\n isPreferredStoreEnabled?: boolean;\n displayList?: boolean;\n isLocationDisabled?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n onClick: (locationId: string | undefined) => void;\n preferredStoreLocationId: string | null;\n onSetAsPreferredStore: (locationId: string | undefined) => void;\n onRemovePreferredStore: () => void;\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onLocationSelected(location: OrgUnitLocation | undefined): void;\n}\n\n/**\n * Displays all the location line items, or null if none exists.\n */\n@observer\nexport class StoreSelectorLocationLines extends React.PureComponent {\n @observable private _stores: IFullOrgUnitAvailability[] | undefined;\n\n private readonly selectedLocationRef: React.RefObject;\n\n private storeCounter: number;\n\n public constructor(props: IStoreSelectorLocationLinesProps) {\n super(props);\n this.selectedLocationRef = React.createRef();\n this.storeCounter = 0;\n }\n\n public componentDidUpdate(previousProps: IStoreSelectorLocationLinesProps): void {\n if (this.props.selectedStoreLocationId !== previousProps.selectedStoreLocationId) {\n this._scrollIntoView();\n }\n }\n\n public componentDidMount(): void {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n\n reaction(\n () => this.props.locations,\n () => {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n }\n );\n }\n\n public render(): JSX.Element | null {\n if (!ArrayExtensions.hasElements(this._stores)) {\n return null;\n }\n\n this.storeCounter = 0;\n\n return (\n
\n {this._stores.map((store, index) => {\n return this._renderStoreLocation(store, index);\n })}\n
\n );\n }\n\n /**\n * On click Handler function.\n * @param orgUnitLocation -OrgUnit location.\n * @returns Click action on orgUnit Location.\n */\n private readonly onClickHandler = (orgUnitLocation: OrgUnitLocation | undefined) => () => {\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\n };\n\n private _renderStoreLocation(store: IFullOrgUnitAvailability, index: number): JSX.Element | undefined {\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\n const deliveryOptions = store?.OrgUnitPickUpDeliveryModes;\n const defaultAriaSetsize = 0;\n if (orgUnitLocation) {\n ++this.storeCounter;\n return (\n \n \n \n );\n }\n return undefined;\n }\n\n /**\n * Sort store.\n * @param stores - Array of stores data.\n * @returns Sorted stores array.\n */\n private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\n /**\n * IsPreferredStore.\n * @param value - Array of stores data.\n * @returns IsPreferred store boolean value.\n */\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n this.props.isPreferredStoreEnabled &&\n this.props.preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === this.props.preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Scroll into view.\n */\n private readonly _scrollIntoView = () => {\n const selectedLocationDiv = this.selectedLocationRef.current;\n const parent = selectedLocationDiv?.parentElement;\n if (selectedLocationDiv && parent) {\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\n parent.scrollTop = selectedLocationDiv.offsetTop;\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\n }\n }\n };\n\n /**\n * Is current location.\n * @param location - Org unit location.\n * @returns The current location.\n */\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\n (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\n false;\n\n /**\n * Check the product is in stock or not.\n * @param itemAvailabilities - Item availabilities.\n * @returns If the product is in stock.\n */\n private readonly _isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\n if (!this.props.enableOutOfStockCheck) {\n return true;\n }\n\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > 0 : false;\n }\n\n return false;\n };\n\n /**\n * Get the stock inventory label.\n * @param availabilityWithHours - Full org unit availability.\n * @returns The stock label.\n */\n private readonly _stockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\n for (let i = 0; i < availabilityWithHours.ProductInventoryInformation.length; i++) {\n if (\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n availabilityWithHours.ProductInventoryInformation[i].InventLocationId\n ) {\n return availabilityWithHours.ProductInventoryInformation[i].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n\n /**\n * Map resources.\n * @param resources - Store resources.\n * @returns Resources.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n pickupDeliveryOptionErrorMessage: resources.pickupDeliveryOptionErrorMessage,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n KeyCodes,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { StorePickUpOptionList } from './store-pickup-option-list';\n\n/**\n * Store Selector Search Form Props interface.\n */\nexport interface IStoreSelectorSearchFormProps {\n resources: {\n searchInputAriaLabel: string;\n searchButtonAriaLabel: string;\n searchPlaceholderText: string;\n seeAllStoresText: string;\n viewListText: string;\n viewMapText: string;\n pickupFilterByHeading?: string;\n pickupFilterMenuHeading?: string;\n };\n\n id: string;\n value: string;\n isMapDisabled?: boolean;\n showAllStores?: boolean;\n displayList?: boolean;\n locatorView?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n hasEnabledPickupFilterToShowStore?: boolean;\n filteredPickupMode?: string;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onShowAllStores(): void;\n onToggleListMapViewState(): void;\n performSearch(searchTerm: string): Promise;\n searchTermChanged(searchTerm: string): Promise;\n filterPickupModeSelected(pickupMode: string): void;\n}\n\n/**\n * Simple search form consisting of search text and a search button.\n */\nexport class StoreSelectorSearchForm extends React.PureComponent {\n private readonly searchBoxRef: React.RefObject = React.createRef();\n\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly showAllStoreAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly toggleMapViewAttributes: Msdyn365.IDictionary | undefined;\n\n private previousValue: string = '';\n\n private isSearchResultOpened: boolean = false;\n\n public constructor(props: IStoreSelectorSearchFormProps) {\n super(props);\n this.state = { value: '' };\n this._handleKeyPressPrev = this._handleKeyPressPrev.bind(this);\n const payLoad: IPayLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SearchStore);\n this.storeSearchAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ShowAllStore;\n this.showAllStoreAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ToggleMapView;\n this.toggleMapViewAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n const {\n resources: {\n searchButtonAriaLabel,\n searchPlaceholderText,\n seeAllStoresText,\n viewListText,\n viewMapText,\n pickupFilterByHeading,\n pickupFilterMenuHeading\n },\n id,\n value,\n isMapDisabled,\n showAllStores,\n displayList,\n locatorView,\n onShowAllStores,\n productPickUpDeliveryOptions,\n hasEnabledPickupFilterToShowStore\n } = this.props;\n\n const toggleButtonText = displayList ? viewMapText : viewListText;\n\n return (\n
\n \n
\n )}\n {this.renderPickupModesList(\n this.props,\n toggleButtonText,\n productPickUpDeliveryOptions,\n pickupFilterMenuHeading,\n locatorView,\n pickupFilterByHeading,\n hasEnabledPickupFilterToShowStore,\n displayList\n )}\n \n );\n }\n\n /**\n * Handles the key press on the input box.\n * @param event - Event object.\n */\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\n // In order to avoid that. Checking if the search result is open or not.\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\n if (activeDescedantValue) {\n if (this.previousValue === '') {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n return;\n }\n\n if (activeDescedantValue !== this.previousValue) {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n } else {\n this.isSearchResultOpened = false;\n }\n }\n }\n };\n\n /**\n * Calls method display result.\n * @param event - The first number.\n */\n private readonly _handleKeyPressPrev = (event: React.KeyboardEvent): void => {\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Space) {\n this.props.onShowAllStores();\n }\n };\n\n /**\n * Method called on search text changed.\n * @param event - Input value.\n */\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\n const inputValue: string = event.target.value;\n\n await this.props.searchTermChanged(inputValue);\n };\n\n /**\n * Method called on search submit.\n * @param event - Input value.\n */\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\n event.preventDefault(); // Prevents form submission\n this.searchBoxRef.current?.blur();\n if (!this.isSearchResultOpened) {\n await this.props.performSearch(this.props.value);\n }\n this.isSearchResultOpened = false;\n };\n\n /**\n * Method called on product pickup option change.\n * @returns - Void.\n */\n private readonly _onChangeHandler = () => async (deliveryCode: string): Promise => {\n this.props.filterPickupModeSelected(deliveryCode);\n return Promise.resolve();\n };\n\n /**\n * Method to render pickup mode list.\n * @param props - Store selector search form props.\n * @param toggleButtonText - Locator view button text.\n * @param productPickUpDeliveryOptions - Product DeliveryOption List.\n * @param pickupFilterMenuHeading - Pickup store button text.\n * @param locatorView - Locator View is on\\off.\n * @param pickupFilterByHeading - Pickup list label text.\n * @param hasEnabledPickupFilterToShowStore - Flag to check header filter is enabled.\n * @param shouldDisplayList - Display List.\n * @returns Jsx component.\n */\n private readonly renderPickupModesList = (\n props: IStoreSelectorSearchFormProps,\n toggleButtonText: string,\n productPickUpDeliveryOptions: DeliveryOption[] | undefined,\n pickupFilterMenuHeading: string | undefined,\n locatorView: boolean | undefined,\n pickupFilterByHeading: string | undefined,\n hasEnabledPickupFilterToShowStore: boolean | undefined,\n shouldDisplayList?: boolean\n ): JSX.Element | null => {\n const toggleButtonClass = shouldDisplayList ? 'view-map' : 'list-view';\n if (hasEnabledPickupFilterToShowStore) {\n return (\n
\n {locatorView && (\n \n {toggleButtonText}\n \n )}\n \n
{pickupFilterByHeading}
\n
\n );\n }\n if (locatorView) {\n return (\n \n {toggleButtonText}\n \n );\n }\n return null;\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources, ITermsOfServiceLinkData } from '../store-selector.props.autogenerated';\n\nexport interface IStoreSelectorEmptyMessageProps {\n resources: IStoreSelectorResources;\n}\nexport const StoreSelectorEmptyMessage: React.FC = ({ resources }) => (\n
\n

{resources.emptyLocationsText}

\n
\n);\n\nexport const StoreSelectorWaiting: React.FC = () =>
;\n\nexport interface IStoreSelectorTermsOfServiceProps {\n link?: ITermsOfServiceLinkData;\n requestContext: Msdyn365.IRequestContext;\n onTextChange?(event: Msdyn365.ContentEditableEvent): void;\n}\n\nexport const StoreSelectorTermsOfService: React.FC = ({ link, requestContext, onTextChange }) => {\n if (link) {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-store-select__terms-link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link'\n };\n\n return (\n
\n \n
\n );\n }\n return null;\n};\n\nexport interface IStoreSelectorFoundLocationsMessage {\n resources: IStoreSelectorResources;\n locations?: IFullOrgUnitAvailability[];\n searchRadius: number;\n preferredDistanceUnit: string;\n isSeeAllStore: boolean;\n}\nexport const StoreSelectorFoundLocationsMessage: React.FC = ({\n locations,\n searchRadius,\n resources,\n isSeeAllStore,\n preferredDistanceUnit\n}) => {\n if (locations) {\n const storeCountMessage =\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n return (\n
\n {isSeeAllStore\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\n
\n );\n }\n\n return null;\n};\n","module.exports = React;","/*!\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","module.exports = ReactDOM;","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 };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|store-selector'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/store-selector.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-store-selector'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\n\n/**\n * Store Locator line item resources.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n\n closedText: string;\n\n outOfStock: string;\n inStock: string;\n\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n pickupDeliveryOptionErrorMessage?: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * Store Locator line item props.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n };\n}\n\n/**\n * Store Locator line item action component.\n */\nconst storeSelectorLocationLineItemComponentActions = {\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\n props.handlers.onSelected(props.location, deliveryMode);\n },\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\n },\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onRemovePreferredStore();\n }\n};\n\n/**\n * Function to render store hours.\n * @param storeHours - Store Hours object.\n * @param location - Store Unit.\n * @param resources - Resources.\n * @returns - Jsx element.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n location: OrgUnitLocation,\n resources: IStoreSelectorLocationLineItemResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day houts\n if (storeHours?.RegularStoreHours) {\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\n\n return (\n
\n {storeHoursList.map(displayTime => (\n
\n {displayTime.endDayShort ? (\n
\n {displayTime.startDayShort}–\n {displayTime.endDayShort}\n
\n ) : (\n
\n {displayTime.startDayShort}\n
\n )}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string | undefined = secondsToTime(location.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\n\n return (\n
\n {storeOpenFrom}-{storeOpenTo}\n
\n );\n};\n\n/**\n * Function to return distance measure unit.\n * @param distance - Store location within radius.\n * @param preferredDistanceUnit - Unit configuration.\n * @param isLocationDisabled - Flag to check user location.\n * @returns - Unit of distance.\n */\nexport const buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n isLocationDisabled?: boolean\n): string | undefined => {\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < 1) {\n return `(<1 ${preferredDistanceUnit})`;\n }\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\n};\n\n/**\n * Function to store contact.\n * @param contacts - Store location within radius.\n * @returns - Return primary contact number of store.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\n return Promise.resolve();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: IStoreSelectorLocationLineItemProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns DeliveryOptionList.\n */\nexport const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n const deliveryOption: DeliveryOption[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n });\n\n return deliveryOption;\n};\n\n/**\n * Renders store location line items.\n * @param props - Store location line items props.\n * @returns - HTML.\n */\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\n const {\n hideStockStatus,\n isCurrentLocation,\n isInStock,\n location,\n resources,\n storeHours,\n stockStatusLabel,\n storeLocatorView,\n index,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n shouldShowIndex\n } = props;\n\n const storeName: string | undefined = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = hideStockStatus || isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [isError, setError] = React.useState(false);\n\n const pickUpButtonClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n if (deliveryOptionList.length === 0) {\n setError(true);\n } else {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\n }\n };\n\n /* eslint-disable prettier/prettier */\n return (\n
\n
\n {(shouldShowIndex || storeLocatorView) && {index}}\n {storeName}\n {distanceAsString ? \n {' '}\n {distanceAsString}\n : false}\n
\n
\n
\n

{resources.contactInfoHeader}

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

{resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

\n {stockText &&

{stockText}

}\n {isCurrentLocation ? (\n

{resources.currentLocation}

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

{locationLineItem.resources.contactInfoHeader}

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

{locationLineItem.resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

\n {stockText &&

{stockText}

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

{resources.currentLocation}

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

{storeSelectorViewProps.resources.contactText}

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

{storeSelectorViewProps.resources.timeText}

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

{productAvailability}

\n {stockStatus &&

{stockStatus}

}\n
\n )}\n
\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n {canSelectPickUpMethod}\n
\n );\n};\n\n/**\n * Store Selector View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst StoreSelectorViewComponent: React.FC> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Store-Selector.tsx file\n const {\n BodyContainerProps,\n storeResultContainerProps,\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n locationsMessage,\n search,\n state,\n spinner,\n maps,\n locationsList,\n noLocationsMessage,\n terms,\n storeDetailsModal,\n selectedLocation,\n bodyWrapperProps,\n data,\n context\n } = props;\n const selectedLocationReference = React.useRef(null);\n const [isDesktopPort, setIsDesktopPort] = React.useState(false);\n\n const isDesktopViewport = React.useCallback(() => {\n const portView = isMobile({ variant: VariantType.Browser, context: context.request });\n const isDesktopPorts = portView === 'md' || portView === 'xl' || portView === 'lg';\n setIsDesktopPort(isDesktopPorts);\n }, [context]);\n\n React.useEffect(() => {\n if (props.locationsList) {\n /**\n * Method to handle scrolling.\n */\n const scrollIntoView = () => {\n const selectedLocationDiv = (selectedLocationReference as React.RefObject).current;\n if (selectedLocationDiv !== null) {\n const offset = selectedLocationDiv.getBoundingClientRect();\n const parent = selectedLocationDiv.parentElement?.parentElement;\n if (parent && offset) {\n const totalHeight = parent.scrollTop + offset.top;\n parent.scrollTop = totalHeight - parent.clientHeight;\n }\n }\n };\n scrollIntoView();\n }\n }, [props.locationsList]);\n\n React.useEffect(() => {\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', isDesktopViewport);\n }\n isDesktopViewport();\n }, [isDesktopViewport]);\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\n\n const isDesktopView = viewport === 'md' || viewport === 'lg' || viewport === 'xl';\n\n if (!isDesktopView || !isDesktopPort) {\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n \n \n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n {maps}\n \n {selectedLocation && renderSelectedStore(selectedLocation, props)}\n \n \n \n \n {terms}\n \n );\n }\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n \n {maps}\n \n \n {terms}\n \n );\n};\n\nexport default StoreSelectorViewComponent;\n","/*!\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"],"sourceRoot":""}