{"version":3,"sources":["webpack:///src/modules/store-selector/store-selector.view.tsx?b873","webpack:///src/index.ts?c6ae","webpack:///src/modules/account-customer-balance-tile/components/account-customer-balance-tile-info.tsx?a91f","webpack:///./src/themes/gardner-theme-b2c/views/checkout-order-confirmation.view.tsx?761d","webpack:///src/modules/cookie-compliance/components/accept-button.tsx?1709","webpack:///src/modules/cookie-compliance/components/links.tsx?807e","webpack:///src/modules/cookie-compliance/cookie-compliance.tsx?5f7e","webpack:///./src/themes/gardner-theme/views/media-gallery.view.tsx?70ec","webpack:///src/modules/store-selector/components/selected-store/selected-store.tsx?8d1a","webpack:///src/modules/store-selector/store-selector.tsx?ce13","webpack:///src/modules/account-customer-balance-tile/account-customer-balance-tile.view.tsx?955a","webpack:///./src/themes/gardner-theme/views/checkout-order-confirmation.view.tsx?de6a","webpack:///src/modules/adventureworks/views/write-review.view.tsx?7a62","webpack:///src/modules/account-customer-balance-tile/components/account-customer-balance-tile-links.tsx?5f47","webpack:///src/modules/account-generic-tile/account-generic-tile.tsx?4504","webpack:///./src/themes/gardner-theme-b2c/views/media-gallery.view.tsx?008f","webpack:///src/modules/account-customer-balance-tile/account-customer-balance-tile.tsx?9383","webpack:///src/modules/account-generic-tile/account-generic-tile.view.tsx?bca1","webpack:///./src/themes/gardner-theme/views/order-history.view.tsx?67fe","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:///./src/modules/eve-map/eve-map.view.tsx?e389","webpack:///src/modules/store-selector/components/pickup-option-list.tsx?9a9c","webpack:///src/modules/loyalty-terms/components/loyalty-terms-modal.tsx?c84d","webpack:///src/modules/loyalty-terms/loyalty-terms.tsx?0629","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/cookie-compliance/cookie-compliance.view.tsx?b30b","webpack:///src/modules/account-generic-tile/components/account-generic-tile-links.tsx?e4df","webpack:///./src/themes/gardner-theme-b2c/views/order-history.view.tsx?3c72","webpack:///src/modules/loyalty-terms/loyalty-terms.view.tsx?5155","webpack:///src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?89f3","webpack:///./src/modules/eve-map/eve-map.props.autogenerated.ts?5f6f","webpack:///./src/modules/eve-map/components/eve-map-small-components.tsx?a70f","webpack:///./src/modules/eve-map/components/eve-map-location-line-item/eve-map-location-line-item.components.tsx?f7ce","webpack:///./src/modules/eve-map/components/eve-map-location-lines.tsx?05b6","webpack:///./src/modules/eve-map/components/eve-map-search-form.tsx?14e2","webpack:///./src/modules/eve-map/eve-map.tsx?5859"],"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","ErrorComponent","_ref","error","className","CreditComponent","_ref2","verbagePrefix","verbagePostfix","value","OrderConfirmationOrderInfomation","orderInformationProps","OrderConfirmationSalesLine","salesLineProps","salesLine","buyAgainButton","OrderConfirmationGroupDelivery","_ref3","deliveryProps","heading","count","processing","address","pickupDateTimeslot","trackingInfo","OrderConfirmationGroup","_ref4","groupProps","delivery","salesLinesProps","salesLines","map","key","data","LineId","OrderConfirmationGroups","_ref5","groupsProps","groups","group","index","OrderConfirmationOrderSummary","_ref6","orderSummaryProps","subtotal","shipping","tax","totalAmount","earnedPoints","OrderConfirmationPayment","_ref7","paymentMethodsProps","title","methods","OrderConfirmationHelp","_ref8","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","OrderConfirmationView","_ref9","moduleProps","backToShoppingLink","alert","loading","orderSummary","payment","help","CookieComplianceAcceptButton","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","telemetryContent","onClose","payLoad","getPayloadObject","attributes","getTelemetryAttributes","type","onClick","CookieComplianceLinks","constructor","_mapEditableLinks","linkdata","length","editableLinks","forEach","link","this","linkText","contentAction","etext","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","role","additionalProperties","onTelemetryClick","push","render","links","Msdyn365","editProps","onTextChange","requestContext","CookieCompliance","super","getTelemetryObject","context","request","telemetryPageName","friendlyName","telemetry","handleLinkTextChange","linkIndex","event","_this$props$config$ac","config","actionLinks","target","handleContentChange","content","visible","cookieRef","_onDismiss","bind","componentDidMount","cookies","isConsentGiven","setState","resources","acceptCookiesAriaLabel","moduleConfig","MsDyn365","isBrowser","viewProps","_objectSpread","onDismiss","CookieComplianceBanner","classnames","ref","AlertProps","color","fade","Content","text","onEdit","acceptButton","renderView","setConsentCookie","location","reload","renderThumbnailItem","thumbnail","ThumbnailItemContainerProps","Picture","createElement","GetEmptyThumbnailItemComponent","imageSettings","_props$config$thumbna2","tag","tabIndex","Image","actionContext","src","gridSettings","thumbnailImageSettings","loadFailureBehavior","defaultThumbnailImageSettings","viewports","xs","q","w","h","xl","lazyload","cropFocalRegion","renderThumbnails","thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","Thumbnails","mediaGalleryItems","items","item","altText","getMediaGalleryItems","lastUpdate","id","GetThumbnailItemComponent","image","imageId","modifiedActiveIndex","_props$config$thumbna","_props$callbackToggle","_props$callbackThumbn","callbackToggle","call","callbackThumbnailClick","activeIndex","handleKeyDown","keyCode","KeyCodes","Enter","preventDefault","Button","onKeyDown","fullScreenTitleText","mediaGalleryView","CarouselProps","MediaGallery","Modal","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","PickUpOptionList","pickupListOptionMenuText","pickupmodeList","onChange","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","isInStock","stockStatusLabel","preferredStoreLocationId","isPreferredStoreEnabled","isLocationDisabled","storePickUpOptionList","productPickUpOptionList","preferredDistanceUnit","parentClassName","OrgUnitName","distanceAsString","buildDistanceString","Distance","resourceLabel","inStock","outOfStock","stockLabel","stockText","selectLocation","selectLocationAriaLabelFormat","replace","TelemetryConstant","PickupInStore","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","matchDeliveryOptions","availabilityInfoHeader","preferredStoreAriaLabel","preferredStoreText","setAsPreferredStoreTextAriaLabel","setAsPreferredStoreText","StoreSelector","shouldHideInventory","preferredStore","hasEnabledOutOfStockCheck","shouldDisplayList","availabilitiesWithHours","result","storeSelectorStateManager","storeLocations","selectedStoreLocationId","find","store","_store$OrgUnitAvailab","orgUnitLocation","selectedStoreResources","_mapResources","_selectedStore$OrgUni3","selectedProps","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","ItemAvailabilities","_stockInventoryLabel","StoreId","OrgUnitPickUpDeliveryModes","DeliveryOptions","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","termsOfServiceLink","handleHeadingChange","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","stores","filter","_location$OrgUnitPick","some","deliveryOption","Code","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","channel","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","debug","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","storeId","mode","_store$OrgUnitAvailab2","setPreferredStoreLocation","Latitude","Longitude","clearPreferredStore","setSelectedStoreLocationId","_setSelectedStore","searchTerm","isSeeAllStoreValue","geoLocate","trim","_updateLocations","latitude","longitude","shouldShowAllStores","_navigator","style","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","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","_isInStock$OrgUnitAva","InventoryLocationId","InventLocationId","StockLevelLabel","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","BingMapsEnabled","lang","locale","market","_this$props$data$stor7","_this$props$data$stor8","_this$props$context$a","_this$props$data$stor9","when","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","isSameContext","shouldComponentUpdate","_storeSelectorStateMa2","_storeSelectorStateMa3","_storeLocationList","_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","classname","autoFocus","isOpen","onClosed","horizontalPosition","verticalPosition","toggle","ModalHeader","ModalFooter","ModalBody","StoreSelectorFoundLocationsMessage","locations","searchRadius","isSeeAllStore","StoreSelectorSearchForm","performSearch","searchTermChanged","onShowAllStores","onToggleListMapViewState","locatorView","productPickUpDeliveryOptions","filterPickupModeSelected","hasEnabledPickupFilterToShowStore","StoreSelectorWaiting","StoreSelectorLocationLines","outOfStockThreshold","enableOutOfStockCheck","storeLocatorView","shouldShowIndex","StoreSelectorEmptyMessage","StoreSelectorTermsOfService","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","_value$OrgUnitAvailab","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","_store$OrgUnitAvailab3","selectedStoreLocation","lineResources","storeOpenFrom","secondsToTime","OpenFrom","storeOpenTo","OpenTo","storeHours","StoreHours","_store$OrgUnitAvailab4","toString","locationOpen","openFrom","openTo","storeHoursList","RegularStoreHours","buildStoreHours","__decorate","observer","AccountCustomerBalanceTileView","AccountCustomerBalanceTile","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","apiSettings","fallBackSrc","sm","md","lg","renderProductImage","Name","ItemId","WriteReviewView","signInMessage","signInButton","modalToggle","paragraph","isAuthenticated","user","RichTextComponent","reviewModal","modal","modalHeader","modalBody","form","inputRow","selectRatingLabel","rating","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","modalFooter","submitButton","cancelButton","createReviewModal","AccountCustomerBalanceTileLinks","AccountGenericTile","LinksComponent","_initState","hasError","apiGenericErrorMessage","get","customerResult","allowOnAccountPayment","AllowOnAccountPayment","isB2BCustomer","IsB2b","enableCustomerAccountPayment","nextProps","nextState","isCustomerAccountPaymentEnabled","Heading","headingTag","isDetailsLinkDisplayed","account","Balance","CreditLimit","InvoiceAccountBalance","InvoiceAccountCreditLimit","noCreditErrorMessage","accountCreditVerbagePrefix","accountCreditVerbagePostfix","currencyCode","formatCurrency","customerCredit","customerCreditFormatted","toFixed","computed","AccountGenericTileView","OrderHistoryOrderInfomation","salesId","receiptId","channelName","createdDate","amount","channelReferenceId","OrderHistoryGroupDelivery","OrderHistoryGroup","OrderHistoryGroups","OrderHistoryHeader","headerProps","orderCountLabel","extraActions","OrderHistorySalesOder","salesOrderProps","orderInfomation","orderDetailsLink","expandProductsButton","OrderHistoryList","listProps","salesOrders","salesOrder","OrderHistoryView","orderHistoryProps","header","emptyMessage","list","table","moreButton","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","_onSelect","currentTarget","getAttribute","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","Description","onClickHandler","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","availabilityWithHours","i","_availabilityWithHour","componentDidUpdate","previousProps","_stores","show","_renderStoreLocation","selected","StoreSelectorLocationLineItemComponent","observable","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Space","_searchTextChanged","inputValue","_onSubmit","_this$searchBoxRef$cu","blur","_onChangeHandler","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","pickupFilterByHeading","toggleButtonClass","toggleMapViewAttributes","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","name","autoComplete","onSubmit","searchInputAriaLabel","placeholder","onKeyUp","emptyLocationsText","storeCountMessage","storeCountMessageInKm","storeAllCountMessage","renderDealerList","dealerResultContainerProps","MapView","MapProps","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","contains","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","window","addEventListener","componentWillUnmount","removeEventListener","stopPropagation","isExpandSiteOptionsState","LoyaltyTermsModal","LoyaltyTermsCancel","loyaltyTermCancelAttributes","LoyaltyTermsSubmit","loyaltyTermSubmitAttributes","LoyaltyTermsAgree","loyaltyTermCheckboxAttributes","onToggle","applicationNode","returnFocusRef","returnRef","cancelLoyaltyTermsText","disabled","checked","joinLoyaltyTermsText","loyaltyTermsHeading","agreeSection","checkbox","onCheck","agreeText","loyaltyAgreeToTerms","LoyaltyTerms","_toggle","_submit","_checkboxChecked","toggleRef","url","requestUrl","isJoining","substring","qsps","split","qsp","splitQsp","isModalOpen","clicked","hideToggle","serviceTerms","loyaltyCard","completeClass","status","innerRef","joinLoyaltytermsToggleText","CardNumber","IssueLoyaltyInput","issueLoyalty","then","card","redirectToLoyalty","getUrlSync","getLoyaltyCardAsync","callerContext","fullCard","update","GetLoyaltyCardInput","storeSelectorLocationLineItemComponentActions","distance","Math","floor","productdeliveryOptions","pickup","_delivery","hideStockStatus","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","renderStoreHours","displayTime","JSON","stringify","endDayShort","startDayFull","startDayShort","endDayFull","timeRange","StoreSelectorFoundLocationsMessageComponent","ContactInformationType","Phone","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","storeHoursDayPeriod","storeHoursDay","productDeliveryOptions","productDeliveryOption","PickUpMethodDropdownComponent","pickUpStatesProps","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","isError","setError","dataset","description","StringExtensions","isNullOrEmpty","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","preferredStoreAttribute","removePreferredStoreAttribute","renderStoreLocations","selectedLocationReference","_props$data$storeSele","_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$","totalTopHeight","viewport","_data$storeSelectorSt","displayMap","CookieComplianceView","Alert","AccountGenericTileLinks","LoyaltyTermsView","seconds","hours","ampm","divisorForMinutes","getShortTimeString","day","getFullTimeString","buildHoursDisplayInfo","startDay","endDay","hoursInfo","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","dateForLookup","buildStoreHoursString","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","HeadingTag","DealerSelectorEmptyMessage","DealerSelectorWaiting","DealerSelectorFoundLocationsMessage","dealerCountMessage","dealerCountMessageInKm","DealerLocatorLocationLineItemComponent","channelId","ChannelId","dealerDetailsHeader","renderDealerDetails","dealerDetailsDescriptionText","dealerDetailsContractCodeText","ContractList","mfrCode","ManufacturerCode","ManufacturerName","ContractCode","ContractDescription","DealerLocatorLocationLines","dealerDetailsText","dealerDetailsManufacturerCodeText","dealerDetailsLaborRateText","dealerDetailsNotesText","DealerLocatorSearchForm","Map","mapRef","kmToMiValue","defaultLookUpRadius","_initMap","pushpinAccessible","Events","addHandler","getCredentials","mapSessionId","_updateMap","pushpinOptions","mapLocation","entities","clear","pushpins","unitStoreInfo","entries","storeLocation","isSelectedLocation","_getPushpinOptions","pushpin","Pushpin","Location","handleClickEvent","unshift","setView","center","bounds","LocationRect","fromShapes","padding","clusterLayer","ClusterLayer","layers","insert","setOptions","dealerDetails","getDealerDetailsAsync","selectedDealer","tempDealerLocations","newDealerLocations","findIndex","loc","_loc$OrgUnitLocation","prev","defaultLatitudeValue","defaultLongitudeValue","SearchRadiusUnit","km","lookupDistanceInMiles","round","newOrgUnitLocationsInput","GetDealerLocationsInput","newOrgUnits","getDealerLocations","showIndex","size","selectionColor","icon","_getSvgIcon","distanceResults","originCoords","resultsCoords","dealerLocations","_this$map","navigationBarMode","NavigationBarMode","minified","setMapModuleLoaded","_this$props$data$stor13","_this$props$data$stor14","_this$props$data$stor15","shouldDisplayMap","Header"],"mappings":"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","file":"static/js/14.4e85f981cdbd4ebf5b74.chunk.js","sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 {\n canSelectLocation,\n deliveryOptions,\n pickUpDeliveryOptionButton,\n pickupModes\n } = 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 } = props;\n\n if (isMobileView) {\n return (\n \n {locationsMessage}\n {search}\n \n \n {state.isSearchInProgress ? spinner : <>\n {locationsList ? locationsList : noLocationsMessage}\n }\n {maps}\n \n {selectedLocation && renderSelectedStore(selectedLocation)}\n \n \n \n \n );\n }\n\n return (\n \n \n \n {locationsMessage}\n {search}\n {state.isSearchInProgress ? spinner : <>\n {locationsList ? locationsList : noLocationsMessage}\n }\n \n \n {maps}\n \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 } = props;\n\n return (\n \n \n {HeaderProps}\n \n {renderBody(props)}\n \n {terms}\n \n \n );\n};\n\nexport default StoreSelectorView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 {\n StoreSelector,\n StoreSelectorView\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\ninterface IAccountCustomerBalanceTileInfo {\n label?: string;\n value?: string;\n verbagePrefix?: string;\n verbagePostfix?: string;\n className?: string;\n error?: string;\n}\n\nexport const ErrorComponent: React.FC = ({ error }) => (\n \n {error}\n \n);\n\nexport const CreditComponent: React.FC = ({ verbagePrefix, verbagePostfix, value, className }) => {\n return (\n
\n {verbagePrefix}\n \n {value}\n \n {verbagePostfix}\n
\n );\n};\n\nexport const InfoComponent: React.FC = ({ label, value, className }) => (\n
\n \n {label}\n \n \n {value}\n \n
\n);\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IHelp, IOrderSummary, IPaymentMethods } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common';\r\nimport { IGroup, IGroupDelivery, IGroups } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-groups';\r\nimport { IOrderInformation } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-order-information';\r\nimport { ISalesLine } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-sales-line';\r\nimport {\r\n ICheckoutOrderConfirmationViewProps\r\n} from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/./checkout-order-confirmation';\r\n\r\nexport const OrderConfirmationOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n // receiptEmail,\r\n // createdDate,\r\n // channelReferenceId\r\n}) => (\r\n \r\n {/* {channelReferenceId} */}\r\n {/* {receiptEmail} */}\r\n \r\n);\r\n\r\nexport const OrderConfirmationSalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton }) => (\r\n \r\n {salesLine}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, pickupDateTimeslot, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {address}\r\n {pickupDateTimeslot}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {delivery && }\r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderConfirmationOrderSummary: React.FC = ({ orderSummaryProps, heading, subtotal, shipping, tax, totalAmount, earnedPoints }) => (\r\n \r\n {heading}\r\n {subtotal}\r\n {shipping}\r\n {tax}\r\n {totalAmount}\r\n {earnedPoints}\r\n \r\n);\r\n\r\nexport const OrderConfirmationPayment: React.FC = ({ paymentMethodsProps, title, methods }) => (\r\n \r\n {title}\r\n {methods}\r\n \r\n);\r\n\r\nexport const OrderConfirmationHelp: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\r\n \r\n {needHelpLabel}\r\n {helpLineNumberLabel}\r\n {contactNumber}\r\n \r\n);\r\n\r\nconst OrderConfirmationView: React.FC = ({\r\n moduleProps,\r\n heading,\r\n backToShoppingLink,\r\n alert,\r\n loading,\r\n // orderInfomation,\r\n orderSummary,\r\n payment,\r\n help,\r\n groups\r\n}) => {\r\n return (\r\n \r\n {heading}\r\n {alert}\r\n {loading}\r\n {/* {orderInfomation && } */}\r\n {backToShoppingLink}\r\n {groups && }\r\n {orderSummary && }\r\n {payment && }\r\n {help && }\r\n \r\n );\r\n};\r\n\r\nexport default OrderConfirmationView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICookieComplianceAcceptButton {\n acceptCookiesButtonText?: string;\n acceptCookiesButtonAriaLabel?: string;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const CookieComplianceAcceptButton: React.FC = ({\n acceptCookiesButtonText,\n acceptCookiesButtonAriaLabel,\n telemetryContent,\n onClose\n}) => {\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, 'accept cookies');\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n {acceptCookiesButtonText}\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IActionLinksData } from '../cookie-compliance.props.autogenerated';\n\nexport interface ICookieComplianceLinks {\n links: IActionLinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent}\n */\nexport class CookieComplianceLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n }\n\n private readonly _mapEditableLinks = (linkdata: IActionLinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\n\nexport default CookieComplianceLinks;\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IAlertProps, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { CookieComplianceAcceptButton, CookieComplianceLinks } from './components';\nimport { ICookieComplianceConfig, ICookieComplianceProps } from './cookie-compliance.props.autogenerated';\n\n/**\n * Alert state interface.\n */\nexport interface IAlertState {\n visible: boolean;\n}\n\n/**\n * Cookie compliance view props interface.\n */\nexport interface ICookieComplianceViewProps extends ICookieComplianceProps<{}> {\n CookieComplianceBanner: IModuleProps;\n AlertProps: IAlertProps;\n Content: INodeProps;\n text?: React.ReactNode;\n links?: React.ReactNode;\n acceptButton?: React.ReactNode;\n className: string;\n onDismiss(): void;\n}\n\n/**\n *\n * CookieCompliance component.\n * @extends {React.PureComponent>}\n */\nclass CookieCompliance extends React.PureComponent, IAlertState> {\n private readonly cookieRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public constructor(props: ICookieComplianceProps) {\n super(props);\n this.state = { visible: false };\n this.cookieRef = React.createRef();\n this._onDismiss = this._onDismiss.bind(this);\n }\n\n public componentDidMount(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies && !context.request.cookies.isConsentGiven()) {\n this.setState({ visible: true });\n }\n }\n\n public render(): JSX.Element | null {\n const { config, context, resources, telemetry } = this.props;\n const { acceptCookiesButtonText, acceptCookiesAriaLabel } = resources;\n const { visible } = this.state;\n\n const isConsentGiven = context && context.request && context.request.cookies && context.request.cookies.isConsentGiven();\n let moduleConfig: ICookieComplianceConfig;\n\n try {\n moduleConfig = config;\n } catch (error) {\n telemetry.error(`Something went wrong while rendering the alert module ------${error}`);\n return
{error}
;\n }\n\n if (isConsentGiven && !visible) {\n this.props.context.telemetry.error('Cookie Compliance content is empty, module wont render.');\n return null;\n }\n\n if (!MsDyn365.msdyn365Commerce.isBrowser) {\n return <>;\n }\n\n const viewProps = {\n ...this.props,\n onDismiss: this._onDismiss,\n CookieComplianceBanner: {\n moduleProps: this.props,\n className: classnames('ms-cookie-compliance', moduleConfig.className),\n ref: this.cookieRef\n },\n AlertProps: {\n className: 'ms-cookie-compliance__container',\n color: 'white',\n fade: false\n },\n Content: {\n className: 'ms-cookie-compliance__content'\n },\n text: moduleConfig.content && (\n \n ),\n links: ArrayExtensions.hasElements(moduleConfig.actionLinks) && (\n \n ),\n acceptButton: (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles Link content change event.\n * @param linkIndex - Index of link in linkarray.\n * @returns Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.actionLinks?.[linkIndex]) {\n this.props.config.actionLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Handles content change event.\n * @param event - Event.\n */\n public handleContentChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.content = event.target.value;\n };\n\n private _onDismiss(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies) {\n context.request.cookies.setConsentCookie();\n location.reload();\n }\n this.setState({ visible: false });\n }\n}\n\nexport default CookieCompliance;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { IMediaGalleryThumbnailItemViewProps,\r\n IMediaGalleryThumbnailsViewProps,\r\n IMediaGalleryViewProps\r\n} from '@msdyn365-commerce-modules/media-gallery';\r\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\n/**\r\n * Render the thumbnail item images.\r\n * @param thumbnail - The carousel thumbnail line props.\r\n * @returns Return HTML having thumnailcontainer props with image.\r\n */\r\nconst renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\r\n\r\n return (\r\n \r\n {Picture}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Gets the thumbnail item to display media gallery images.\r\n * @param image - The media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param imageId - Image id.\r\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render images.\r\n */\r\nconst GetThumbnailItemComponent = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n imageId: number,\r\n modifiedActiveIndex: number,\r\n props: IMediaGalleryViewProps\r\n): IMediaGalleryThumbnailItemViewProps => {\r\n\r\n /**\r\n * OnClick method of media gallery item.\r\n * */\r\n const onClick = () => {\r\n props.callbackToggle?.();\r\n props.callbackThumbnailClick?.(imageId);\r\n props.state.activeIndex = imageId;\r\n };\r\n\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n /**\r\n * Keydown event of media gallery item.\r\n * @param event - React.KeyboardEvent.\r\n * */\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Enter) {\r\n event.preventDefault();\r\n onClick();\r\n }\r\n };\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'presentation',\r\n key: imageId\r\n },\r\n Picture: (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Gets the empty thumbnail item to display media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render empty images.\r\n */\r\nconst GetEmptyThumbnailItemComponent = (imageSettings: IImageSettings, props: IMediaGalleryViewProps): IMediaGalleryThumbnailItemViewProps => {\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: 'ms-media-gallery__thumbnail-item',\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: 0,\r\n 'aria-label': '',\r\n 'aria-selected': true\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Update media gallery items method.\r\n * @param items - The media gallery thumbnail item view props.\r\n * @returns The IImageData array.\r\n */\r\nconst getMediaGalleryItems = (items?: IMediaGalleryThumbnailItemViewProps[]): IImageData[] | undefined => {\r\n return items?.map(item => {\r\n return {\r\n altText: item.Picture.props.altText,\r\n src: item.Picture.props.src\r\n };\r\n });\r\n};\r\n\r\nconst defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\r\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n};\r\n\r\n/**\r\n * Render the Media gallery thumbnails to represent images in grid view.\r\n * @param thumbnails - The thumbnail view props.\r\n * @param props - The media gallery view props.\r\n * @returns - The single slide carousel component to render as media gallery image.\r\n */\r\nconst renderThumbnails = (\r\n thumbnails: IMediaGalleryThumbnailsViewProps,\r\n props: IMediaGalleryViewProps\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\r\n const { state, Thumbnails } = props;\r\n const mediaGalleryItems = getMediaGalleryItems(Thumbnails.items);\r\n\r\n const items: IMediaGalleryThumbnailItemViewProps[] | undefined =\r\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\r\n state.lastUpdate && mediaGalleryItems && mediaGalleryItems[0].src === 'empty' ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)] :\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\r\n mediaGalleryItems?.map((item: IImageData, id: number) => GetThumbnailItemComponent(item,\r\n defaultThumbnailImageSettings, id, state.activeIndex, props));\r\n\r\n return (\r\n \r\n \r\n {items?.map(renderThumbnailItem)}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the Media gallery items using viewprops.\r\n * @param props - The media gallery view props.\r\n * @returns The media gallery module wrapping up images node.\r\n */\r\nconst mediaGalleryView: React.FC = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\r\n return (\r\n \r\n \r\n {Modal}\r\n {renderThumbnails(Thumbnails, props)}\r\n \r\n );\r\n};\r\n\r\nexport default mediaGalleryView;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 { Button, getPayloadObject, getTelemetryAttributes, INodeProps, IPayLoad,\n ITelemetryContent, NodeTag, TelemetryConstant } 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 = (props: ISelectedStoreProps,\n deliveryOptionList: DeliveryOption[], pickupInStoreButtonText: string, pickupInStoreAriaLabel: string): 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\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: \n {storeName}\n ,\n storeDetailsCloseButton: ,\n storeDistance: distanceAsString ? \n {/* eslint-disable-next-line react-native/no-raw-text -- Need whitespace */}\n {' '}\n {distanceAsString}\n : '',\n storeDetailsAvailabilityContainer: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__container`\n },\n productAvailability: !shouldHideStockStatus &&

\n {resources.availabilityInfoHeader}\n

,\n stockStatus: stockText &&

\n {stockText}\n

,\n currentLocation:

\n {resources.currentLocation}\n

,\n pickUpDeliveryOptionButton: \n {pickupInStoreButtonText}\n ,\n pickupModes: renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel),\n preferredStoreButton: isPreferredStoreEnabled ? \n {resources.preferredStoreText}\n : null,\n removePreferredStoreButton: isPreferredStoreEnabled ? \n {resources.setAsPreferredStoreText}\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/**\n * Store location line item component.\n */\nexport const SelectedStoreComponent = selectedStoreDetails as (props: ISelectedStoreProps) => ISelectedStoreViewProps;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\n/// \n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport {\n DeliveryOption,\n ItemAvailability,\n OrgUnitLocation,\n StoreHours\n} 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, IStoreSelectorResources, mode as modeEnum, 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(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n this.storeCounter = 0;\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n actionContext: {\n requestContext: {\n channel\n }\n }\n },\n config: {\n autoSuggestionEnabled: isAutoSuggestionEnabled\n }\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: {\n config: appConfig\n },\n actionContext: {\n requestContext: {\n channel,\n cookies\n }\n }\n },\n slots: {\n maps: mapSlot\n },\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 ? storeSelectorStateManager.isDialogOpen && (context?.id === this.props.id) : 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 = (context && (context.showMapViewLink === undefined || context.showMapViewLink)) &&\n 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 = 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(isEnableOutofStock, isLocatorView, preferredLocationId, this.isPreferredStoreEnabled,\n selectedStoreLocationId, storeLocationList ?? null, preferredDistanceUnit, alreadySelectedLocation, productPickUpOptionList);\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(`ms-store-${isInlineView ? 'locate' : 'select'}`, className, dialogClassName,\n isInlineView ? '' : 'msc-modal-input-required'),\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 ${selectedStoreLocationId && isDialogOpen && !shouldDisplayList ? 'show' : 'hide'}`\n },\n locationsMessage: !this.state.isLocationDisabled && (\n \n ),\n selectedLocation: this.renderSelectedStore(shouldHideInventory, preferredDistanceUnit, preferredStore, this.isPreferredStoreEnabled,\n isEnableOutofStock, productPickUpOptionList, shouldDisplayList),\n search: (\n \n ),\n spinner: ,\n locationsList: ArrayExtensions.hasElements(storeLocationList) ? (\n \n ) : undefined,\n noLocationsMessage: ,\n terms: ,\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(); 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 = (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 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, onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\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(stores: IFullOrgUnitAvailability[],\n isPreferredStoreEnabled: boolean | undefined,\n preferredStoreLocationId: string): IFullOrgUnitAvailability[] {\n const isPreferredStore = (value: IFullOrgUnitAvailability) => isPreferredStoreEnabled && preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreLocationId;\n\n return [\n ...stores.filter(isPreferredStore),\n ...stores.filter(store => !isPreferredStore(store))\n ];\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, preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n stores: IFullOrgUnitAvailability[] | null,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]): IStoreSelectorLocationLineItemProps[] {\n const storeList: IStoreSelectorLocationLineItemProps[] = [];\n if (ArrayExtensions.hasElements(stores)) {\n stores.map((store, index: number) => {\n const storeLineProps = this._createStoreLocationList(store, index,\n hasEnabledOutOfStockCheck, isStoreLocatorView, preferredStoreLocationId, isPreferredStoreEnabled,\n selectedStoreLocationId, preferredDistanceUnit, alreadySelectedLocation, productPickUpOptionList);\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: {\n autoSuggestOptions\n },\n context: {\n telemetry,\n actionContext: {\n requestContext: {\n channel\n }\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(`#ms-store-select__search-box_${this.props.id}`,\n `#ms-store-select__search-box-container_${this.props.id}`, this._onSuggestionSelected);\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: {\n cookies\n }\n }\n },\n config: {\n mode\n },\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(storeId, preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\n cookies.isConsentGiven(),\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude, preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude);\n };\n\n /**\n * On Removing Preferred Store.\n */\n private readonly _removePreferredStore = async (): Promise => {\n const {\n context: {\n actionContext: {\n requestContext: {\n cookies\n }\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: {\n actionContext\n },\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: {\n style\n },\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: {\n style\n },\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)\n .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\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: {\n mode,\n lookupRadius,\n style,\n searchRadiusUnit\n },\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 (calRadius: number, distanceUnitValue: number,\n latitude?: number, longitude?: number): Promise => {\n\n const {\n context: {\n actionContext\n }\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 (calRadius: number, distanceUnitValue: number,\n latitude?: number, longitude?: number): Promise => {\n\n const {\n telemetry,\n context: {\n actionContext\n },\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(store: IFullOrgUnitAvailability,\n index: number, hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean, preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation, productPickUpOptionList?: DeliveryOption[]): 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, 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,\n selectedLocation?: OrgUnitLocation): boolean => (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 = (hasEnableOutOfStockCheck: boolean, itemAvailabilities: ItemAvailability[] | undefined): 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 (isInStock.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId === isInStock.ProductInventoryInformation[index].InventLocationId) {\n return isInStock.ProductInventoryInformation[index].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n\n}\n\nexport default StoreSelector;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAccountCustomerBalanceTileViewProps } from './account-customer-balance-tile';\n\nconst AccountCustomerBalanceTileView: React.FC = props => {\n const { AccountCustomerBalanceTile, heading, content, links } = props;\n\n return (\n \n {heading}\n {content}\n {links}\n \n );\n};\n\nexport default AccountCustomerBalanceTileView;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IHelp, IOrderSummary, IPaymentMethods } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common';\r\nimport { IGroup, IGroupDelivery, IGroups } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-groups';\r\nimport { IOrderInformation } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-order-information';\r\nimport { ISalesLine } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-sales-line';\r\nimport {\r\n ICheckoutOrderConfirmationViewProps\r\n} from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/./checkout-order-confirmation';\r\n\r\nexport const OrderConfirmationOrderInfomation: React.FC = ({\r\n orderInformationProps\r\n // receiptEmail\r\n // createdDate,\r\n // channelReferenceId\r\n}) => (\r\n \r\n {/* {channelReferenceId} */}\r\n {/* {receiptEmail} */}\r\n \r\n);\r\n\r\nexport const OrderConfirmationSalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton }) => (\r\n \r\n {salesLine}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, pickupDateTimeslot, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {address}\r\n {pickupDateTimeslot}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {delivery && }\r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderConfirmationOrderSummary: React.FC = ({ orderSummaryProps, heading, subtotal, shipping, tax, totalAmount, earnedPoints }) => (\r\n \r\n {heading}\r\n {subtotal}\r\n {shipping}\r\n {tax}\r\n {totalAmount}\r\n {earnedPoints}\r\n \r\n);\r\n\r\nexport const OrderConfirmationPayment: React.FC = ({ paymentMethodsProps, title, methods }) => (\r\n \r\n {title}\r\n {methods}\r\n \r\n);\r\n\r\nexport const OrderConfirmationHelp: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\r\n \r\n {needHelpLabel}\r\n {helpLineNumberLabel}\r\n {contactNumber}\r\n \r\n);\r\n\r\nconst OrderConfirmationView: React.FC = ({\r\n moduleProps,\r\n heading,\r\n backToShoppingLink,\r\n alert,\r\n loading,\r\n // orderInfomation,\r\n orderSummary,\r\n payment,\r\n help,\r\n groups\r\n}) => {\r\n return (\r\n \r\n {heading}\r\n {alert}\r\n {loading}\r\n {/* {orderInfomation && } */}\r\n {backToShoppingLink}\r\n {groups && }\r\n {orderSummary && }\r\n {payment && }\r\n {help && }\r\n \r\n );\r\n};\r\n\r\nexport default OrderConfirmationView;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IImageSettings, Image, RichTextComponent } from '@msdyn365-commerce/core';\nimport { IWriteReviewData, IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n\n/**\n * Render Product Description.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductDescription = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const product = props.data.product.result;\n return (\n \n
\n {renderProductImage(props)}\n
\n
\n
\n {product?.Name}\n
\n
\n {product?.Name}\n
\n
\n {product?.ItemId}\n
\n
\n
\n );\n};\n\n/**\n * Create Write Review Modal.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n\n return (\n \n {reviewModal.modalHeader}\n \n \n \n {renderProductDescription(props)}\n \n
\n {resources.selectRatingLabel}\n
\n {reviewModal.rating}\n
\n
\n \n {resources.reviewTitleLabel}\n {reviewModal.titleInput}\n \n \n {resources.reviewTextLabel}\n {reviewModal.textInput}\n \n {reviewModal.privacyPolicyUrl}\n {reviewModal.error}\n
\n
\n \n {reviewModal.submitButton}\n {reviewModal.cancelButton}\n \n
\n );\n};\n\n/**\n * WriteReview view.\n * @param props - WriteReview ViewProps.\n * @returns WriteReview view module.\n */\nconst WriteReviewView: React.FC> = props => {\n const { config, heading, signInMessage, signInButton, modalToggle, moduleProps } = props;\n const { paragraph } = config;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n const text = paragraph && ();\n\n return (\n \n {heading}\n {!isAuthenticated ? <>\n {signInMessage}\n {signInButton}\n : <>\n {text}\n {modalToggle}\n {createReviewModal(props)}\n }\n \n );\n};\n\nexport default WriteReviewView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface ILinksData {\n linkText?: string;\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n}\n\nexport interface IAccountCustomerBalanceTileLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nconst AccountCustomerBalanceTileLinks: React.FC = ({ links, telemetryContent, onTextChange, requestContext }) => {\n if (links.length === 0) {\n return null;\n }\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n
\n { editableLinks && editableLinks.length > 0 ? : null}\n
\n );\n};\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent?: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n const payLoad = getPayloadObject('click', telemetryContent!, '');\n\n linkdata.forEach((link, index) => {\n payLoad.contentAction.etext = link.linkText;\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-account-customer-balance-tile__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n\nexport default AccountCustomerBalanceTileLinks;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport {\n IAccountGenericTileConfig, IAccountGenericTileProps\n} from './account-generic-tile.props.autogenerated';\nimport LinksComponent from './components/account-generic-tile-links';\n\nexport interface IAccountGenericTileViewProps extends IAccountGenericTileProps {\n AccountGenericTile: IModuleProps;\n className: string;\n heading?: React.ReactNode;\n links?: React.ReactNode;\n}\n\n/**\n *\n * AccountGeneric component.\n * @extends {React.PureComponent>}\n */\nclass AccountGenericTile extends React.PureComponent> {\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IAccountGenericTileProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n }\n\n public render(): JSX.Element {\n const { config } = this.props;\n const { className, heading, links } = config;\n\n const viewProps = {\n ...this.props,\n className,\n AccountGenericTile: {\n moduleProps: this.props,\n className: classnames('ms-account-generic-tile', config.className)\n },\n heading: heading && heading.text && (\n \n ),\n links: links && links.length > 0 && \n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\n\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.links && this.props.config.links[linkIndex]) {\n this.props.config.links[linkIndex].linkText = event.target.value;\n }\n };\n}\n\nexport default AccountGenericTile;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { IMediaGalleryThumbnailItemViewProps,\r\n IMediaGalleryThumbnailsViewProps,\r\n IMediaGalleryViewProps\r\n} from '@msdyn365-commerce-modules/media-gallery';\r\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\n/**\r\n * Render the thumbnail item images.\r\n * @param thumbnail - The carousel thumbnail line props.\r\n * @returns Return HTML having thumnailcontainer props with image.\r\n */\r\nconst renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\r\n\r\n return (\r\n \r\n {Picture}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Gets the thumbnail item to display media gallery images.\r\n * @param image - The media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param imageId - Image id.\r\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render images.\r\n */\r\nconst GetThumbnailItemComponent = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n imageId: number,\r\n modifiedActiveIndex: number,\r\n props: IMediaGalleryViewProps\r\n): IMediaGalleryThumbnailItemViewProps => {\r\n\r\n /**\r\n * OnClick method of media gallery item.\r\n * */\r\n const onClick = () => {\r\n props.callbackToggle?.();\r\n props.callbackThumbnailClick?.(imageId);\r\n props.state.activeIndex = imageId;\r\n };\r\n\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n /**\r\n * Keydown event of media gallery item.\r\n * @param event - React.KeyboardEvent.\r\n * */\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Enter) {\r\n event.preventDefault();\r\n onClick();\r\n }\r\n };\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'presentation',\r\n key: imageId\r\n },\r\n Picture: (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Gets the empty thumbnail item to display media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render empty images.\r\n */\r\nconst GetEmptyThumbnailItemComponent = (imageSettings: IImageSettings, props: IMediaGalleryViewProps): IMediaGalleryThumbnailItemViewProps => {\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: 'ms-media-gallery__thumbnail-item',\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: 0,\r\n 'aria-label': '',\r\n 'aria-selected': true\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Update media gallery items method.\r\n * @param items - The media gallery thumbnail item view props.\r\n * @returns The IImageData array.\r\n */\r\nconst getMediaGalleryItems = (items?: IMediaGalleryThumbnailItemViewProps[]): IImageData[] | undefined => {\r\n return items?.map(item => {\r\n return {\r\n altText: item.Picture.props.altText,\r\n src: item.Picture.props.src\r\n };\r\n });\r\n};\r\n\r\nconst defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\r\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n};\r\n\r\n/**\r\n * Render the Media gallery thumbnails to represent images in grid view.\r\n * @param thumbnails - The thumbnail view props.\r\n * @param props - The media gallery view props.\r\n * @returns - The single slide carousel component to render as media gallery image.\r\n */\r\nconst renderThumbnails = (\r\n thumbnails: IMediaGalleryThumbnailsViewProps,\r\n props: IMediaGalleryViewProps\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\r\n const { state, Thumbnails } = props;\r\n const mediaGalleryItems = getMediaGalleryItems(Thumbnails.items);\r\n\r\n const items: IMediaGalleryThumbnailItemViewProps[] | undefined =\r\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\r\n state.lastUpdate && mediaGalleryItems && mediaGalleryItems[0].src === 'empty' ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)] :\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\r\n mediaGalleryItems?.map((item: IImageData, id: number) => GetThumbnailItemComponent(item,\r\n defaultThumbnailImageSettings, id, state.activeIndex, props));\r\n\r\n return (\r\n \r\n \r\n {items?.map(renderThumbnailItem)}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the Media gallery items using viewprops.\r\n * @param props - The media gallery view props.\r\n * @returns The media gallery module wrapping up images node.\r\n */\r\nconst mediaGalleryView: React.FC = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\r\n return (\r\n \r\n \r\n {Modal}\r\n {renderThumbnails(Thumbnails, props)}\r\n \r\n );\r\n};\r\n\r\nexport default mediaGalleryView;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { CustomerBalances } from '@msdyn365-commerce/retail-proxy';\nimport { getTelemetryObject, Heading, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport { computed, reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IAccountCustomerBalanceTileData } from './account-customer-balance-tile.data';\nimport { IAccountCustomerBalanceTileProps } from './account-customer-balance-tile.props.autogenerated';\nimport { CreditComponent, ErrorComponent } from './components/account-customer-balance-tile-info';\nimport LinksComponent from './components/account-customer-balance-tile-links';\n\nexport interface IAccountCustomerBalanceTileViewProps extends IAccountCustomerBalanceTileProps {\n AccountCustomerBalanceTile: IModuleProps;\n className: string;\n heading?: React.ReactNode;\n content: React.ReactNode;\n links: React.ReactNode;\n}\n\nexport interface IAccountCustomerBalanceTileViewState {\n isDetailsLinkDisplayed: boolean;\n content: React.ReactNode;\n}\n\n/**\n *\n * AccountCustomerBalanceTile component.\n * @extends {React.Component>}\n */\nclass AccountCustomerBalanceTile extends React.Component<\n IAccountCustomerBalanceTileProps,\n IAccountCustomerBalanceTileViewState\n> {\n @computed get hasError(): boolean {\n return get(this.props, 'data.balance.status') !== 'SUCCESS';\n }\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IAccountCustomerBalanceTileProps) {\n super(props);\n\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n\n this.state = { ...this._initState() };\n\n reaction(\n () => this.hasError,\n () => {\n this.props.context.telemetry.error('Error retrieving customer account balance');\n this.setState({\n content: \n });\n }\n );\n }\n\n @computed get isCustomerAccountPaymentEnabled(): boolean {\n const customerResult = get(this.props, 'data.customerInformation.result');\n\n const allowOnAccountPayment = customerResult ? customerResult.AllowOnAccountPayment : false;\n const isB2BCustomer = customerResult ? customerResult.IsB2b : false;\n const enableCustomerAccountPayment = get(this.props, 'context.request.app.platform.enableCustomerAccountPayment');\n\n return (\n allowOnAccountPayment &&\n (enableCustomerAccountPayment === 'all' ||\n (enableCustomerAccountPayment === 'b2b' && isB2BCustomer) ||\n (enableCustomerAccountPayment === 'b2c' && !isB2BCustomer))\n );\n }\n\n public shouldComponentUpdate(nextProps: IAccountCustomerBalanceTileProps,\n nextState: IAccountCustomerBalanceTileViewState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n if (!this.isCustomerAccountPaymentEnabled) {\n return <>;\n }\n\n const { className, heading, links } = this.props.config;\n const viewProps = {\n ...this.props,\n AccountCustomerBalanceTile: {\n moduleProps: this.props,\n className: classnames('ms-account-customer-balance-tile', className)\n },\n heading: heading && (\n \n ),\n content: this.state.content,\n links: this.state.isDetailsLinkDisplayed && (\n (event: Msdyn365.ContentEditableEvent) => void 0,\n requestContext: this.props.context.request,\n telemetryContent: this.telemetryContent\n }}\n />\n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initState(): IAccountCustomerBalanceTileViewState {\n const account: CustomerBalances = get(this.props, 'data.balance.result');\n\n let content: React.ReactNode;\n let isDetailsLinkDisplayed = false;\n\n if (this.hasError) {\n this.props.telemetry.error('Error retrieving customer account balance');\n content = ;\n } else if (account.Balance === 0 && account.CreditLimit === 0 && account.InvoiceAccountBalance === 0 && account.InvoiceAccountCreditLimit === 0) {\n // Non-established credit\n content = ;\n } else {\n // Successfully retrieved balance\n const { accountCreditVerbagePrefix, accountCreditVerbagePostfix } = this.props.resources;\n const currencyCode = get(this.props, 'context.request.channel.Currency');\n const formatCurrency = get(this.props, 'context.cultureFormatter.formatCurrency');\n let customerCredit = 0;\n\n if (account.InvoiceAccountCreditLimit === 0) {\n customerCredit = account.CreditLimit - account.Balance;\n } else {\n customerCredit = account.InvoiceAccountCreditLimit - account.InvoiceAccountBalance;\n }\n\n const customerCreditFormatted = `${formatCurrency(customerCredit.toFixed(2), currencyCode)}`;\n\n isDetailsLinkDisplayed = true;\n content = (\n \n );\n }\n\n return { content, isDetailsLinkDisplayed };\n }\n}\n\nexport default AccountCustomerBalanceTile;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAccountGenericTileViewProps } from './account-generic-tile';\n\nconst AccountGenericTileView: React.FC = props => {\n const { AccountGenericTile, heading, links } = props;\n\n return (\n \n {heading}\n {links}\n \n );\n};\n\nexport default AccountGenericTileView;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IGroup, IGroupDelivery, IGroups, IHeader, IList, IOrderHistoryViewProps, IOrderInformation, ISalesOrder } from '@msdyn365-commerce-modules/order-management';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const OrderHistoryOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n salesId,\r\n receiptId,\r\n channelName,\r\n createdDate,\r\n count,\r\n amount,\r\n channelReferenceId\r\n}) => (\r\n \r\n {channelName}\r\n {salesId}\r\n {receiptId}\r\n {createdDate}\r\n {count}\r\n {amount}\r\n {channelReferenceId}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {processing}\r\n {address}\r\n {trackingInfo}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n {salesLine.salesLine}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderHistoryHeader: React.FC = ({ headerProps, heading, orderCountLabel, extraActions }) => (\r\n \r\n {heading}\r\n {orderCountLabel}\r\n {extraActions}\r\n \r\n);\r\n\r\nexport const OrderHistorySalesOder: React.FC = ({ salesOrderProps, orderInfomation, groups, orderDetailsLink, expandProductsButton }) => (\r\n \r\n {orderInfomation && }\r\n {groups && }\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n \r\n);\r\n\r\nexport const OrderHistoryList: React.FC = ({ listProps, salesOrders }) => (\r\n \r\n {salesOrders && salesOrders.map((salesOrder, index) => )}\r\n \r\n);\r\n\r\nconst OrderHistoryView: React.FC = ({\r\n orderHistoryProps,\r\n header,\r\n alert,\r\n loading,\r\n emptyMessage,\r\n backToShoppingLink,\r\n list,\r\n table,\r\n moreButton\r\n}) => (\r\n \r\n {header && }\r\n {loading}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {emptyMessage && (\r\n \r\n {emptyMessage}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {list && }\r\n {table}\r\n {moreButton && moreButton}\r\n \r\n);\r\n\r\nexport default OrderHistoryView;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 {\n productPickupListOptionMenuText,\n productPickupModeList,\n defaultOptionText\n } = this.props;\n const selectedPickupModeDesc = defaultOptionText ? defaultOptionText : productPickupModeList?.find(\n (delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\n const role = 'menu';\n return (\n
\n \n {this.state.isFilterExpanded ?
    \n { productPickupModeList?.map((delivery: DeliveryOption) => {\n return (\n \n \n {delivery.Description}\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. All rights reserved.\n * See License.txt 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 {\n this._stores.map((store, index) => {\n return this._renderStoreLocation(store, index);\n })\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) => this.props.isPreferredStoreEnabled && this.props.preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === this.props.preferredStoreLocationId;\n\n return [\n ...stores.filter(isPreferredStore),\n ...stores.filter(store => !isPreferredStore(store))\n ];\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 => (this.props.alreadySelectedLocation &&\n location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) || 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 (availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId === availabilityWithHours.ProductInventoryInformation[i].InventLocationId) {\n return availabilityWithHours.ProductInventoryInformation[i].StockLevelLabel;\n }\n\n }\n }\n\n return undefined;\n };\n\n /**\n * Map resources.\n * @param resources - Store resoureces.\n * @returns Resources.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent, KeyCodes, TelemetryConstant } 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: { searchButtonAriaLabel, searchPlaceholderText, seeAllStoresText, viewListText,\n viewMapText, pickupFilterByHeading, pickupFilterMenuHeading },\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 {this.renderPickupModesList(this.props, toggleButtonText, productPickUpDeliveryOptions, pickupFilterMenuHeading,\n locatorView, pickupFilterByHeading, hasEnabledPickupFilterToShowStore, displayList)}\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 /**\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 = (props: IStoreSelectorSearchFormProps, toggleButtonText: string,\n productPickUpDeliveryOptions: DeliveryOption[] | undefined,\n pickupFilterMenuHeading: string | undefined, locatorView: boolean | undefined,\n pickupFilterByHeading: string | undefined, hasEnabledPickupFilterToShowStore: boolean | undefined,\n shouldDisplayList?: boolean): JSX.Element | null => {\n\n const toggleButtonClass = shouldDisplayList ? 'view-map' : 'list-view';\n if (hasEnabledPickupFilterToShowStore) {\n return (\n
\n {locatorView && \n {toggleButtonText}\n }\n \n
\n {pickupFilterByHeading}\n
\n
);\n }\n if (locatorView) {\n return (\n {toggleButtonText}\n );\n }\n return null;\n\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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

\n {resources.emptyLocationsText}\n

\n
\n);\n\nexport const StoreSelectorWaiting: React.FC = () => (\n
\n);\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 }\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 = ({ locations, searchRadius, resources, isSeeAllStore, preferredDistanceUnit }) => {\n if (locations) {\n const storeCountMessage = preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n return (\n
\n { isSeeAllStore ? resources.storeAllCountMessage\n .replace('{count}', locations.length.toString()) : storeCountMessage\n .replace('{count}', locations.length.toString())\n .replace('{radius}', searchRadius.toString())}\n
\n );\n }\n\n return null;\n};\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { /*IHeader,*/ IMapViewProps } from './eve-map';\r\n\r\n/**\r\n * Render the heading.\r\n * @param param0 -- Heading props.\r\n * @param param0.headerProps -- Heading Props.\r\n * @param param0.heading -- Heading Node.\r\n * @returns -- Returns the node.\r\n */\r\n// const MapHeader: React.FC = ({ headerProps, heading }) => {heading};\r\n\r\n/**\r\n * Renders the map view props.\r\n * @param param0 -- Map view props.\r\n * @param param0.ModuleProps -- Module props.\r\n * @param param0.Header -- Header props.\r\n * @param param0.MapProps -- Map props.\r\n * @returns -- Returns the map module.\r\n */\r\nconst MapView: React.FC = props => {\r\n const { ModuleProps, MapProps } = props;\r\n return (\r\n \r\n
\r\n {renderDealerList(props)}\r\n {/* Not using the map header - can remove and disable the configuration field? */}\r\n {/* {Header && }, */}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nconst renderDealerList: React.FC = props => {\r\n const {\r\n dealerResultContainerProps,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n locationsList,\r\n noLocationsMessage\r\n // selectedLocation,\r\n // dealerDetailsModal // may just have the details appear by extending the selected dealer in the list\r\n } = props;\r\n return (\r\n \r\n {locationsMessage}\r\n {search}\r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}\r\n // {/* <>{noLocationsMessage} */}\r\n }\r\n {/* Make the renderSelectedDealer function work??? */}\r\n {/* {selectedLocation && renderSelectedDealer(selectedLocation)} */}\r\n \r\n );\r\n};\r\n\r\nexport default MapView;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 {\n pickupListOptionMenuText,\n pickupmodeList\n } = this.props;\n\n return (\n
\n \n {this.state.expandSiteOptions ?
    \n { pickupmodeList?.map((delivery: DeliveryOption) => {\n return (
  • \n \n \n {delivery.Description}\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 (this._pickupListOptionButton.current !== null && (event.target === this._pickupListOptionButton.current ||\n // eslint-disable-next-line xss/no-mixed-html -- Need to check if any option inside the div is clicked or not.\n this._pickupListOptionButton.current.contains(htmlElement))) ||\n (this._pickupListOptionMenu.current !== null &&\n // eslint-disable-next-line xss/no-mixed-html -- Need to check if any option inside the div is clicked or not.\n (event.target === this._pickupListOptionMenu.current || this._pickupListOptionMenu.current.contains(htmlElement))))) {\n this.setState({\n expandSiteOptions: false\n });\n }\n };\n\n private _renderDeliveryOptions(event: React.MouseEvent): void {\n event.stopPropagation();\n const isExpandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !isExpandSiteOptionsState\n });\n }\n\n /**\n * Select Delivery option.\n * @param event -- Event Object.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode && deliveryCode.length > 0) {\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ILoyaltyTermsModalProps {\n resources: ILoyaltyTermsModalResources;\n returnRef: React.RefObject | undefined;\n checked: boolean;\n isOpen: boolean;\n terms: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n onToggle(): void;\n onSubmit(): void;\n onCheck(): void;\n}\n\nexport interface ILoyaltyTermsModalResources {\n loyaltyTermsHeading: string;\n loyaltyAgreeToTerms: string;\n joinLoyaltyTermsText: string;\n cancelLoyaltyTermsText: string;\n}\n\nexport interface ILoyaltyTermsModalViewProps {\n modal: INodeProps;\n modalHeader: INodeProps;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n heading: React.ReactElement;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n terms: React.ReactNode;\n checkbox: React.ReactElement;\n agreeText: React.ReactElement;\n agreeSection: INodeProps;\n}\n\nexport const LoyaltyTermsModal = (props: ILoyaltyTermsModalProps): ILoyaltyTermsModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.LoyaltyTermsCancel);\n const loyaltyTermCancelAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsSubmit;\n const loyaltyTermSubmitAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsAgree;\n const loyaltyTermCheckboxAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return {\n modal: { tag: Modal, className: 'ms-loyalty-terms__modal', toggle: props.onToggle, applicationNode: 'renderPage', isOpen: props.isOpen, returnFocusRef: props.returnRef },\n modalHeader: { tag: ModalHeader, className: 'ms-loyalty-terms__modal-header', toggle: props.onToggle },\n modalFooter: { tag: ModalFooter, className: 'ms-loyalty-terms__modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-loyalty-terms__modal-body' },\n cancelButton: ,\n submitButton: \n {props.resources.joinLoyaltyTermsText}\n ,\n heading:

\n {props.resources.loyaltyTermsHeading}\n

,\n terms: props.terms,\n agreeSection: { className: 'ms-loyalty-terms__agree-section' },\n checkbox: ,\n agreeText:

\n {props.resources.loyaltyAgreeToTerms}\n

\n };\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { getUrlSync } from '@msdyn365-commerce/core';\nimport { getLoyaltyCardAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { GetLoyaltyCardInput, issueLoyalty, IssueLoyaltyInput } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IModuleProps,\n ITelemetryContent\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { ILoyaltyTermsModalViewProps, LoyaltyTermsModal } from './components/loyalty-terms-modal';\nimport { ILoyaltyTermsData } from './loyalty-terms.data';\nimport { ILoyaltyTermsProps } from './loyalty-terms.props.autogenerated';\n\nexport interface ILoyaltyTermsState {\n checked: boolean;\n clicked: boolean;\n isModalOpen: boolean;\n}\nexport interface ILoyaltyTermsViewProps extends ILoyaltyTermsProps {\n LoyaltyTerms: IModuleProps;\n modalToggle: React.ReactElement;\n modal: ILoyaltyTermsModalViewProps;\n loading: boolean;\n}\n\n/**\n *\n * LoyaltyTerms component.\n * @extends {React.Component>}\n */\nclass LoyaltyTerms extends React.Component, ILoyaltyTermsState> {\n private readonly toggleRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n public constructor(props: ILoyaltyTermsProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this._submit = this._submit.bind(this);\n this._checkboxChecked = this._checkboxChecked.bind(this);\n this.toggleRef = React.createRef();\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n let search = this.props.context.request.url.requestUrl.search;\n let isJoining = false;\n if (search) {\n search = search.substring(1);\n const qsps = search.split('&');\n for (const qsp of qsps) {\n const splitQsp = qsp.split('=');\n isJoining = splitQsp[0] === 'joiningLoyalty' && splitQsp[1] === 'true';\n if (isJoining) {\n break;\n }\n }\n }\n\n this.state = {\n isModalOpen: isJoining,\n checked: false,\n clicked: false\n };\n }\n\n public shouldComponentUpdate(nextProps: ILoyaltyTermsProps,\n nextState: ILoyaltyTermsState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, hideToggle },\n resources,\n slots: { serviceTerms },\n data: { loyaltyCard },\n context: {\n request: {\n user: {\n isAuthenticated\n }\n }\n }\n } = this.props;\n const completeClass = classname('ms-loyalty-terms', className);\n\n const viewProps = {\n ...this.props,\n className: completeClass,\n LoyaltyTerms: {\n moduleProps: this.props,\n className: completeClass\n },\n loading: loyaltyCard.status === 'LOADING',\n modalToggle: (hideToggle !== true) && ,\n modal: isAuthenticated && loyaltyCard.result && loyaltyCard.result.CardNumber === undefined && LoyaltyTermsModal({\n resources: { ...resources },\n returnRef: this.toggleRef,\n checked: this.state.checked,\n isOpen: this.state.isModalOpen,\n terms: serviceTerms,\n telemetryContent: this.telemetryContent,\n onToggle: this._toggle,\n onSubmit: this._submit,\n onCheck: this._checkboxChecked\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _toggle(): void {\n this.setState({ isModalOpen: !this.state.isModalOpen, checked: false });\n }\n\n private _submit(): void {\n if (this.props.context.request.user.isAuthenticated && !this.state.clicked) {\n this.setState({ clicked: true });\n const input = new IssueLoyaltyInput(this.props.context.request.apiSettings);\n\n issueLoyalty(input, this.props.context.actionContext)\n .then((card) => {\n if (this.props.config.redirectToLoyalty) {\n window.location.assign(getUrlSync('loyalty', this.props.context.actionContext) || '');\n } else {\n getLoyaltyCardAsync({ callerContext: this.props.context.actionContext }, card.CardNumber || '')\n .then((fullCard) => {\n this.props.context.actionContext.update(new GetLoyaltyCardInput(this.props.context.request.apiSettings), fullCard);\n })\n .catch((error: Error) => {\n this.props.context.actionContext.update(new GetLoyaltyCardInput(this.props.context.request.apiSettings), card);\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to fetch loyalty card');\n });\n }\n })\n .catch((error: Error) => {\n this.setState({ clicked: false });\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to issue loyalty card');\n });\n }\n }\n\n private _checkboxChecked(): void {\n this.setState({ checked: !this.state.checked });\n }\n}\n\nexport default LoyaltyTerms;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n DeliveryOption,\n OrgUnitContact,\n OrgUnitLocation,\n StoreHours\n} from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\n\n/**\n * Store Locator line item resources.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n\n closedText: string;\n\n outOfStock: string;\n inStock: string;\n\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * Store Locator line item props.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n };\n}\n\n/**\n * Store Locator line item action component.\n */\nconst storeSelectorLocationLineItemComponentActions = {\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\n props.handlers.onSelected(props.location, deliveryMode);\n },\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\n },\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onRemovePreferredStore();\n }\n};\n\n/**\n * Function to render store hours.\n * @param storeHours - Store Hours object.\n * @param location - Store Unit.\n * @param resources - Resources.\n * @returns - Jsx element.\n */\nconst renderStoreHours = (storeHours: StoreHours | undefined, location: OrgUnitLocation,\n resources: IStoreSelectorLocationLineItemResources): 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 \n {displayTime.startDayShort}\n \n –\n \n {displayTime.endDayShort}\n \n
\n ) : (\n
\n \n {displayTime.startDayShort}\n \n
\n )}\n
\n {displayTime.timeRange}\n
\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}\n -\n {storeOpenTo}\n
\n );\n\n};\n\n/**\n * Function to retrun distance measure unit.\n * @param distance - Store location within radius.\n * @param preferredDistanceUnit - Unit configuration.\n * @param isLocationDisabled - Flag to check user location.\n * @returns - Unit of distance.\n */\nexport const buildDistanceString = (distance: number | undefined, preferredDistanceUnit: string, isLocationDisabled?: boolean): 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/**\n * Function to store contact.\n * @param contacts - Store location within radius.\n * @returns - Return primary contact number of store.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupInStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\n return Promise.resolve();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (props: IStoreSelectorLocationLineItemProps,\n deliveryOptionList: DeliveryOption[], pickupInStoreButtonText: string, pickupInStoreAriaLabel: string): 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 = (productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined): 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\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\n return (\n
\n
\n {(shouldShowIndex || storeLocatorView) && \n {index}\n }\n \n {storeName}\n \n {distanceAsString ? \n {' '}\n {distanceAsString}\n : false}\n
\n
\n
\n

\n {resources.contactInfoHeader}\n

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

\n {resources.storeHoursHeader}\n

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

\n {resources.availabilityInfoHeader}\n

\n {stockText &&

\n {stockText}\n

}\n {isCurrentLocation ? (\n

\n {resources.currentLocation}\n

\n ) : (canSelectLocation ? deliveryOptionList.length === 0 ? (\n \n {pickupInStoreButtonText}\n \n ) : renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel) : (\n false\n ))}\n
\n }\n {\n isPreferredStoreEnabled ? (isPreferredStore ? \n {resources.preferredStoreText}\n : \n {resources.setAsPreferredStoreText}\n ) : null\n }\n
\n
\n );\n};\n\n/**\n * Store location line item component.\n */\nexport const StoreSelectorLocationLineItemComponent = storeSelectorLocationLineItem as (props: IStoreSelectorLocationLineItemProps) => JSX.Element;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { RichTextComponent } from '@msdyn365-commerce/core';\nimport { ContactInformationType, DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n buildStoreHours, IHoursDisplayInfo, ILocationHours, IStoreSelectorFoundLocationsMessage,\n IStoreSelectorLocationLineItemProps, IStoreSelectorLocationLineItemResources, IStoreSelectorViewProps, 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, getTelemetryAttributes, getTelemetryObject, IPayLoad, isMobile, Module, Node, 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\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 = preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n\n return (\n ${locations.length.toString()}`) : storeCountMessage\n .replace('{count}', `${locations.length.toString()}`)\n .replace('{radius}', `${searchRadius.toString()}`)}\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 = (distance: number | undefined, preferredDistanceUnit: string,\n resources: IStoreSelectorResources & IStoreSelectorResources, isLocationDisabled?: boolean): 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.replace('{preferredDistanceUnit}', preferredDistanceUnit)\n .replace('{distance}', Math.floor(distance).toString());\n\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('{endDay}',\n `${displayTime.endDayShort}`) : storeHoursDayString\n .replace('{startDay}', `${displayTime.startDayShort}`)}\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 = (storeHours: StoreHours | undefined, storeHoursList: IHoursDisplayInfo[] | undefined,\n locationOpen: ILocationHours | undefined, resources: IStoreSelectorResources & IStoreSelectorResources): 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
\n {displayTime.timeRange}\n
\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)\n .replace('{startDay}', storeOpenFrom)\n .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 = (productDeliveryOptions: DeliveryOption[] | undefined, storePickUpOptionList: DeliveryOption[] | undefined): 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 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 } = 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 (\n filteredDeliveryMode !== undefined ?
\n \n {filteredDeliveryMode.Description}\n \n
: null\n );\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((delivery: DeliveryOption) => delivery.Code === pickUpStatesProps.state.filteredPickupMode);\n\n const pickupInStoreButtonText: string = selectStoreText;\n const filteredDeliveryMode: DeliveryOption | undefined = (pickUpStatesProps.state.filteredPickupMode !== undefined ? filterDeliveryOption : undefined);\n\n return (\n \n
\n {pickUpMethodLabel}\n
\n {pickUpStatesProps.state.filteredPickupMode === undefined ?
\n \n {currentStorePickUpOption}\n \n \n {deliveryOptionList.map((delivery: DeliveryOption) => (\n \n \n {delivery.Description}\n \n \n ))}\n \n
\n {pickupOptionDropdownError}\n
\n
: renderLocationLinePickupButton(filteredDeliveryMode)}\n \n {pickupInStoreButtonText}\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 = (locationLineItem: IStoreSelectorLocationLineItemProps,\n props: IStoreSelectorViewProps & IStoreSelectorProps) => {\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 } = locationLineItem;\n const storeName = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(location.Distance,\n locationLineItem.preferredDistanceUnit, props.resources, locationLineItem.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 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 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 && \n {index}\n }\n \n {storeName}\n \n {distanceAsString ? \n {distanceAsString}\n : false}\n
\n
\n
\n

\n {locationLineItem.resources.contactInfoHeader}\n

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

\n {locationLineItem.resources.storeHoursHeader}\n

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

\n {resources.availabilityInfoHeader}\n

\n {stockText &&

\n {stockText}\n

}\n
\n }\n {\n isPreferredStoreEnabled && (isPreferredStore ? \n {resources.preferredStoreText}\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 = (location: IStoreSelectorLocationLineItemProps,\n index: number, props: IStoreSelectorViewProps & IStoreSelectorProps,\n selectedLocationReference: React.RefObject): JSX.Element | undefined => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n hideStockStatus, storeLocatorView,\n isCurrentLocation,\n isInStock,\n productPickUpOptionList,\n resources,\n storePickUpOptionList,\n telemetryContent } = 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 {pickupInStoreButtonText}\n \n ) : ();\n const pickUpMethodSelection = (\n canSelectLocation ? canSelectPickUpMethod : (\n false\n )\n );\n\n return (\n
\n \n {renderStoreLocationLineItem(location, props)}\n
\n {!storeLocatorView && (isCurrentLocation ? (\n

\n {resources.currentLocation}\n

\n ) : pickUpMethodSelection)}\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 = (props: IStoreSelectorViewProps & IStoreSelectorProps,\n selectedLocationReference: React.RefObject) => {\n return (\n \n {\n props.locationListProps?.map((store, index) => {\n return renderStoreLocation(store, index, props, selectedLocationReference);\n })\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 = (selectedLocationProps: ISelectedStoreViewProps,\n storeSelectorViewProps: IStoreSelectorViewProps & IStoreSelectorProps): 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 ? buildStoreHours(selectedStore.StoreHours.RegularStoreHours,\n mapResources(storeSelectorViewProps.resources)) : [];\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('{StoreName}', storeNameValue ?? '');\n const telemetryContent = getTelemetryObject(storeSelectorViewProps.context.request.telemetryPageName!,\n storeSelectorViewProps.friendlyName, storeSelectorViewProps.telemetry);\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 {pickupInStoreButtonText}\n \n ) : selectedLocation && ();\n\n return (\n \n \n {storeDetailsCloseButton}\n {storeName}\n {storeDistance}\n \n \n
\n

\n {storeSelectorViewProps.resources.contactText}\n

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

\n {storeSelectorViewProps.resources.timeText}\n

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

\n {productAvailability}\n

\n {stockStatus &&

\n {stockStatus}\n

}\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 { BodyContainerProps, storeResultContainerProps, FooterContainerProps, HeaderContainerProps, HeaderProps, 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 offSetTopHeight = 250;\n const parentClientHeight = 50;\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 scrollling.\n */\n const scrollIntoView = () => {\n const selectedLocationDiv = (selectedLocationReference as React.RefObject).current;\n if (selectedLocationDiv !== null) {\n const totalTopHeight = Number(selectedLocationDiv.offsetTop) + Number(selectedLocationDiv.clientHeight);\n const parent = selectedLocationDiv.parentElement?.parentElement;\n if (parent) {\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\n parent.scrollTop = selectedLocationDiv.offsetTop - offSetTopHeight;\n } else if (totalTopHeight > Number(parent.scrollTop) + Number(parent.clientHeight)) {\n parent.scrollTop = totalTopHeight - Number(parent.clientHeight) - parentClientHeight;\n }\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 \n {HeaderProps}\n \n \n \n {locationsMessage && }\n {search}\n \n \n {state.isSearchInProgress ? spinner : <>\n {locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n }\n \n {maps}\n \n \n {selectedLocation && renderSelectedStore(selectedLocation, props)}\n \n \n \n \n \n \n {terms}\n \n \n );\n }\n return (\n \n \n {HeaderProps}\n \n \n \n {locationsMessage && }\n {search}\n {state.isSearchInProgress ? spinner : <>\n {locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n }\n \n \n {maps}\n \n \n \n {terms}\n \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 { Alert, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICookieComplianceViewProps } from './cookie-compliance';\n\nconst CookieComplianceView: React.FC = props => {\n const { CookieComplianceBanner, AlertProps, Content, acceptButton, text, links } = props;\n\n return (\n \n \n \n {text}\n {links}\n \n {acceptButton}\n \n \n );\n};\nexport default CookieComplianceView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../account-generic-tile.props.autogenerated';\n\nexport interface IAccountGenericTileLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nconst AccountGenericTileLinks: React.FC = ({ links, telemetryContent, requestContext, onTextChange }) => {\n if (links.length === 0) {\n return null;\n }\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n
\n { editableLinks && editableLinks.length > 0 ? : null}\n
\n );\n};\n\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent?: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n const payLoad = getPayloadObject('click', telemetryContent!, '');\n linkdata.forEach((link, index) => {\n payLoad.contentAction.etext = link.linkText;\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-account-generic-tile__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n\nexport default AccountGenericTileLinks;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IGroup, IGroupDelivery, IGroups, IHeader, IList, IOrderHistoryViewProps, IOrderInformation, ISalesOrder } from '@msdyn365-commerce-modules/order-management';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const OrderHistoryOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n salesId,\r\n receiptId,\r\n channelName,\r\n createdDate,\r\n count,\r\n amount\r\n // channelReferenceId\r\n}) => (\r\n \r\n {channelName}\r\n {salesId}\r\n {receiptId}\r\n {createdDate}\r\n {count}\r\n {amount}\r\n {/* {channelReferenceId} */}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {processing}\r\n {address}\r\n {trackingInfo}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n {salesLine.salesLine}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderHistoryHeader: React.FC = ({ headerProps, heading, orderCountLabel, extraActions }) => (\r\n \r\n {heading}\r\n {orderCountLabel}\r\n {extraActions}\r\n \r\n);\r\n\r\nexport const OrderHistorySalesOder: React.FC = ({ salesOrderProps, orderInfomation, groups, orderDetailsLink, expandProductsButton }) => (\r\n \r\n {orderInfomation && }\r\n {groups && }\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n \r\n);\r\n\r\nexport const OrderHistoryList: React.FC = ({ listProps, salesOrders }) => (\r\n \r\n {salesOrders && salesOrders.map((salesOrder, index) => )}\r\n \r\n);\r\n\r\nconst OrderHistoryView: React.FC = ({\r\n orderHistoryProps,\r\n header,\r\n alert,\r\n loading,\r\n emptyMessage,\r\n backToShoppingLink,\r\n list,\r\n table,\r\n moreButton\r\n}) => (\r\n \r\n {header && }\r\n {loading}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {emptyMessage && (\r\n \r\n {emptyMessage}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {list && }\r\n {table}\r\n {moreButton && moreButton}\r\n \r\n);\r\n\r\nexport default OrderHistoryView;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILoyaltyTermsViewProps } from './loyalty-terms';\n\nconst LoyaltyTermsView: React.FC = props => {\n const { LoyaltyTerms, modalToggle, modal, loading } = props;\n\n return !loading && modal ? (\n \n {modalToggle}\n \n \n {modal.heading}\n \n \n {modal.terms}\n \n {modal.checkbox}\n {modal.agreeText}\n \n \n \n {modal.submitButton}\n {modal.cancelButton}\n \n \n \n ) : null;\n};\n\nexport default LoyaltyTermsView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 =\n Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\n return `${hours}:${minutes} ${ampm}`;\n\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: // 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: // Case 'SUN':\n return resources.days.sundayFull;\n }\n};\n\nconst buildHoursDisplayInfo = (startDay: DayType, endDay: DayType, hoursInfo: string, resources: IStoreSelectorLocationLineItemResources): 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};\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","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IEveMap contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum searchRadiusUnit {\r\n mi = 'mi',\r\n km = 'km'\r\n}\r\n\r\nexport interface IEveMapConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n pushpinOptions?: IPushpinOptionsData;\r\n className?: string;\r\n clientRender?: boolean;\r\n useChannelMfr?: boolean;\r\n autoSuggestionEnabled?: boolean;\r\n autoSuggestOptions?: IAutoSuggestOptionsData;\r\n searchRadiusUnit?: searchRadiusUnit;\r\n lookupRadius: number;\r\n pageLength: number;\r\n defaultLatitudeValue: number;\r\n defaultLongitudeValue: number;\r\n}\r\n\r\nexport interface IEveMapResources {\r\n searchPlaceholderText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n seeAllStoresText: string;\r\n milesShortText: string;\r\n kilometersShortText: string;\r\n contactText: string;\r\n emptyLocationsText: string;\r\n dealerCountMessage: string;\r\n dealerAllCountMessage: string;\r\n dealerCountMessageInKm: string;\r\n dealerDetailsText: string;\r\n dealerDetailsManufacturerCodeText: string;\r\n dealerDetailsLaborRateText: string;\r\n dealerDetailsDescriptionText: string;\r\n dealerDetailsNotesText: string;\r\n dealerDetailsContractCodeText: string;\r\n paginationPrev: string;\r\n paginationNext: string;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface IPushpinOptionsData {\r\n size?: number;\r\n color?: string;\r\n selectionColor?: string;\r\n showIndex?: boolean;\r\n}\r\n\r\nexport interface IAutoSuggestOptionsData {\r\n maxResults?: number;\r\n}\r\n\r\nexport interface IEveMapProps extends Msdyn365.IModule {\r\n resources: IEveMapResources;\r\n config: IEveMapConfig;\r\n}\r\n","// import * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IEveMapResources } from '../eve-map.props.autogenerated';\r\n\r\nexport interface IDealerSelectorEmptyMessageProps {\r\n resources: IEveMapResources;\r\n}\r\nexport const DealerSelectorEmptyMessage: React.FC = ({ resources }) => (\r\n
\r\n

{resources.emptyLocationsText}

\r\n
\r\n);\r\n\r\nexport const DealerSelectorWaiting: React.FC = () =>
;\r\n\r\nexport interface IDealerSelectorFoundLocationsMessage {\r\n resources: IEveMapResources;\r\n locations?: IFullOrgUnitAvailability[];\r\n searchRadius: number;\r\n preferredDistanceUnit: string;\r\n // isSeeAllStore: boolean;\r\n}\r\nexport const DealerSelectorFoundLocationsMessage: React.FC = ({\r\n locations,\r\n searchRadius,\r\n resources,\r\n preferredDistanceUnit\r\n // isSeeAllStore\r\n}) => {\r\n if (locations) {\r\n const dealerCountMessage =\r\n preferredDistanceUnit === resources.milesShortText ? resources.dealerCountMessage : resources.dealerCountMessageInKm;\r\n return (\r\n
\r\n {/* {isSeeAllStore\r\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\r\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())} */}\r\n {dealerCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\n// import { OrgUnitContact } from '@msdyn365-commerce/retail-proxy';\r\n// import { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\nimport { IDealerLocation } from '../../eve-map';\r\n\r\n/**\r\n * Store Locator line item resources.\r\n */\r\nexport interface IDealerLocatorLocationLineItemResources {\r\n contactInfoHeader: string;\r\n dealerDetailsHeader: string;\r\n dealerDetailsManufacturerCodeText: string;\r\n dealerDetailsLaborRateText: string;\r\n dealerDetailsDescriptionText: string;\r\n dealerDetailsNotesText: string;\r\n dealerDetailsContractCodeText: string;\r\n}\r\n\r\n/**\r\n * Store Locator line item props.\r\n */\r\nexport interface IDealerLocatorLocationLineItemProps {\r\n location: IDealerLocation;\r\n resources: IDealerLocatorLocationLineItemResources;\r\n index: string;\r\n preferredDistanceUnit: string;\r\n}\r\n\r\n/**\r\n * Function to render store hours.\r\n * @param storeHours - Store Hours object.\r\n * @param location - Store Unit.\r\n * @param resources - Resources.\r\n * @returns - Jsx element.\r\n */\r\nconst renderDealerDetails = (location: IDealerLocation, resources: IDealerLocatorLocationLineItemResources): JSX.Element | null => {\r\n const {\r\n dealerDetailsDescriptionText,\r\n // dealerDetailsLaborRateText,\r\n // dealerDetailsManufacturerCodeText\r\n dealerDetailsContractCodeText\r\n } = resources;\r\n\r\n // console.log('Rendering Details');\r\n if (location.ContractList) {\r\n // console.log(location);\r\n return (\r\n
\r\n {location.ContractList.length > 0\r\n ? location.ContractList.map(mfrCode => {\r\n return (\r\n <>\r\n
\r\n
\r\n

\r\n {`${mfrCode.ManufacturerCode} - ${mfrCode.ManufacturerName}`}\r\n

\r\n
\r\n
\r\n

\r\n \r\n {dealerDetailsContractCodeText}\r\n \r\n {mfrCode.ContractCode}\r\n

\r\n
\r\n
\r\n

\r\n \r\n {dealerDetailsDescriptionText}\r\n \r\n {mfrCode.ContractDescription}\r\n

\r\n
\r\n
\r\n \r\n );\r\n })\r\n : null}\r\n
\r\n );\r\n }\r\n return
;\r\n};\r\n\r\n/**\r\n * Function to retrun distance measure unit.\r\n * @param distance - Store location within radius.\r\n * @param preferredDistanceUnit - Unit configuration.\r\n * @param isLocationDisabled - Flag to check user location.\r\n * @returns - Unit of distance.\r\n */\r\nexport const buildDistanceString = (\r\n distance: number | undefined,\r\n preferredDistanceUnit: string,\r\n isLocationDisabled?: boolean\r\n): string | undefined => {\r\n if (distance === undefined || isLocationDisabled) {\r\n return undefined;\r\n } else if (distance < 1) {\r\n return `(<1 ${preferredDistanceUnit})`;\r\n }\r\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\r\n};\r\n\r\n/**\r\n * Function to store contact.\r\n * @param contacts - Store location within radius.\r\n * @returns - Return primary contact number of store.\r\n */\r\n// const extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\r\n// if (!contacts) {\r\n// return undefined;\r\n// }\r\n\r\n// const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\r\n\r\n// if (ArrayExtensions.hasElements(allPhoneContacts)) {\r\n// const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\r\n\r\n// if (primaryPhoneContact) {\r\n// return primaryPhoneContact.Locator;\r\n// }\r\n\r\n// return allPhoneContacts[0].Locator;\r\n// }\r\n\r\n// return undefined;\r\n// };\r\n\r\n/**\r\n * Renders store location line items.\r\n * @param props - Store location line items props.\r\n * @returns - HTML.\r\n */\r\nconst dealerLocatorLocationLineItem: React.FC = (props: IDealerLocatorLocationLineItemProps) => {\r\n const { location, resources, index } = props;\r\n\r\n // console.log(location);\r\n\r\n const storeName: string | undefined = location.OrgUnitName;\r\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit);\r\n const storeAddress: string | undefined = location.Address;\r\n // TODO: Need to fix the phone number portion when we actually have a phone number to use\r\n // const phoneNumber: string | undefined = extractPhoneNumber(location.PhoneNumber);\r\n\r\n const channelId: number | undefined = location.ChannelId;\r\n\r\n return (\r\n
\r\n
\r\n {/* {(shouldShowIndex || storeLocatorView) && {index}} */}\r\n {{index}}\r\n {storeName}\r\n {distanceAsString ? {distanceAsString} : false}\r\n
\r\n
\r\n
\r\n {/*

{resources.contactInfoHeader}

*/}\r\n {storeAddress && (\r\n
\r\n \r\n {storeAddress}\r\n
\r\n )}\r\n {/* TODO: Fix the phone number section when/if there is phone number data to display */}\r\n {/* {phoneNumber && (\r\n
\r\n \r\n {phoneNumber}\r\n
\r\n )} */}\r\n
\r\n
\r\n

{resources.dealerDetailsHeader}

\r\n {renderDealerDetails(location, resources)}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Store location line item component.\r\n */\r\nexport const DealerLocatorLocationLineItemComponent = dealerLocatorLocationLineItem as (\r\n props: IDealerLocatorLocationLineItemProps\r\n) => JSX.Element;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport { observable, reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IEveMapResources } from '../eve-map.props.autogenerated';\r\nimport { IDealerLocatorLocationLineItemResources, DealerLocatorLocationLineItemComponent } from './eve-map-location-line-item';\r\nimport { IDealerLocations, IDealerLocation } from '../eve-map';\r\n\r\n/**\r\n * Store selector location lines props interface.\r\n */\r\nexport interface IStoreSelectorLocationLinesProps {\r\n locations?: IDealerLocations[];\r\n resources: IEveMapResources;\r\n preferredDistanceUnit?: string;\r\n selectedStoreLocationId?: string;\r\n displayList?: boolean;\r\n onClick: (locationId: string | undefined) => void;\r\n}\r\n\r\n/**\r\n * Displays all the location line items, or null if none exists.\r\n */\r\n@observer\r\nexport class DealerLocatorLocationLines extends React.PureComponent {\r\n @observable private _stores: IDealerLocations[] | undefined;\r\n\r\n private readonly selectedLocationRef: React.RefObject;\r\n\r\n private storeCounter: number;\r\n\r\n public constructor(props: IStoreSelectorLocationLinesProps) {\r\n super(props);\r\n this.selectedLocationRef = React.createRef();\r\n this.storeCounter = 0;\r\n }\r\n\r\n public componentDidUpdate(previousProps: IStoreSelectorLocationLinesProps): void {\r\n if (this.props.selectedStoreLocationId !== previousProps.selectedStoreLocationId) {\r\n this._scrollIntoView();\r\n }\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (this.props.locations) {\r\n this._stores = [...this.props.locations];\r\n }\r\n\r\n reaction(\r\n () => this.props.locations,\r\n () => {\r\n if (this.props.locations) {\r\n this._stores = [...this.props.locations];\r\n }\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!ArrayExtensions.hasElements(this._stores)) {\r\n return null;\r\n }\r\n this.storeCounter = 0;\r\n\r\n return (\r\n
\r\n {this._stores.map((store, index) => {\r\n return this._renderStoreLocation(store, index);\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * On click Handler function.\r\n * @param orgUnitLocation -OrgUnit location.\r\n * @returns Click action on orgUnit Location.\r\n */\r\n private readonly onClickHandler = (orgUnitLocation: IDealerLocation | undefined) => () => {\r\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\r\n };\r\n\r\n private _renderStoreLocation(store: IDealerLocations, index: number): JSX.Element | undefined {\r\n const orgUnitLocation = store?.OrgUnitLocation;\r\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\r\n const defaultAriaSetsize = 0;\r\n if (orgUnitLocation) {\r\n ++this.storeCounter;\r\n return (\r\n \r\n \r\n
\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Scroll into view.\r\n */\r\n private readonly _scrollIntoView = () => {\r\n const selectedLocationDiv = this.selectedLocationRef.current;\r\n const parent = selectedLocationDiv?.parentElement;\r\n if (selectedLocationDiv && parent) {\r\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop;\r\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\r\n } else {\r\n parent.scrollTop = 0;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Is current location.\r\n * @param location - Org unit location.\r\n * @returns The current location.\r\n */\r\n // private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\r\n // (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\r\n // false;\r\n\r\n /**\r\n * Map resources.\r\n * @param resources - Store resoureces.\r\n * @returns Resources.\r\n */\r\n private readonly _mapResources = (resources: IEveMapResources): IDealerLocatorLocationLineItemResources => {\r\n return {\r\n contactInfoHeader: resources.contactText,\r\n dealerDetailsHeader: resources.dealerDetailsText,\r\n dealerDetailsManufacturerCodeText: resources.dealerDetailsManufacturerCodeText,\r\n dealerDetailsLaborRateText: resources.dealerDetailsLaborRateText,\r\n dealerDetailsDescriptionText: resources.dealerDetailsDescriptionText,\r\n dealerDetailsNotesText: resources.dealerDetailsNotesText,\r\n dealerDetailsContractCodeText: resources.dealerDetailsContractCodeText\r\n };\r\n };\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { KeyCodes } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Store Selector Search Form Props interface.\r\n */\r\nexport interface IDealerLocatorSearchFormProps {\r\n resources: {\r\n searchInputAriaLabel: string;\r\n searchButtonAriaLabel: string;\r\n searchPlaceholderText: string;\r\n seeAllStoresText: string;\r\n };\r\n id: string;\r\n value: string;\r\n performSearch(searchTerm: string): Promise;\r\n searchTermChanged(searchTerm: string): Promise;\r\n}\r\n\r\n/**\r\n * Simple search form consisting of search text and a search button.\r\n */\r\nexport class DealerLocatorSearchForm extends React.PureComponent {\r\n private readonly searchBoxRef: React.RefObject = React.createRef();\r\n\r\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n private previousValue: string = '';\r\n\r\n private isSearchResultOpened: boolean = false;\r\n\r\n public constructor(props: IDealerLocatorSearchFormProps) {\r\n super(props);\r\n this.state = { value: '' };\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n resources: { searchButtonAriaLabel, searchPlaceholderText },\r\n id,\r\n value\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Handles the key press on the input box.\r\n * @param event - Event object.\r\n */\r\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\r\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\r\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\r\n // In order to avoid that. Checking if the search result is open or not.\r\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\r\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\r\n if (activeDescedantValue) {\r\n if (this.previousValue === '') {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n return;\r\n }\r\n\r\n if (activeDescedantValue !== this.previousValue) {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n } else {\r\n this.isSearchResultOpened = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method called on search text changed.\r\n * @param event - Input value.\r\n */\r\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\r\n const inputValue: string = event.target.value;\r\n\r\n await this.props.searchTermChanged(inputValue);\r\n };\r\n\r\n /**\r\n * Method called on search submit.\r\n * @param event - Input value.\r\n */\r\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\r\n event.preventDefault(); // Prevents form submission\r\n this.searchBoxRef.current?.blur();\r\n if (!this.isSearchResultOpened) {\r\n await this.props.performSearch(this.props.value);\r\n }\r\n this.isSearchResultOpened = false;\r\n };\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/// \r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport {\r\n ArrayExtensions,\r\n // getOrgUnitLocationsByArea,\r\n // GetOrgUnitLocationsByAreaInput,\r\n IFullOrgUnitAvailability\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { /*IStoreInfo,*/ IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport { IModuleProps, NodeTag, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport { observable, reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport * as _ from 'lodash';\r\n\r\nimport { IEveMapData } from './eve-map.data';\r\nimport { IEveMapProps, IPushpinOptionsData, searchRadiusUnit as SearchRadiusUnit } from './eve-map.props.autogenerated';\r\n// import getDealerDetails, { GetDealerDetailsInput } from '../../actions/get-dealer-details.action';\r\nimport getDealerLocations, { GetDealerLocationsInput } from '../../actions/get-dealer-locations.action';\r\nimport { IDealerEntity } from '../../actions/DataServiceEntities.g';\r\nimport { getDealerDetailsAsync /*, getDealerLocationsAsync*/ } from '../../actions/DataActionExtension.g';\r\nimport {\r\n DealerSelectorWaiting,\r\n DealerSelectorEmptyMessage,\r\n DealerSelectorFoundLocationsMessage,\r\n DealerLocatorLocationLines,\r\n DealerLocatorSearchForm\r\n} from './components';\r\n\r\n/**\r\n * Header Interface.\r\n */\r\nexport interface IHeader {\r\n headerProps: INodeProps;\r\n heading: React.ReactNode;\r\n}\r\n\r\n/**\r\n * MapViewProps Interface.\r\n */\r\nexport interface IMapViewProps extends IEveMapProps {\r\n ModuleProps: IModuleProps;\r\n Header: IHeader;\r\n MapProps: INodeProps;\r\n Map: Microsoft.Maps.Map | undefined;\r\n locationsMessage?: React.ReactNode;\r\n search?: React.ReactNode;\r\n spinner?: React.ReactNode;\r\n locationsList?: React.ReactNode;\r\n noLocationsMessage?: React.ReactNode;\r\n dealerResultContainerProps?: INodeProps;\r\n state: IEveMapState;\r\n}\r\n\r\n/**\r\n * EveMap State Interface.\r\n */\r\nexport interface IEveMapState {\r\n searchTerm?: string;\r\n isSearchInProgress: boolean;\r\n distanceResults: IDistanceResults;\r\n mapSessionId: string | undefined;\r\n dealerLocations: IFullOrgUnitAvailability[] | undefined;\r\n newDealerLocations: IDealerLocations[] | undefined;\r\n}\r\n\r\nexport interface ICoordinates {\r\n latitude: number;\r\n longitude: number;\r\n}\r\n\r\nexport interface IDistanceMatrixResult {\r\n destinationIndex: number;\r\n originIndex: number;\r\n totalWalkDuration: number;\r\n // travelDistance arrives in kilometers\r\n travelDistance: number;\r\n travelDuration: number;\r\n}\r\n\r\nexport interface IDistanceResults {\r\n originCoords: ICoordinates;\r\n resultsCoords: IDistanceMatrixResult[];\r\n}\r\n\r\nexport interface IDealerLocation {\r\n ChannelId?: number;\r\n Latitude?: number;\r\n Longitude?: number;\r\n OrgUnitName?: string;\r\n OrgUnitNumber?: string;\r\n Address?: string;\r\n PhoneNumber?: string;\r\n Distance?: number;\r\n ContractCode?: string;\r\n ContractCompensationRate?: number;\r\n ContractDescription?: string;\r\n ContractLaborRate?: number;\r\n ContractListedUnlisted?: boolean;\r\n ContractNotes?: string;\r\n ContractStatus?: boolean;\r\n ManufacturerCode?: string;\r\n ContractList?: IDealerEntity[];\r\n RecId?: number;\r\n}\r\n\r\nexport interface IDealerLocations {\r\n OrgUnitAvailability?: {\r\n OrgUnitLocation?: IDealerLocation;\r\n };\r\n OrgUnitLocation?: IDealerLocation;\r\n}\r\n\r\n// xoxo - does this actually need to be here?\r\nexport interface IEveMapPropsExtended extends IEveMapProps {\r\n mapData: any;\r\n}\r\n\r\n/**\r\n *\r\n * Map component.\r\n * @extends {React.Component>}\r\n */\r\n@observer\r\nclass Map extends React.PureComponent {\r\n @observable public map: Microsoft.Maps.Map | undefined;\r\n\r\n @observable public selectedDealer: IDealerEntity[] | undefined;\r\n\r\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\r\n\r\n private readonly mapRef: React.RefObject = React.createRef();\r\n\r\n private readonly kmToMiValue: number = 1.609;\r\n\r\n private readonly defaultLookUpRadius: number = 200;\r\n\r\n public constructor(props: IEveMapPropsExtended) {\r\n super(props);\r\n this.state = {\r\n searchTerm: '',\r\n isSearchInProgress: true,\r\n distanceResults: { originCoords: { latitude: 0, longitude: 0 }, resultsCoords: [] },\r\n dealerLocations: [],\r\n newDealerLocations: [],\r\n mapSessionId: undefined\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\r\n // data: {\r\n // storeLocations: { result: storeLocations }\r\n // }\r\n } = this.props;\r\n\r\n // // Adding Timeout to make sure it loads the data based upon the preferred store.\r\n setTimeout(() => {\r\n this._getAndUpdateStoreLocation();\r\n }, 0);\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\r\n async () => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (!context || context.id === this.props.id) {\r\n await this._searchTermChanged('');\r\n this._getAndUpdateStoreLocation();\r\n this._updateMap();\r\n }\r\n }\r\n );\r\n\r\n // if (storeLocations) {\r\n // console.log(storeLocations);\r\n // this.setState({ newDealerLocations: [...storeLocations] });\r\n // // if (this.state.newDealerLocations) {\r\n // void this._setOrgUnitStoreInformation(storeLocations);\r\n // // }\r\n // }\r\n\r\n this.map?.setOptions({ navigationBarMode: Microsoft.Maps.NavigationBarMode.minified });\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n this._initMap();\r\n this._updateMap();\r\n }\r\n\r\n when(\r\n () => !!this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded(true);\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\r\n key: channel?.BingMapsApiKey,\r\n lang: this.props.context.actionContext.requestContext.locale,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\r\n });\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\r\n () => {\r\n this._initMap();\r\n }\r\n );\r\n\r\n reaction(\r\n () => {\r\n return [\r\n this.props.data.storeSelectorStateManager.result?.context?.orgUnitStoreInformation,\r\n this.props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\r\n this.map\r\n ];\r\n },\r\n () => {\r\n this._updateMap();\r\n }\r\n );\r\n\r\n if (isAutoSuggestionEnabled) {\r\n when(\r\n () => {\r\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\r\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\r\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\r\n return isMapApiLoaded && isDialogOpen && isSameContext;\r\n },\r\n () => {\r\n setTimeout(async () => {\r\n await this._attachMapAutoSuggest();\r\n }, 0);\r\n }\r\n );\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(): boolean {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n if (context && context.id === this.props.id) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n config: { heading, className, lookupRadius, searchRadiusUnit },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n resources\r\n } = this.props;\r\n const { newDealerLocations } = this.state;\r\n const shouldDisplayMap = storeSelectorStateManager?.listMapViewState.displayMap;\r\n const preferredDistanceUnit = searchRadiusUnit === SearchRadiusUnit.km ? resources.kilometersShortText : resources.milesShortText;\r\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n\r\n // let dealerLocationList: IDealerLocations[] = newDealerLocations || [];\r\n // const unsortedDealerList = [...dealerLocationList];\r\n // dealerLocationList = this._sortStores(unsortedDealerList);\r\n // console.log('sorted');\r\n // console.log(dealerLocationList);\r\n // const paginatedLocationsList = newDealerLocations?.slice(0, this.props.config.pageLength);\r\n\r\n // const pagination = (\r\n // );\r\n\r\n const viewProps: IMapViewProps = {\r\n ...this.props,\r\n state: this.state,\r\n ModuleProps: {\r\n tag: 'div',\r\n moduleProps: this.props,\r\n className: classname('ms-map', { show: shouldDisplayMap }, className)\r\n },\r\n Header: {\r\n headerProps: { className: 'ms-map__header' },\r\n heading: heading?.text && (\r\n \r\n )\r\n },\r\n dealerResultContainerProps: {\r\n tag: 'div' as NodeTag,\r\n className: 'ms-store-select__dealer_container'\r\n },\r\n spinner: ,\r\n noLocationsMessage: ,\r\n locationsMessage: (\r\n \r\n ),\r\n locationsList:\r\n // ArrayExtensions.hasElements(dealerLocationList) && dealerLocationList[0].OrgUnitLocation ? (\r\n // \r\n ArrayExtensions.hasElements(newDealerLocations) && newDealerLocations[0].OrgUnitLocation ? (\r\n \r\n ) : (\r\n undefined\r\n ),\r\n search: (\r\n \r\n ),\r\n MapProps: {\r\n tag: 'div',\r\n className: 'ms-map__body',\r\n ref: this.mapRef\r\n },\r\n Map: this.map\r\n };\r\n if (newDealerLocations) {\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n // if (this.state.dealerLocations) {\r\n // return this.props.renderView(viewProps) as React.ReactElement;\r\n // }\r\n return <>;\r\n }\r\n\r\n /**\r\n * Initialize Map AutoSuggest.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise => {\r\n const {\r\n config: { autoSuggestOptions },\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\r\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\r\n /**\r\n * Callback for the autosuggest API.\r\n */\r\n callback: () => {\r\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\r\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\r\n this.autoSuggestManager.attachAutosuggest(\r\n `#ms-store-select__search-box_${this.props.id}`,\r\n `#ms-store-select__search-box-container_${this.props.id}`,\r\n this._onSuggestionSelected\r\n );\r\n },\r\n\r\n /**\r\n * Error call back for autosuggest API.\r\n */\r\n errorCallback: () => {\r\n if (telemetry) {\r\n telemetry.debug('Unable to attach map auto suggest.');\r\n }\r\n },\r\n credentials: channel?.BingMapsApiKey\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * On Selecting Location Suggestion.\r\n * @param result - Map Suggestions List.\r\n */\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (context && context.id === this.props.id) {\r\n await this._searchTermChanged(result.formattedSuggestion);\r\n await this._performSearch(result.formattedSuggestion);\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called updating the store location.\r\n * @param shouldShowAllStores - Flag to show all stores.\r\n */\r\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\r\n // const {\r\n // // config: { style },\r\n // data: {\r\n // storeSelectorStateManager: { result: storeSelectorStateManager }\r\n // }\r\n // } = this.props;\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true });\r\n if (navigator?.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n async position => {\r\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\r\n this.setState({ isSearchInProgress: true });\r\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n async error => {\r\n // If the location setting is turned off\r\n if (error.PERMISSION_DENIED) {\r\n await this._searchTermChanged('');\r\n await this._updateLocations(0, 0, 0);\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n { timeout: 5000 }\r\n );\r\n } else {\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called on heading change.\r\n * @param event -Content Edit Event.\r\n */\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\r\n this.props.config.heading!.text = event.target.value;\r\n };\r\n\r\n /**\r\n * Initialize the map.\r\n */\r\n private readonly _initMap = () => {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.map = new Microsoft.Maps.Map(this.mapRef.current as HTMLElement, {\r\n credentials: channel?.BingMapsApiKey,\r\n pushpinAccessible: true\r\n });\r\n Microsoft.Maps.Events.addHandler(this.map, 'click', async () => {\r\n await storeSelectorStateManager.setSelectedStoreLocationId(undefined);\r\n });\r\n this.map.getCredentials((credentials: string) => {\r\n // TODO: Need to figure out why using map session id in place of api key does not work.\r\n this.setState({ mapSessionId: credentials });\r\n });\r\n this._updateMap();\r\n }\r\n };\r\n\r\n /**\r\n * Update the map.\r\n */\r\n private readonly _updateMap = () => {\r\n const pushpinOptions = this.props.config.pushpinOptions;\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager?.result;\r\n const orgUnitStoreInformation = storeSelectorStateManager?.context?.orgUnitStoreInformation;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n if (this.map && orgUnitStoreInformation) {\r\n let mapLocation: OrgUnitLocation | undefined;\r\n this.map.entities.clear();\r\n // const pushpins: Microsoft.Maps.IPrimitive[] = [];\r\n const pushpins: Microsoft.Maps.Pushpin[] = [];\r\n\r\n const storeLocationList = orgUnitStoreInformation.filter(store => store.OrgUnitLocation !== undefined);\r\n\r\n for (const [index, unitStoreInfo] of storeLocationList.entries()) {\r\n const storeLocation = unitStoreInfo.OrgUnitLocation;\r\n\r\n if (storeLocation?.Latitude && storeLocation.Longitude) {\r\n const isSelectedLocation = selectedStoreLocationId === storeLocation.OrgUnitNumber;\r\n const options = this._getPushpinOptions(isSelectedLocation, index, pushpinOptions);\r\n const pushpin = new Microsoft.Maps.Pushpin(\r\n new Microsoft.Maps.Location(storeLocation.Latitude, storeLocation.Longitude),\r\n options\r\n );\r\n\r\n Microsoft.Maps.Events.addHandler(pushpin, 'click', () => {\r\n this.handleClickEvent(storeLocation.OrgUnitNumber);\r\n });\r\n isSelectedLocation ? pushpins.unshift(pushpin) : pushpins.push(pushpin);\r\n\r\n if (isSelectedLocation) {\r\n mapLocation = storeLocation;\r\n }\r\n }\r\n }\r\n\r\n if (mapLocation) {\r\n const currentLocation = new Microsoft.Maps.Location(mapLocation.Latitude, mapLocation.Longitude);\r\n this.map.setView({ center: currentLocation });\r\n } else {\r\n // Create a LocationRect from array of pushpins and set the eve-map view.\r\n this.map.setView({\r\n bounds: Microsoft.Maps.LocationRect.fromShapes(pushpins),\r\n padding: 80\r\n });\r\n }\r\n\r\n let clusterLayer;\r\n // //Load the Clustering module.\r\n Microsoft.Maps.loadModule('Microsoft.Maps.Clustering', function() {\r\n //Create a ClusterLayer and add it to the map.\r\n clusterLayer = new Microsoft.Maps.ClusterLayer(pushpins);\r\n });\r\n if (clusterLayer) {\r\n this.map.layers.insert(clusterLayer);\r\n }\r\n this.map.setOptions({ pushpinAccessible: true });\r\n // this.map.entities.push(pushpins);\r\n }\r\n };\r\n\r\n /**\r\n * Handle click event.\r\n * @param orgUnitNumber - Organization unit number.\r\n */\r\n private readonly handleClickEvent = async (orgUnitNumber: string | undefined): Promise => {\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\r\n const currentSelectedStore = storeSelectorStateManager?.selectedStoreLocationId;\r\n if (currentSelectedStore === orgUnitNumber) {\r\n return;\r\n }\r\n if (storeSelectorStateManager && storeSelectorStateManager.context && storeSelectorStateManager.context.orgUnitStoreInformation) {\r\n storeSelectorStateManager.setSelectedStoreLocationId(undefined);\r\n // const _locations = [...storeSelectorStateManager.context.orgUnitStoreInformation];\r\n // const channel = _locations.filter(store => {\r\n // if (store.OrgUnitLocation?.OrgUnitNumber === orgUnitNumber) {\r\n // return true;\r\n // }\r\n // return false;\r\n // })[0].OrgUnitLocation?.ChannelId;\r\n // const getDealerDetailInput = new GetDealerDetailsInput(orgUnitNumber || '');\r\n\r\n // Add conditional to check to see if ContractList exists or not\r\n if (orgUnitNumber) {\r\n const dealerDetails = await getDealerDetailsAsync({ callerContext: this.props.context.actionContext }, orgUnitNumber);\r\n this.selectedDealer = dealerDetails;\r\n const tempDealerLocations = [...(this.state.newDealerLocations || [])];\r\n const index = tempDealerLocations.findIndex(loc => loc.OrgUnitLocation?.OrgUnitNumber === orgUnitNumber);\r\n if (tempDealerLocations[index].OrgUnitLocation) {\r\n tempDealerLocations[index].OrgUnitLocation!.ContractList = dealerDetails;\r\n }\r\n\r\n this.setState(prev => {\r\n return {\r\n ...prev,\r\n newDealerLocations: tempDealerLocations\r\n };\r\n });\r\n\r\n // void getDealerDetails(getDealerDetailInput, this.props.context.actionContext).then(res => {\r\n // this.selectedDealer = res.dealerDetails;\r\n // console.log(this.selectedDealer);\r\n // const tempDealerLocations = [...(this.state.newDealerLocations || [])];\r\n // tempDealerLocations.map(location => {\r\n // if (location.OrgUnitLocation?.OrgUnitNumber === orgUnitNumber) {\r\n // location.OrgUnitLocation = { ...location.OrgUnitLocation, ContractList: res.dealerDetails };\r\n // }\r\n // });\r\n // this.setState(prev => {\r\n // return {\r\n // ...prev,\r\n // newDealerLocations: tempDealerLocations\r\n // };\r\n // });\r\n // });\r\n if (orgUnitNumber) {\r\n storeSelectorStateManager?.setSelectedStoreLocationId(orgUnitNumber);\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called on search.\r\n * @param searchTerm - Search string.\r\n */\r\n private readonly _performSearch = async (searchTerm: string): Promise => {\r\n const {\r\n context: { actionContext },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!searchTerm || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true });\r\n\r\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\r\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\r\n if (location) {\r\n await this._updateLocations(location.latitude, location.longitude);\r\n } else {\r\n await this._updateLocations();\r\n }\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n };\r\n\r\n /**\r\n * Method to be called on search term changed.\r\n * @param searchTerm - Search string.\r\n */\r\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\r\n this.setState({ searchTerm });\r\n };\r\n\r\n /**\r\n * Method to update user location.\r\n * @param latitude - User location.\r\n * @param longitude - User location.\r\n * @param radius - Search Criteria Radius.\r\n * @returns Void promise.\r\n */\r\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\r\n const {\r\n config: { lookupRadius, searchRadiusUnit, defaultLatitudeValue, defaultLongitudeValue },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.km ? 1 : 0;\r\n const lookupDistanceInMiles = lookupRadius\r\n ? distanceUnitValue\r\n ? Math.round(lookupRadius / this.kmToMiValue)\r\n : lookupRadius\r\n : this.defaultLookUpRadius;\r\n // const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\r\n\r\n let localLatitude = latitude || defaultLatitudeValue;\r\n let long = longitude || defaultLongitudeValue;\r\n\r\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\r\n if (lastInlineStoreLocation && !this.state.searchTerm) {\r\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\r\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\r\n }\r\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\r\n await this.getOrgUnitLocationByArea(lookupDistanceInMiles, distanceUnitValue, localLatitude, long);\r\n return;\r\n };\r\n\r\n /**\r\n * Get org unit location by area.\r\n * @param calRadius - Radius.\r\n * @param distanceUnitValue - Distance unit value.\r\n * @param latitude - Latitude.\r\n * @param longitude - Longitude.\r\n * @returns - Returns a void promise.\r\n */\r\n private readonly getOrgUnitLocationByArea = async (\r\n calRadius: number,\r\n distanceUnitValue: number,\r\n latitude?: number,\r\n longitude?: number\r\n ): Promise => {\r\n const {\r\n context: { actionContext }\r\n } = this.props;\r\n // const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(latitude, longitude, calRadius, distanceUnitValue);\r\n\r\n // const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\r\n const newOrgUnitLocationsInput = new GetDealerLocationsInput(false, latitude || 0, longitude || 0, calRadius);\r\n const newOrgUnits = await getDealerLocations(newOrgUnitLocationsInput, actionContext);\r\n // console.log(newOrgUnits);\r\n if (newOrgUnits && this.state.newDealerLocations) {\r\n // await this.updateDistances(this.state.newDealerLocations, latitude || 0, longitude || 0);\r\n // const updatedLocationsList: IFullOrgUnitAvailability[] = this.state.newDealerLocations.map((store, index) => {\r\n // const _store: IFullOrgUnitAvailability = _.cloneDeep(store);\r\n // if (\r\n // _store.OrgUnitLocation &&\r\n // _store.OrgUnitAvailability &&\r\n // _store.OrgUnitAvailability.OrgUnitLocation &&\r\n // this.state.distanceResults.resultsCoords.length > 1\r\n // ) {\r\n // const travelDistance =\r\n // this.props.config.searchRadiusUnit === 'km'\r\n // ? this.state.distanceResults.resultsCoords[index].travelDistance\r\n // : this.state.distanceResults.resultsCoords[index].travelDistance * 0.62137;\r\n // _store.OrgUnitLocation.Distance = travelDistance;\r\n // _store.OrgUnitAvailability.OrgUnitLocation.Distance = travelDistance;\r\n // }\r\n // return _store;\r\n // });\r\n void this._setOrgUnitStoreInformation(newOrgUnits).then(() => {\r\n this.setState({ newDealerLocations: [...newOrgUnits] });\r\n });\r\n }\r\n // if (orgUnitLocations && this.state.newDealerLocations) {\r\n // // await this.updateDistances(this.state.newDealerLocations, latitude || 0, longitude || 0);\r\n // const updatedLocationsList: IFullOrgUnitAvailability[] = this.state.newDealerLocations.map((store, index) => {\r\n // const _store: IFullOrgUnitAvailability = _.cloneDeep(store);\r\n // if (\r\n // _store.OrgUnitLocation &&\r\n // _store.OrgUnitAvailability &&\r\n // _store.OrgUnitAvailability.OrgUnitLocation &&\r\n // this.state.distanceResults.resultsCoords.length > 1\r\n // ) {\r\n // const travelDistance =\r\n // this.props.config.searchRadiusUnit === 'km'\r\n // ? this.state.distanceResults.resultsCoords[index].travelDistance\r\n // : this.state.distanceResults.resultsCoords[index].travelDistance * 0.62137;\r\n // _store.OrgUnitLocation.Distance = travelDistance;\r\n // _store.OrgUnitAvailability.OrgUnitLocation.Distance = travelDistance;\r\n // }\r\n // return _store;\r\n // });\r\n // await this._setOrgUnitStoreInformation(updatedLocationsList).then(() =>\r\n // this.setState({ newDealerLocations: [...updatedLocationsList] })\r\n // );\r\n // }\r\n };\r\n\r\n /**\r\n * Method to set store info.\r\n * @param orgUnitStoreInformation - Store Info Object.\r\n * @returns Void promise.\r\n */\r\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n telemetry\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n const context = storeSelectorStateManager.context;\r\n const moduleId: string = context?.id ? context.id : this.props.id;\r\n let input: IStoreSelectionStateContext = {\r\n /**\r\n * On Location selected.\r\n * @returns - Returns promise.\r\n */\r\n onLocationSelected: async () => {\r\n return Promise.resolve();\r\n }\r\n };\r\n\r\n if (storeSelectorStateManager.context) {\r\n input = storeSelectorStateManager.context;\r\n }\r\n\r\n // const storeLocationList = this._sortStores(orgUnitStoreInformation);\r\n input = {\r\n ...input,\r\n id: moduleId,\r\n showMapViewLink: context?.showMapViewLink,\r\n parentElementRef: context?.parentElementRef,\r\n orgUnitStoreInformation: orgUnitStoreInformation,\r\n product: context?.product\r\n };\r\n\r\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\r\n if (telemetry) {\r\n telemetry.error(error.message);\r\n telemetry.debug('Unable to Update store location state');\r\n }\r\n });\r\n };\r\n\r\n // /**\r\n // * Method will sort all stores.\r\n // * @param stores -Stores List.\r\n // * @param isPreferredStoreEnabled -Module config value.\r\n // * @param preferredStoreLocationId -Store Id.\r\n // * @returns List of Stores.\r\n // */\r\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\r\n // private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\r\n // const {\r\n // config: { lookupRadius }\r\n // } = this.props;\r\n // const sortedStores = [...stores];\r\n // if (sortedStores.filter(store => store.OrgUnitLocation?.Distance).length > 0) {\r\n // return [\r\n // ...sortedStores\r\n // .sort((a, b) => a.OrgUnitLocation!.Distance! - b.OrgUnitLocation!.Distance!)\r\n // .filter(store => store.OrgUnitLocation!.Distance! <= lookupRadius)\r\n // ];\r\n // }\r\n // return [...sortedStores];\r\n // }\r\n\r\n // private async updateDistances(storeLocationList: IFullOrgUnitAvailability[], latitude: number, longitude: number) {\r\n // const {\r\n // distanceResults: {\r\n // originCoords: { latitude: originLat, longitude: originLon }\r\n // }\r\n // } = this.state;\r\n // if (latitude !== originLat && longitude !== originLon) {\r\n // let dealerLocationCoordsString: string = '&destinations=';\r\n // storeLocationList.map((store, index) => {\r\n // dealerLocationCoordsString += `${store.OrgUnitLocation?.Latitude},${store.OrgUnitLocation?.Longitude}`;\r\n // if (index < storeLocationList.length - 1) {\r\n // dealerLocationCoordsString += ';';\r\n // }\r\n // });\r\n // const currentLocation = `?origins=${latitude},${longitude}`;\r\n // // const apiKey = this.props.context.actionContext.requestContext.channel?.BingMapsApiKey;\r\n // const modeAndApiString = `&travelMode=driving&key=${apiKey}`;\r\n // // const modeAndApiString = `&travelMode=driving&key=${this.state.mapSessionId ? this.state.mapSessionId : apiKey}`;\r\n // // TODO: Figure out how to use the session id, does it need to be a separate id for the distance matrix?\r\n // // currently getting authorization errors when using it.\r\n\r\n // const distanceMatrixUrl = `https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix${currentLocation}${dealerLocationCoordsString}${modeAndApiString}`;\r\n\r\n // const resultsCoords = await this.getDistances(distanceMatrixUrl).then(results => {\r\n // this.setState(prev => {\r\n // return {\r\n // ...prev,\r\n // distanceResults: {\r\n // originCoords: { latitude: latitude || 0, longitude: longitude || 0 },\r\n // resultsCoords: [...results]\r\n // }\r\n // };\r\n // });\r\n // });\r\n // }\r\n\r\n // console.log('Updating distances.');\r\n // }\r\n\r\n // private async getDistances(url: string) {\r\n // try {\r\n // const response = await fetch(url);\r\n // const data = await response.json();\r\n // return data.resourceSets[0].resources[0].results;\r\n // } catch (error) {\r\n // console.log(error);\r\n // }\r\n // }\r\n\r\n /**\r\n * Get the pushpin option.\r\n * @param isSelectedLocation - Is selected location.\r\n * @param index - Index.\r\n * @param pushpinOptions - PushpinOptions.\r\n * @returns - The pushpin options.\r\n */\r\n private readonly _getPushpinOptions = (isSelectedLocation: boolean, index: number, pushpinOptions?: IPushpinOptionsData) => {\r\n const text = pushpinOptions?.showIndex ? (index + 1).toString() : undefined;\r\n\r\n const size = pushpinOptions?.size || 1;\r\n const color = isSelectedLocation ? pushpinOptions?.selectionColor || pushpinOptions?.color : pushpinOptions?.color;\r\n const icon = this._getSvgIcon(size, color, text);\r\n\r\n return {\r\n // Fallback if icon doesn't render properly\r\n color: isSelectedLocation ? pushpinOptions?.selectionColor : pushpinOptions?.color,\r\n icon\r\n };\r\n };\r\n\r\n private readonly _getSvgIcon = (size: number, color?: string, text?: string) => {\r\n const baseValue: number = 32;\r\n return `\r\n \r\n ${text ? `${text}` : ''}\r\n `;\r\n };\r\n}\r\n\r\nexport default Map;\r\n"],"sourceRoot":""}