{"version":3,"sources":["webpack:///src/modules/store-selector/store-selector.view.tsx?b873","webpack:///src/modules/account-profile-edit/components/account-profile-edit-loading-icon.tsx?e178","webpack:///src/index.ts?c6ae","webpack:///src/modules/iframe/iframe.tsx?d14a","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-profile-edit/components/account-profile-edit-button.tsx?8f71","webpack:///src/modules/adventureworks/views/write-review.view.tsx?7a62","webpack:///src/modules/iframe/iframe.view.tsx?dd86","webpack:///src/modules/account-profile-edit/components/account-profile-edit-label.tsx?505c","webpack:///src/modules/adventureworks/views/order-details.view.tsx?1e8c","webpack:///src/modules/account-profile-edit/components/account-profile-edit-error.tsx?a0b2","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/account-profile-edit/account-profile-edit.view.tsx?72b7","webpack:///./src/modules/eve-map/eve-map.view.tsx?e389","webpack:///./src/themes/gardner-theme/views/reviews-list.view.tsx?793e","webpack:///src/modules/store-selector/components/pickup-option-list.tsx?9a9c","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/adventureworks/views/cart.view.tsx?7e13","webpack:///./src/themes/gardner-theme-b2c/views/reviews-list.view.tsx?971a","webpack:///src/modules/account-profile-edit/components/account-profile-edit-loading-message.tsx?2c6f","webpack:///src/modules/fabrikam/views/order-details.view.tsx?2a61","webpack:///src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?89f3","webpack:///src/modules/account-profile-edit/components/account-profile-edit-input.tsx?3bba","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/components/eve-line-pagination.tsx?9f8b","webpack:///./src/modules/eve-map/eve-map.tsx?5859","webpack:///src/modules/account-profile-edit/account-profile-edit.tsx?a9d6"],"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","AccountProfileEditLoadingIcon","_ref","className","Iframe","constructor","super","this","iframeRef","render","config","resources","isConsentGiven","context","request","cookies","target","destinationUrl","srcURL","URL","error","telemetry","exception","protocol","toLocaleLowerCase","iframeClassName","classnames","viewProps","_objectSpread","Heading","_createHeading","heading","IframeContainer","moduleProps","IFrame","_createIframe","cookieConsentAccepted","alert","_renderAlert","cookieConsentRequiredMessage","renderView","text","length","message","role","targetURL","src","height","iframeAriaLabel","ref","onPickupInStoreClickHandler","_props$selectedStore","selectedStore","OrgUnitAvailability","OrgUnitLocation","handlers","onSelected","onSetPreferredStoreClickHandler","_props$selectedStore2","onSetAsPreferredStore","OrgUnitNumber","onChangeHandler","async","_props$selectedStore3","deliveryCode","Promise","resolve","removePreferredStoreHandler","onRemovePreferredStore","onPickupModeSelectHandler","pickupMode","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","renderPickupModes","deliveryOptionList","pickupInStoreButtonText","pickupInStoreAriaLabel","undefined","filteredPickupMode","createElement","PickUpOptionList","pickupListOptionMenuText","pickupmodeList","onChange","onClick","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","isInStock","stockStatusLabel","preferredStoreLocationId","isPreferredStoreEnabled","isLocationDisabled","telemetryContent","storePickUpOptionList","productPickUpOptionList","preferredDistanceUnit","parentClassName","OrgUnitName","location","distanceAsString","buildDistanceString","Distance","resourceLabel","inStock","outOfStock","stockLabel","stockText","selectLocation","selectLocationAriaLabelFormat","replace","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","attributes","getTelemetryAttributes","contentAction","etext","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","matchDeliveryOptions","tag","Button","availabilityInfoHeader","preferredStoreAriaLabel","preferredStoreText","setAsPreferredStoreTextAriaLabel","setAsPreferredStoreText","StoreSelector","shouldHideInventory","preferredStore","hasEnabledOutOfStockCheck","shouldDisplayList","data","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","handleLinkTextChange","event","termsOfServiceLink","linkText","value","handleHeadingChange","onShowAllStoresHandler","_getAndUpdateStoreLocation","setState","onFilterLocations","stores","filter","_location$OrgUnitPick","some","deliveryOption","Code","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","actionContext","requestContext","channel","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","id","_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","radius","lookupRadius","searchRadiusUnit","calRadius","distanceUnitValue","modeDefault","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","RecordId","warning","deliveryMode","contactInfoHeader","contactText","storeHoursHeader","timeText","availabilityText","closedText","storeHoursClosedText","outOfStockText","inStockText","selectedStoreLocationText","selectStoreText","selectStoreAriaFormatText","days","monday","storeHoursMondayText","tuesday","storeHoursTuesdayText","wednesday","storeHoursWednesdayText","thursday","storeHoursThursdayText","friday","storeHoursFridayText","saturday","storeHoursSaturdayText","sunday","storeHoursSundayText","mondayFull","storeHoursMondayFullText","tuesdayFull","storeHoursTuesdayFullText","wednesdayFull","storeHoursWednesdayFullText","thursdayFull","storeHoursThursdayFullText","fridayFull","storeHoursFridayFullText","saturdayFull","storeHoursSaturdayFullText","sundayFull","storeHoursSundayFullText","hasEnableOutOfStockCheck","itemAvailabilities","AvailableQuantity","ProductInventoryInformation","index","_isInStock$OrgUnitAva","InventoryLocationId","InventLocationId","StockLevelLabel","getTelemetryObject","telemetryPageName","friendlyName","storeCounter","_this$props$data$stor6","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$context","setTimeout","reaction","_this$props$data$stor2","_this$props$data$stor3","_this$props$data$stor4","_this$props$data$stor5","loadMapApi","key","BingMapsEnabled","lang","locale","market","_this$props$data$stor7","_this$props$data$stor8","_this$props$context$a","_this$props$data$stor9","when","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","isSameContext","shouldComponentUpdate","_storeSelectorStateMa2","_storeSelectorStateMa3","_sortLocation","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","shouldSetAsPreferredStore","showAllStores","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","app","appConfig","slots","mapSlot","isMobileDevice","isMobile","variant","VariantType","Viewport","isMapDisabled","isInlineView","isLocatorView","listMapViewState","displayList","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","milesShortText","sortLocation","isEnableOutofStock","enableStockCheck","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","Modal","classname","autoFocus","fade","isOpen","onClosed","horizontalPosition","verticalPosition","toggle","ModalHeader","Msdyn365","editProps","onEdit","ModalFooter","ModalBody","StoreSelectorFoundLocationsMessage","locations","searchRadius","isSeeAllStore","StoreSelectorSearchForm","performSearch","searchTermChanged","onShowAllStores","onToggleListMapViewState","locatorView","productPickUpDeliveryOptions","filterPickupModeSelected","hasEnabledPickupFilterToShowStore","StoreSelectorWaiting","StoreSelectorLocationLines","outOfStockThreshold","enableOutOfStockCheck","storeLocatorView","shouldShowIndex","StoreSelectorEmptyMessage","StoreSelectorTermsOfService","link","onTextChange","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","_value$OrgUnitAvailab","isStoreLocatorView","storeList","map","storeLineProps","_createStoreLocationList","push","_store$OrgUnitAvailab3","selectedStoreLocation","lineResources","storeOpenFrom","secondsToTime","OpenFrom","storeOpenTo","OpenTo","storeHours","StoreHours","_store$OrgUnitAvailab4","hideStockStatus","toString","locationOpen","openFrom","openTo","storeHoursList","RegularStoreHours","buildStoreHours","__decorate","observer","AccountProfileEditButton","ariaLabel","disabled","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","apiSettings","Image","fallBackSrc","loadFailureBehavior","gridSettings","imageSettings","viewports","xs","q","w","h","sm","md","lg","xl","lazyload","cropFocalRegion","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","IFrameView","AccountProfileEditLabel","forId","htmlFor","OrderInfomation","orderInformationProps","salesId","receiptId","createdDate","count","amount","channelReferenceId","channelName","channelAddress","SalesLine","_ref2","salesLineProps","salesLine","buyAgainButton","errors","GroupDelivery","_ref3","deliveryProps","Group","_ref4","groupProps","delivery","address","salesLinesProps","salesLines","isCashAndCarryTransaction","LineId","salesStatus","deliveryType","shipment","trackingInfo","showTimeslot","pickupProps","pickupDateTimeslot","Groups","_ref5","groupsProps","groups","group","OrderSummary","_ref6","orderSummaryProps","subtotal","shipping","tax","totalAmount","earnedPoints","Payment","_ref7","paymentMethodsProps","title","methods","Help","_ref8","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","OrderDetailsView","_ref9","viewModes","tableViewActions","table","placedBy","loading","orderInfomation","orderSummary","payment","help","AccountProfileEditError","type","errorClassName","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","_onSelect","preventDefault","currentTarget","getAttribute","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","Description","tabIndex","onKeyDown","onClickHandler","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","availabilityWithHours","i","_availabilityWithHour","pickupDeliveryOptionErrorMessage","componentDidUpdate","previousProps","componentDidMount","_stores","show","_renderStoreLocation","selected","StoreSelectorLocationLineItemComponent","observable","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","keyCode","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Enter","Space","_searchTextChanged","inputValue","_onSubmit","_this$searchBoxRef$cu","blur","_onChangeHandler","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","pickupFilterByHeading","toggleButtonClass","toggleMapViewAttributes","bind","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","name","autoComplete","onSubmit","searchInputAriaLabel","placeholder","onKeyUp","color","emptyLocationsText","editableLink","linkUrl","openInNewTab","storeCountMessage","storeCountMessageInKm","storeAllCountMessage","AccountProfileEditItem","wrapper","label","errorMessage","AccountProfileEditLoading","icon","AccountProfileEditView","accountProfileEdit","viewState","defaultAADConainer","aadConainer","accountProfileEditLocalAccount","isShowLoading","localAccount","items","buttonsWrapper","buttons","verificationSuccessModal","verificationSuccessModalMessage","item","button","LocalAccount","renderDealerList","dealerResultContainerProps","pagination","MapView","MapProps","buildReviewCard","isUserReview","cardProps","headerProps","date","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","wasReviewHelpfulText","like","dislike","edit","ReviewsListview","filterByDropdown","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","sortByDropdown","userReview","isFilterApplied","review","createReportModal","reported","headerSubmitted","header","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","contains","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","window","addEventListener","componentWillUnmount","removeEventListener","stopPropagation","isExpandSiteOptionsState","storeSelectorLocationLineItemComponentActions","distance","Math","floor","productdeliveryOptions","pickup","_delivery","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","isError","setError","renderStoreHours","displayTime","JSON","stringify","endDayShort","startDayFull","startDayShort","endDayFull","timeRange","pickUpButtonClickHandler","StoreSelectorFoundLocationsMessageComponent","ContactInformationType","Phone","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","storeHoursDayPeriod","storeHoursDay","productDeliveryOptions","productDeliveryOption","PickUpMethodDropdownComponent","pickUpStatesProps","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","dataset","description","StringExtensions","isNullOrEmpty","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","PickUpButtonComponent","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","preferredStoreAttribute","removePreferredStoreAttribute","_props$data$storeSele","renderStoreLocations","selectedLocationReference","_props$data$storeSele2","_props$locationListPr","renderStoreLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","Number","parseInt","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","orgUnitNumber","StoreSelectorViewComponent","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","Browser","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","MsDyn365","isBrowser","viewport","_data$storeSelectorSt","displayMap","toggleBopisHandler","cartLine","isBopisSelected","_cartLine$pickUpInSto","pickUpInStore","toggleBopis","onChangeStoreHandler","_cartLine$pickUpInSto2","renderCartLine","storeSelector","isMultiplePickUp","emailDeliveryModeCode","outOfStockErrorMessage","addToWishlist","remove","renderGroupBopisBlock","_cartLine$data2","cartline","DeliveryMode","changeStoreDisplayText","shipInsteadDisplayText","pickItUpDisplayText","puckUpinStoreAttribute","addToOrderTemplate","renderCartlinesInternal","cartLines","itemIndex","renderBopisBlock","_cartLine$data","shipToAddressDisplayText","pickUpAtStoreWithLocationText","ContainerProps","orgUnitName","renderCartlines","waitingComponent","cartLoadingStatus","isCartDataResult","multiplePickUpEnabled","CartlinesWrapper","emptyCart","renderCartLinesGroupHeader","_cartLine$pickUpInSto6","pickUpText","shippingText","emailshippingText","payInvoicesDisplayText","groupTitle","IsInvoiceLine","toLowerCase","renderCartLinesGroupTitle","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","_cartLine$pickUpInSto5","itemLabel","itemsLabel","countTitle","CartView","_props$cart2","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","_props$cart6","updatedTitle","cartTitle","cart","totalItemsInCart","renderModuleAttributes","checkoutBlockedDueToUnavailableFunds","orderSummaryLineitems","orderTotal","checkoutAsSignInUserButton","checkoutAsGuestButton","renderOrderSummaryCheckoutButton","hasInvoiceLine","promotionOptions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","renderCartLinesGroup","cartLinesGroup","cartlines","_props$context$action","_props$context$action2","cartlineId","countItem","reduce","_item$data$cartline$Q","_item$data","Quantity","countItems","EmailDeliveryModeCode","cartDataResult","orderSummaryHeading","OrderSummaryWrapper","renderInvoiceSummarylines","invoiceSummaryLines","orderSummaryItems","invoices","giftCard","loyalty","invoiceSummaryLineitems","OrderSummaryItems","renderOrderSummarylines","orderSummaryLines","totalDiscounts","otherCharge","errorData","OrderSummaryErrors","Wrapper","_props$cart","promoCode","expressCheckoutButton","ExpressCheckoutSectionWrapper","createTemplateFromCartButton","renderOrderSummaryCheckout","AccountProfileEditLoadingMessage","seconds","hours","ampm","divisorForMinutes","getShortTimeString","day","getFullTimeString","buildHoursDisplayInfo","startDay","endDay","hoursInfo","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","dateForLookup","get","buildStoreHoursString","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","GetMaxLength","maxLength","parsedMaxLength","isNaN","AccountProfileEditInput","pattern","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","EveLinePagination","nextPage","prevPage","changePage","currentPage","numPages","prev","next","Fragment","Map","mapRef","kmToMiValue","defaultLookUpRadius","defaultPageLength","_initMap","pushpinAccessible","Events","addHandler","getCredentials","mapSessionId","_updateMap","pushpinOptions","_pushpinOptions$color","_pushpinOptions$selec","_pushpinOptions$size","_pushpinOptions$showI","mapLocation","entities","clear","pushpins","selectionColor","size","showIndex","pageLength","paginatedList","slice","unitStoreInfo","entries","storeLocation","isSelectedLocation","_getPushpinOptions","pushpin","Pushpin","Location","handleClickEvent","unshift","setView","center","bounds","LocationRect","fromShapes","padding","clusterLayer","ClusterLayer","layers","insert","setOptions","dealerDetails","getDealerDetailsAsync","callerContext","selectedDealer","tempDealerLocations","newDealerLocations","findIndex","loc","_loc$OrgUnitLocation","defaultLatitudeValue","defaultLongitudeValue","SearchRadiusUnit","km","lookupDistanceInMiles","round","useChannelMfr","newOrgUnitLocationsInput","GetDealerLocationsInput","newOrgUnits","getDealerLocations","then","_getSvgIcon","distanceResults","originCoords","resultsCoords","dealerLocations","_this$map","navigationBarMode","NavigationBarMode","minified","setMapModuleLoaded","_this$props$context2","_this$props$data$stor13","_this$props$data$stor14","_this$props$data$stor15","_this$props$data$stor16","shouldDisplayMap","paginatedLocationsList","ceil","page","scrollElement","document","querySelector","paginationPrev","paginationNext","Header","AccountProfileEdit","moduleClassName","onTextBoxChange","givenName","surname","emailRegex","_onInit","_prePopulateData","_updateErrorMessage","initializationTimer","setInterval","_isInitializationSuccessful","clearInterval","isInitialized","invalidEmailAddressError","obj","PRE","_htmlDecode","ID","email","PAT","PAT_DESC","required_field","requiredFieldMissingError","verifying_blurb","loadingMessage","EmailRegex","defaultRegex","source","nextProps","nextState","AccountProfileEditLoadingIconComponent","AccountProfileEditLoadingMessageComponent","display","_renderLocalAccount","str","e","innerHTML","childNodes","nodeValue","_renderInput","firstNameLabelText","firstNameMaxLength","lastNameLabelText","lastNameMaxLength","AccountProfileEditErrorComponent","requiredFieldMissingSummaryError","fieldIncorrectError","AccountProfileEditButtonComponent","saveButtonAriaLabel","saveButtonText","cancelButtonText","showEmail","emailAddressLabelText","labelText","AccountProfileEditLabelComponent","AccountProfileEditInputComponent"],"mappings":"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","file":"static/js/19.53708f8828b643d6524c.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISelectedStoreViewProps } from './components/selected-store/selected-store';\nimport { IStoreSelectorViewProps } from './store-selector';\n\n/**\n * Renders the pickup Delivery options.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderDeliveryOptions: React.FC = props => {\n const { canSelectLocation, deliveryOptions, pickUpDeliveryOptionButton, pickupModes } = props;\n\n return (\n <>\n {/* eslint-disable-next-line no-nested-ternary -- Need this.*/}\n {canSelectLocation ? (ArrayExtensions.hasElements(deliveryOptions) ? pickupModes : pickUpDeliveryOptionButton) : false}\n \n );\n};\n\n/**\n * Render the selected store.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderSelectedStore: React.FC = props => {\n const {\n storeDetailsMain,\n storeHeader,\n storeName,\n storeDetailsCloseButton,\n storeDistance,\n storeDetailsAvailabilityContainer,\n productAvailability,\n stockStatus,\n isCurrentLocation,\n currentLocation,\n isPreferredStore,\n preferredStoreButton,\n removePreferredStoreButton\n } = props;\n\n return (\n \n \n {storeDetailsCloseButton}\n {storeName}\n {storeDistance}\n \n \n {productAvailability}\n {stockStatus}\n \n {isCurrentLocation ? currentLocation : renderDeliveryOptions(props)}\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n \n );\n};\n\n/**\n * Render the body of the popup.\n * @param props -- Store selector view props.\n * @returns -- Returns the html.\n */\nconst renderBody: React.FC = props => {\n const {\n BodyContainerProps,\n locationsMessage,\n search,\n state,\n spinner,\n locationsList,\n noLocationsMessage,\n maps,\n bodyWrapperProps,\n storeResultContainerProps,\n mapContainerProps,\n isMobileView,\n storeDetailsModal,\n selectedLocation\n } = props;\n\n if (isMobileView) {\n return (\n \n {locationsMessage}\n {search}\n \n \n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n {maps}\n {selectedLocation && renderSelectedStore(selectedLocation)}\n \n \n \n );\n }\n\n return (\n \n \n \n {locationsMessage}\n {search}\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n \n {maps}\n \n \n );\n};\n\n/**\n * Store selector view props.\n * @param props - Store selector view props.\n * @returns - HTML.\n */\nconst StoreSelectorView: React.FC = props => {\n const {\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n\n terms\n } = props;\n\n return (\n \n {HeaderProps}\n {renderBody(props)}\n {terms}\n \n );\n};\n\nexport default StoreSelectorView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLoadingIcon {\n className: string;\n}\n\nconst AccountProfileEditLoadingIcon: React.FC = ({ className }) => (\n
\n);\n\nexport default AccountProfileEditLoadingIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport StoreSelector from './modules/store-selector/store-selector';\nimport StoreSelectorView from './modules/store-selector/store-selector.view';\n\nexport * from './modules/store-selector/components';\nexport * from './modules/store-selector/components/store-selector-location-line-item/date-time-helpers';\nexport * from './modules/store-selector/store-selector';\nexport * from './modules/store-selector/store-selector.data';\nexport * from './modules/store-selector/store-selector.props.autogenerated';\nexport * from './modules/store-selector/store-selector.view';\n\nexport { StoreSelector, StoreSelectorView };\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Heading, IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IHeadingData, IIframeConfig, IIframeProps } from './iframe.props.autogenerated';\n\nexport interface IIframeViewProps extends IIframeProps {\n Heading: React.ReactNode;\n IframeContainer: IModuleProps;\n IFrame: React.ReactNode;\n alert?: React.ReactNode;\n cookieConsentAccepted?: boolean;\n}\n\n/**\n *\n * Iframe component.\n * @extends {React.PureComponent}\n */\nclass Iframe extends React.PureComponent> {\n private readonly iframeRef: React.RefObject;\n\n constructor(props: IIframeProps) {\n super(props);\n this.iframeRef = React.createRef();\n }\n\n public render(): JSX.Element | null {\n const { config, resources } = this.props;\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n if (!(config && config.target && config.target.destinationUrl)) {\n return null;\n }\n\n let srcURL;\n try {\n srcURL = new URL(config.target.destinationUrl);\n } catch (error) {\n this.props.telemetry.exception(error);\n return null;\n }\n\n if (srcURL && srcURL.protocol && srcURL.protocol.toLocaleLowerCase() !== 'https:') {\n return null;\n }\n const iframeClassName = classnames('ms-iframe', config.className);\n\n let viewProps: IIframeViewProps = {\n ...(this.props as IIframeProps),\n Heading: this._createHeading(config.heading!),\n IframeContainer: {\n moduleProps: this.props,\n className: iframeClassName\n },\n IFrame: this._createIframe()\n };\n\n if (!isConsentGiven) {\n viewProps = {\n ...viewProps,\n alert: this._renderAlert(resources.cookieConsentRequiredMessage)\n };\n } else {\n viewProps = {\n ...viewProps,\n cookieConsentAccepted: true\n };\n }\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\n if (!heading || !heading.text || heading.text.length === 0) {\n return null;\n }\n\n return ;\n }\n\n private _renderAlert(message: string): React.ReactNode | null {\n return (\n

\n {message}\n

\n );\n }\n\n private _createIframe(): React.ReactNode | null {\n const { config } = this.props;\n const targetURL = config.target.destinationUrl;\n\n return (\n \n );\n }\n}\n\nexport default Iframe;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildDistanceString, matchDeliveryOptions } from '../store-selector-location-line-item';\n\n/**\n * Store Locator line item resources.\n */\nexport interface ISelectedStoreResources {\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreProps {\n className?: string;\n shouldHideStockStatus?: boolean;\n isCurrentLocation?: boolean;\n isInStock?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n resources: ISelectedStoreResources;\n stockStatusLabel?: string;\n preferredStoreLocationId: string | null;\n isPreferredStoreEnabled?: boolean;\n isLocationDisabled?: boolean;\n telemetryContent?: ITelemetryContent;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n preferredDistanceUnit: string;\n filteredPickupMode?: string;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreViewProps {\n isCurrentLocation?: boolean;\n canSelectLocation?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n deliveryOptions?: DeliveryOption[];\n isPreferredStore?: boolean;\n resources: ISelectedStoreResources;\n\n storeDetailsMain: INodeProps;\n storeHeader: INodeProps;\n storeName: React.ReactNode;\n storeDistance: React.ReactNode;\n storeDetailsAvailabilityContainer: INodeProps;\n productAvailability: React.ReactNode;\n stockStatus: React.ReactNode;\n currentLocation: React.ReactNode;\n pickUpDeliveryOptionButton: React.ReactNode;\n pickupModes?: React.ReactNode;\n preferredStoreButton?: React.ReactNode;\n removePreferredStoreButton?: React.ReactNode;\n storeDetailsCloseButton?: React.ReactNode;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupInStoreClickHandler = (props: ISelectedStoreProps) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation);\n }\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onSetAsPreferredStore(props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: ISelectedStoreProps) => async (deliveryCode: string): Promise => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, deliveryCode);\n }\n return Promise.resolve();\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onRemovePreferredStore();\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: ISelectedStoreProps, pickupMode?: string) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, pickupMode);\n }\n};\n\n/**\n * On store details close functionality.\n * @param props -Store locator location items.\n * @returns Void promise.\n */\nconst storeDetailsModalHandler = (props: ISelectedStoreProps) => async (): Promise => {\n await props.handlers.closeStoreDetailsModal();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: ISelectedStoreProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Renders selected store details.\n * @param props - Store location details props.\n * @returns - Selected Store view props.\n */\nconst selectedStoreDetails = (props: ISelectedStoreProps): ISelectedStoreViewProps => {\n const {\n className,\n shouldHideStockStatus,\n isCurrentLocation,\n isInStock,\n selectedStore,\n resources,\n stockStatusLabel,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n preferredDistanceUnit\n } = props;\n\n const parentClassName = className ? className : 'ms-store-select__map__selected_store';\n const storeName: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\n const location = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const distanceAsString: string | undefined = buildDistanceString(location?.Distance, preferredDistanceUnit, isLocationDisabled);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n // eslint-disable-next-line no-nested-ternary -- Required to check stock Label\n const stockText: string | undefined = shouldHideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = !shouldHideStockStatus && isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\n const isPreferredStore = preferredStoreLocationId === location?.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n\n const viewProps: ISelectedStoreViewProps = {\n selectedStore,\n isCurrentLocation,\n canSelectLocation,\n isPreferredStore,\n resources,\n deliveryOptions: deliveryOptionList,\n storeDetailsMain: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__main`\n },\n storeHeader: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__header`\n },\n storeName: {storeName},\n storeDetailsCloseButton: \n ),\n pickupModes: renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel),\n preferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.preferredStoreText}\n \n ) : null,\n removePreferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.setAsPreferredStoreText}\n \n ) : null,\n handlers: {\n onSelected: props.handlers.onSelected,\n onSetAsPreferredStore: props.handlers.onSetAsPreferredStore,\n onRemovePreferredStore: props.handlers.onRemovePreferredStore,\n closeStoreDetailsModal: props.handlers.closeStoreDetailsModal\n }\n };\n\n return viewProps;\n};\n\n/**\n * Store location line item component.\n */\nexport const SelectedStoreComponent = selectedStoreDetails as (props: ISelectedStoreProps) => ISelectedStoreViewProps;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/// \n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreInfo, IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n getOrgUnitLocationsByArea,\n GetOrgUnitLocationsByAreaInput,\n IFullOrgUnitAvailability\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n NodeTag,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n StoreSelectorEmptyMessage,\n StoreSelectorFoundLocationsMessage,\n StoreSelectorLocationLines,\n StoreSelectorSearchForm,\n StoreSelectorTermsOfService,\n StoreSelectorWaiting\n} from './components';\nimport { ISelectedStoreProps, ISelectedStoreViewProps, SelectedStoreComponent } from './components/selected-store/selected-store';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './components/store-selector-location-line-item/date-time-helpers';\nimport { IStoreSelectorData } from './store-selector.data';\nimport {\n IStoreSelectorProps,\n IStoreSelectorResources,\n mode as modeEnum,\n searchRadiusUnit as SearchRadiusUnit,\n style as styleEnum\n} from './store-selector.props.autogenerated';\n\n/**\n * StoreSelector State Interface.\n */\nexport interface IStoreSelectorState {\n isSearchInProgress: boolean;\n searchTerm?: string;\n isSeeAllStoreValue: boolean;\n isLocationDisabled?: boolean;\n filteredPickupMode?: string;\n}\n\n/**\n * StoreSelector View Props Interface.\n */\nexport interface IStoreSelectorViewProps extends IStoreSelectorProps {\n state: IStoreSelectorState;\n\n // Containers:\n ModuleProps: IModuleProps;\n BodyContainerProps: INodeProps;\n FooterContainerProps: INodeProps;\n HeaderContainerProps: INodeProps;\n HeaderProps?: React.ReactNode;\n\n // Components\n locationsMessage?: React.ReactNode;\n search?: React.ReactNode;\n spinner?: React.ReactNode;\n locationsList?: React.ReactNode;\n selectedLocation?: ISelectedStoreViewProps;\n noLocationsMessage?: React.ReactNode;\n terms?: React.ReactNode;\n headerText?: React.ReactNode;\n sortLocations?: IFullOrgUnitAvailability[];\n locationListProps?: IStoreSelectorLocationLineItemProps[];\n bodyWrapperProps?: INodeProps;\n storeResultContainerProps?: INodeProps;\n mapContainerProps?: INodeProps;\n maps?: React.ReactNode;\n isMobileView?: boolean;\n storeDetailsModal?: INodeProps;\n\n callbacks: {\n closeDialog(): Promise;\n searchTermChanged(searchTerm: string): Promise;\n performSearch(searchTerm: string): Promise;\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\n getAndUpdateUserLocation(): Promise;\n attachMapAutoSuggest(): Promise;\n onSuggestionSelected(result: Microsoft.Maps.ISuggestionResult): Promise;\n setPreferredStore(storeId: string | undefined): Promise;\n removePreferredStore(): Promise;\n setSelectedStore(storeId: string | undefined): Promise;\n setOrgUnitStoreInformation(location: OrgUnitLocation | undefined): Promise;\n };\n}\n\n/**\n * StoreSelectorLocation Line Resources Interface.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * ILocationHours Interface.\n */\nexport interface ILocationHours {\n openFrom?: string;\n openTo?: string;\n}\n\n/**\n * StoreSelectorLocation Line Item Props Interface.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n storeHoursList?: IHoursDisplayInfo[];\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n selectedStoreLocationId?: string;\n locationOpen?: ILocationHours;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n onClick: (locationId: string | undefined) => void;\n}\n\n/**\n *\n * Pick Up In Store module.\n * @extends React.Component>}\n */\n@observer\nclass StoreSelector extends React.Component, IStoreSelectorState> {\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private storeCounter: number;\n\n private isPreferredStoreEnabled?: boolean;\n\n public constructor(props: IStoreSelectorProps) {\n super(props);\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.state = { isSearchInProgress: true, searchTerm: '', isSeeAllStoreValue: false, filteredPickupMode: undefined };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.storeCounter = 0;\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\n } = this.props;\n\n // Adding Timeout to make sure it loads the data based upon the preferred store.\n setTimeout(() => {\n this._getAndUpdateStoreLocation();\n }, 0);\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isDialogOpen,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context?.id === this.props.id) {\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (!context || context.id === this.props.id) {\n await this._searchTermChanged('');\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\n await this.props.data.storeSelectorStateManager.result.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\n });\n }\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\n () => {\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context.actionContext.requestContext.channel?.ChannelCountryRegionISOCode\n });\n }\n );\n\n reaction(\n () => this.props.data.availabilitiesWithHours.result,\n async () => {\n if (this.props.data.storeSelectorStateManager.result?.isDialogOpen) {\n const storeLocationList = this.props.data.availabilitiesWithHours.result;\n if (storeLocationList) {\n await this._setOrgUnitStoreInformation(storeLocationList);\n }\n }\n }\n );\n\n if (isAutoSuggestionEnabled) {\n when(\n () => {\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\n return isMapApiLoaded && isDialogOpen && isSameContext;\n },\n () => {\n setTimeout(async () => {\n await this._attachMapAutoSuggest();\n }, 0);\n }\n );\n }\n }\n\n public shouldComponentUpdate(): boolean {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n if (context && context.id === this.props.id) {\n return true;\n }\n return false;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element {\n const {\n config: {\n termsOfServiceLink,\n className,\n heading,\n mode,\n style,\n setAsPreferredStore: shouldSetAsPreferredStore,\n showAllStores: shouldShowAllStores,\n lookupRadius,\n enablePickupFilterToShowStore: hasEnablePickupFilterToShowStore,\n searchRadiusUnit\n },\n context: {\n telemetry,\n app: { config: appConfig },\n actionContext: {\n requestContext: { channel, cookies }\n }\n },\n slots: { maps: mapSlot },\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n this.storeCounter = 0;\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n const isMapDisabled = !(channel?.BingMapsApiKey && channel.BingMapsEnabled);\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const isDialogOpen: boolean = storeSelectorStateManager\n ? storeSelectorStateManager.isDialogOpen && context?.id === this.props.id\n : false;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const isInlineView = styleDefault === styleEnum.inline;\n const isLocatorView = modeDefault === modeEnum.findStores;\n const shouldHideInventory = isLocatorView;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\n this.isPreferredStoreEnabled = shouldSetAsPreferredStore && cookies?.isConsentGiven();\n const canShowLocationView =\n context && (context.showMapViewLink === undefined || context.showMapViewLink) && storeSelectorStateManager?.isMapModuleLoaded;\n\n const storeSelectorActions = {\n async toggleListMapViewState(): Promise {\n await storeSelectorStateManager?.toggleListMapViewState();\n }\n };\n\n if (!channel?.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n }\n\n const configHeading = heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText;\n const preferredDistanceUnit =\n searchRadiusUnit === SearchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n let storeLocationList: IFullOrgUnitAvailability[] | undefined = shouldHideInventory ? storeLocations : availabilitiesWithHours;\n let sortLocation = null;\n if (storeLocationList) {\n sortLocation = this._sortStores(storeLocationList, this.isPreferredStoreEnabled, preferredLocationId);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Reading value from app config.\n const isEnableOutofStock: boolean = appConfig?.enableStockCheck || false;\n const alreadySelectedLocation = context ? context.alreadySelectedLocation : undefined;\n const productPickUpOptionList = storeSelectorStateManager?.context?.deliveryOptions?.DeliveryOptions;\n if (this.state.filteredPickupMode && storeLocationList) {\n storeLocationList = this.onFilterLocations(storeLocationList, this.state.filteredPickupMode);\n }\n const locationListProps = this._getStoreLocationListProps(\n isEnableOutofStock,\n isLocatorView,\n preferredLocationId,\n this.isPreferredStoreEnabled,\n selectedStoreLocationId,\n sortLocation ?? null,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n\n const hasMapSlot = ArrayExtensions.hasElements(mapSlot);\n const dialogClassName = hasMapSlot ? 'ms-store-select__map' : '';\n const viewProps: IStoreSelectorViewProps = {\n ...(this.props as IStoreSelectorProps),\n state: this.state,\n maps: hasMapSlot ? mapSlot[0] : undefined,\n\n ModuleProps: {\n tag: isInlineView ? ('div' as NodeTag) : Modal,\n moduleProps: this.props,\n className: classname(\n `ms-store-${isInlineView ? 'locate' : 'select'}`,\n className,\n dialogClassName,\n isInlineView ? '' : 'msc-modal-input-required'\n ),\n autoFocus: true,\n fade: true,\n isOpen: isDialogOpen,\n 'aria-label': configHeading,\n onClosed: this._closeDialog,\n horizontalPosition: 'center',\n verticalPosition: 'center',\n toggle: this._closeDialog\n },\n isMobileView: isMobileDevice,\n HeaderContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalHeader,\n className: `ms-store-select__${isInlineView ? 'header' : 'modal-header'}`,\n toggle: this._closeDialog\n },\n HeaderProps: configHeading && (\n \n ),\n FooterContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalFooter,\n className: `ms-store-select__${isInlineView ? 'footer' : 'modal-footer'} ${!shouldDisplayList ? 'map-only-view' : ''}`\n },\n BodyContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalBody,\n className: `ms-store-select__${isInlineView ? 'body' : 'modal-body'}`\n },\n bodyWrapperProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__body_wrapper'\n },\n storeResultContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__store_container'\n },\n mapContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__map_container'\n },\n storeDetailsModal: {\n tag: 'div' as NodeTag,\n className: `ms-store-select__map__selected_store__modal ${\n selectedStoreLocationId && isDialogOpen && !shouldDisplayList ? 'show' : 'hide'\n }`\n },\n locationsMessage: !this.state.isLocationDisabled && (\n \n ),\n selectedLocation: this.renderSelectedStore(\n shouldHideInventory,\n preferredDistanceUnit,\n preferredStore,\n this.isPreferredStoreEnabled,\n isEnableOutofStock,\n productPickUpOptionList,\n shouldDisplayList\n ),\n search: (\n \n ),\n spinner: ,\n locationsList: ArrayExtensions.hasElements(storeLocationList) ? (\n \n ) : (\n undefined\n ),\n noLocationsMessage: ,\n terms: (\n \n ),\n\n // Not being used in current context, we can use it here to pass more props.\n headerText: (\n {heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText}\n ),\n sortLocations: sortLocation,\n locationListProps,\n callbacks: {\n searchTermChanged: this._searchTermChanged,\n performSearch: this._performSearch,\n closeDialog: this._closeDialog,\n selectedLocation: this._onOrgUnitLocationSelected,\n getAndUpdateUserLocation: async () => {\n this._getAndUpdateStoreLocation();\n return Promise.resolve();\n },\n attachMapAutoSuggest: this._attachMapAutoSuggest,\n onSuggestionSelected: this._onOrgUnitLocationSelected,\n setPreferredStore: this._setPreferredStore,\n removePreferredStore: this._removePreferredStore,\n setSelectedStore: this._setSelectedStore,\n setOrgUnitStoreInformation: this._setOrgUnitStoreInformation\n }\n } as IStoreSelectorViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Render the selected store for the mobile devices.\n * @param shouldHideInventory -- Hide Inventory.\n * @param preferredDistanceUnit -- Preferred Distance Unit.\n * @param preferredStore -- Preferred Store.\n * @param isPreferredStoreEnabled -- Is Preferred Store Enabled.\n * @param hasEnabledOutOfStockCheck -- Stock check is enabled or not.\n * @param productPickUpOptionList -- Product pickup option list.\n * @param shouldDisplayList - Should Display list.\n * @returns -- Returns the view props.\n */\n public renderSelectedStore = (\n shouldHideInventory: boolean,\n preferredDistanceUnit: string,\n preferredStore: IStoreInfo | undefined,\n isPreferredStoreEnabled: boolean | undefined,\n hasEnabledOutOfStockCheck: boolean,\n productPickUpOptionList?: DeliveryOption[],\n shouldDisplayList?: boolean\n ): ISelectedStoreViewProps | undefined => {\n const {\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const selectedStore = (shouldHideInventory ? storeLocations : availabilitiesWithHours)?.find(\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === selectedStoreLocationId\n );\n const orgUnitLocation = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreResources = this._mapResources(resources);\n\n if (!shouldDisplayList && selectedStore) {\n const selectedProps: ISelectedStoreProps = {\n shouldHideStockStatus: shouldHideInventory,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, context?.alreadySelectedLocation),\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, selectedStore.OrgUnitAvailability?.ItemAvailabilities),\n selectedStore,\n resources: selectedStoreResources,\n stockStatusLabel: this._stockInventoryLabel(selectedStore),\n preferredStoreLocationId: preferredStore?.StoreId ? preferredStore.StoreId : '',\n isPreferredStoreEnabled,\n isLocationDisabled: this.state.isLocationDisabled,\n telemetryContent: this.telemetryContent,\n storePickUpOptionList: selectedStore.OrgUnitPickUpDeliveryModes?.DeliveryOptions,\n productPickUpOptionList,\n preferredDistanceUnit,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n\n return SelectedStoreComponent(selectedProps);\n }\n\n return undefined;\n };\n\n /**\n * Method to be called on link text change.\n * @param event -Content Edit Event.\n */\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.termsOfServiceLink) {\n this.props.config.termsOfServiceLink.linkText = event.target.value;\n }\n };\n\n /**\n * Method to be called on heading change.\n * @param event -Content Edit Event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading = event.target.value;\n };\n\n /**\n * Show all stores handler function.\n */\n private readonly onShowAllStoresHandler = () => {\n this._getAndUpdateStoreLocation(true);\n this.setState({ filteredPickupMode: undefined });\n };\n\n /**\n * Method to be called for filtered the store location based on the filter selected by the user.\n * @param stores -All the stores from the API.\n * @param filteredPickupMode -Filter selected by the user.\n * @returns -Filtered stores.\n */\n private readonly onFilterLocations = (stores: IFullOrgUnitAvailability[], filteredPickupMode: string) => {\n return stores.filter(location => {\n return location.OrgUnitPickUpDeliveryModes?.DeliveryOptions?.some(deliveryOption => {\n return deliveryOption.Code === filteredPickupMode;\n });\n });\n };\n\n /**\n * Filter Store by pickup mode.\n * @param deliveryCode -Delivery Code.\n */\n private readonly onFilteredPickupMode = (deliveryCode: string) => {\n this.setState({ filteredPickupMode: deliveryCode });\n };\n\n /**\n * Method will sort all stores.\n * @param stores -Stores List.\n * @param isPreferredStoreEnabled -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @returns List of Stores.\n */\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\n private _sortStores(\n stores: IFullOrgUnitAvailability[],\n isPreferredStoreEnabled: boolean | undefined,\n preferredStoreLocationId: string\n ): IFullOrgUnitAvailability[] {\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n isPreferredStoreEnabled &&\n preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Method will list of store selector location line.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param stores -Store Id.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns List of StoreSelectorLocation Line.\n */\n private _getStoreLocationListProps(\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n stores: IFullOrgUnitAvailability[] | null,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps[] {\n const storeList: IStoreSelectorLocationLineItemProps[] = [];\n if (ArrayExtensions.hasElements(stores)) {\n stores.map((store, index: number) => {\n const storeLineProps = this._createStoreLocationList(\n store,\n index,\n hasEnabledOutOfStockCheck,\n isStoreLocatorView,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n selectedStoreLocationId,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n if (storeLineProps) {\n storeList.push(storeLineProps);\n }\n });\n }\n return storeList;\n }\n\n /**\n * Initialize Map AutoSuggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n config: { autoSuggestOptions },\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\n /**\n * Callback for the autosuggest API.\n */\n callback: () => {\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\n this.autoSuggestManager.attachAutosuggest(\n `#ms-store-select__search-box_${this.props.id}`,\n `#ms-store-select__search-box-container_${this.props.id}`,\n this._onSuggestionSelected\n );\n },\n\n /**\n * Error call back for autosuggest API.\n */\n errorCallback: () => {\n if (telemetry) {\n telemetry.debug('Unable to attach map auto suggest.');\n }\n },\n credentials: channel?.BingMapsApiKey\n });\n }\n };\n\n /**\n * On Selecting Location Suggestion.\n * @param result - Map Suggestions List.\n */\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context && context.id === this.props.id) {\n await this._searchTermChanged(result.formattedSuggestion);\n await this._performSearch(result.formattedSuggestion);\n }\n };\n\n /**\n * On Selecting Preferred Store.\n * @param storeId - Store Id.\n */\n private readonly _setPreferredStore = async (storeId: string | undefined): Promise => {\n if (!storeId) {\n return;\n }\n\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n config: { mode },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations },\n availabilitiesWithHours: { result: availabilitiesWithHours }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n\n let stores: IFullOrgUnitAvailability[];\n if (modeDefault === modeEnum.findStores && storeLocations) {\n stores = storeLocations;\n } else {\n stores = availabilitiesWithHours!;\n }\n\n const preferredStore = stores.find(store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === storeId);\n\n await storeSelectorStateManager.setPreferredStoreLocation(\n storeId,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\n cookies.isConsentGiven(),\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude\n );\n };\n\n /**\n * On Removing Preferred Store.\n */\n private readonly _removePreferredStore = async (): Promise => {\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.clearPreferredStore(cookies.isConsentGiven());\n };\n\n /**\n * Method called to close the store details modal that comes up on clicking the pushpin.\n * @returns Void promise.\n */\n private readonly _closeStoreDetailModal = async (): Promise => {\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\n };\n\n /**\n * On Selecting Store for pickup.\n * @param storeId - Store Id.\n */\n private readonly _setSelectedStore = async (storeId: string | undefined): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.setSelectedStoreLocationId(storeId);\n };\n\n /**\n * Method to be called on search.\n * @param searchTerm - Search string.\n */\n private readonly _performSearch = async (searchTerm: string): Promise => {\n const {\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!searchTerm || !storeSelectorStateManager) {\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\n\n if (location) {\n await this._updateLocations(location.latitude, location.longitude);\n } else {\n await this._updateLocations();\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n };\n\n /**\n * Method to be called on search term changed.\n * @param searchTerm - Search string.\n */\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\n this.setState({ searchTerm });\n };\n\n /**\n * Method to be called updating the store location.\n * @param shouldShowAllStores - Flag to show all stores.\n */\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\n const {\n config: { style },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n\n if (styleDefault !== styleEnum.inline && (!storeSelectorStateManager || !storeSelectorStateManager.isDialogOpen)) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n if (navigator?.geolocation) {\n navigator.geolocation.getCurrentPosition(\n async position => {\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\n this.setState({ isLocationDisabled: false, isSearchInProgress: true });\n if (shouldShowAllStores) {\n this.setState({ isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(position.coords.latitude, position.coords.longitude, 0);\n } else {\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n async error => {\n // If the location setting is turned off\n if (error.PERMISSION_DENIED) {\n this.setState({ isLocationDisabled: true, isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(0, 0, 0);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n { timeout: 5000 }\n );\n } else {\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n }\n };\n\n /**\n * Method to be called closing the store selector dialog.\n * @returns Void promise.\n */\n private readonly _closeDialog = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n this.setState({ searchTerm: '' });\n\n if (storeSelectorStateManager) {\n storeSelectorStateManager.context?.parentElementRef?.current?.focus();\n return storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method to set store info.\n * @param orgUnitStoreInformation - Store Info Object.\n * @returns Void promise.\n */\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n config: { style },\n telemetry\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n const context = storeSelectorStateManager.context;\n const moduleId: string = context?.id ? context.id : this.props.id;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n let input: IStoreSelectionStateContext = {\n /**\n * On Location selected.\n * @returns - Returns promise.\n */\n onLocationSelected: async () => {\n // TO-DO handle event for when location in selected\n return Promise.resolve();\n }\n };\n\n if (storeSelectorStateManager.context) {\n input = storeSelectorStateManager.context;\n }\n\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager.preferredStore;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n const storeLocationList = this._sortStores(orgUnitStoreInformation, this.isPreferredStoreEnabled, preferredLocationId);\n\n input = {\n ...input,\n id: moduleId,\n showMapViewLink: context?.showMapViewLink,\n parentElementRef: context?.parentElementRef,\n isDialog: styleDefault === styleEnum.dialog,\n orgUnitStoreInformation: storeLocationList,\n product: context?.product\n };\n\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\n if (telemetry) {\n telemetry.error(error.message);\n telemetry.debug('Unable to Update store location state');\n }\n });\n };\n\n /**\n * Method to update user location.\n * @param latitude - User location.\n * @param longitude - User location.\n * @param radius - Search Criteria Radius.\n * @returns Void promise.\n */\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\n const {\n config: { mode, lookupRadius, style, searchRadiusUnit },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.kilometers ? 1 : 0;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n let localLatitude = this.state.searchTerm || !preferredStore?.Latitude ? latitude : preferredStore.Latitude;\n let long = this.state.searchTerm || !preferredStore?.Longitude ? longitude : preferredStore.Longitude;\n if (styleDefault === styleEnum.inline) {\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\n if (lastInlineStoreLocation && !this.state.searchTerm) {\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\n }\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\n }\n\n if (modeDefault === modeEnum.findStores) {\n await this.getOrgUnitLocationByArea(calRadius, distanceUnitValue, localLatitude, long);\n return;\n }\n\n await this.getFullAvailableInventoryNearby(calRadius, distanceUnitValue, localLatitude, long);\n };\n\n /**\n * Get org unit location by area.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getOrgUnitLocationByArea = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n context: { actionContext }\n } = this.props;\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\n latitude,\n longitude,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\n if (orgUnitLocations) {\n await this._setOrgUnitStoreInformation(orgUnitLocations);\n await this._setSelectedStore(undefined);\n }\n };\n\n /**\n * Get full available inventory nearby.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getFullAvailableInventoryNearby = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n telemetry,\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager || !storeSelectorStateManager.context) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n if (!storeSelectorStateManager.context.product) {\n // TODO: Use alternative search method here to not make inventory check\n return;\n }\n\n const input = new GetFullAvailableInventoryNearbyInput(\n storeSelectorStateManager.context.product.RecordId,\n latitude ?? 0,\n longitude ?? 0,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n await getFullAvailableInventoryNearby(input, actionContext).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get full available inventory near by');\n });\n };\n\n /**\n * Method to called on store selected.\n * @param location - Store Info.\n * @param deliveryMode - Pickup mode.\n * @returns Void promise.\n */\n private readonly _onOrgUnitLocationSelected = async (location: OrgUnitLocation | undefined, deliveryMode?: string): Promise => {\n const {\n telemetry,\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager) {\n if (location && storeSelectorStateManager.context) {\n // Want to eat exceptions here so that the dialog still closes even if the onLocationSelected call goes wrong\n await storeSelectorStateManager.context.onLocationSelected(location, deliveryMode).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get on org unit location selected');\n });\n }\n\n await storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method will list of store selector location line.\n * @param store -Store Info.\n * @param index - List index.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns StoreSelectorLocation Line Prop.\n */\n private _createStoreLocationList(\n store: IFullOrgUnitAvailability,\n index: number,\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps | undefined {\n const orgUnitLocation = store.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocation = selectedStoreLocationId;\n const deliveryOptions = store.OrgUnitPickUpDeliveryModes;\n const lineResources = this._mapResources(this.props.resources);\n const storeOpenFrom: string | undefined = secondsToTime(orgUnitLocation?.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(orgUnitLocation?.OpenTo);\n const storeHours = store.StoreHours;\n\n if (orgUnitLocation) {\n ++this.storeCounter;\n return {\n location: orgUnitLocation,\n selectedStoreLocationId: selectedStoreLocation,\n storeHours,\n resources: lineResources,\n preferredDistanceUnit: preferredDistanceUnit!,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, alreadySelectedLocation),\n hideStockStatus: !hasEnabledOutOfStockCheck,\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, store.OrgUnitAvailability?.ItemAvailabilities),\n stockStatusLabel: this._stockInventoryLabel(store),\n storeLocatorView: isStoreLocatorView,\n index: this.storeCounter.toString(),\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n telemetryContent: this.telemetryContent,\n isLocationDisabled: this.state.isLocationDisabled,\n storePickUpOptionList: deliveryOptions?.DeliveryOptions,\n productPickUpOptionList,\n locationOpen: { openFrom: storeOpenFrom, openTo: storeOpenTo },\n storeHoursList: storeHours?.RegularStoreHours ? buildStoreHours(storeHours.RegularStoreHours, lineResources) : [],\n onClick: this._setSelectedStore,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n }\n return undefined;\n }\n\n /**\n * Method to map resources with Location Item.\n * @param resources - List of strings for module.\n * @returns Resources for StoreSelector location line.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined, selectedLocation?: OrgUnitLocation): boolean =>\n (selectedLocation && location && selectedLocation.OrgUnitNumber === location.OrgUnitNumber) || false;\n\n /**\n * Method to get stock.\n * @param hasEnableOutOfStockCheck - Config to check for stock check enabled.\n * @param itemAvailabilities - Item quantity availability.\n * @returns Boolean value for item stock.\n */\n private readonly _isProductInStock = (\n hasEnableOutOfStockCheck: boolean,\n itemAvailabilities: ItemAvailability[] | undefined\n ): boolean => {\n if (!hasEnableOutOfStockCheck) {\n return true;\n }\n const quantityCount = 0;\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > quantityCount : false;\n }\n\n return false;\n };\n\n /**\n * Method to get stocklevel label.\n * @param isInStock - Stock available in store.\n * @returns Label for stock status.\n */\n private readonly _stockInventoryLabel = (isInStock: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (isInStock?.ProductInventoryInformation && ArrayExtensions.hasElements(isInStock.ProductInventoryInformation)) {\n for (let index = 0; index < isInStock.ProductInventoryInformation.length; index++) {\n if (\n isInStock.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n isInStock.ProductInventoryInformation[index].InventLocationId\n ) {\n return isInStock.ProductInventoryInformation[index].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n}\n\nexport default StoreSelector;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditButton {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n telemetryContent?: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nconst AccountProfileEditButton: React.FC = ({\n id,\n className,\n text,\n ariaLabel,\n disabled,\n telemetryContent,\n onClick\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default AccountProfileEditButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE 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
{renderProductImage(props)}
\n
\n
{product?.Name}
\n
{product?.ItemId}
\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
{resources.selectRatingLabel}
\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 <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {text}\n {modalToggle}\n {createReviewModal(props)}\n \n )}\n \n );\n};\n\nexport default WriteReviewView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IIframeViewProps } from './iframe';\n\n/**\n *\n * IFrameView component.\n * @extends {React.PureComponent}\n */\nexport class IFrameView extends React.PureComponent {\n public render(): JSX.Element | null {\n const { Heading, IframeContainer, IFrame, alert, cookieConsentAccepted } = this.props;\n\n return (\n \n {alert}\n {cookieConsentAccepted && cookieConsentAccepted ? (\n <>\n {Heading}\n {IFrame}\n \n ) : null}\n \n );\n }\n}\nexport default IFrameView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLabel {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nconst AccountProfileEditLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default AccountProfileEditLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IGroup,\n IGroupDelivery,\n IGroups,\n IHelp,\n IOrderDetailsViewProps,\n IOrderInformation,\n IOrderSummary,\n IPaymentMethods,\n ISalesLine\n} from '@msdyn365-commerce-modules/order-management';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport const OrderInfomation: React.FC = ({\n orderInformationProps,\n salesId,\n receiptId,\n createdDate,\n count,\n amount,\n channelReferenceId,\n channelName,\n channelAddress\n}) => (\n \n {channelName}\n {channelAddress}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n \n);\n\nexport const SalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton, errors }) => (\n \n {salesLine}\n {buyAgainButton}\n {errors}\n \n);\n\nexport const GroupDelivery: React.FC = ({ deliveryProps, heading, count }) => (\n \n {heading}\n {count}\n \n);\n\nexport const Group: React.FC = ({ groupProps, delivery, address, salesLinesProps, salesLines, isCashAndCarryTransaction }) => (\n \n {delivery && }\n \n {salesLines && (\n \n {salesLines.map(salesLine => (\n \n {!isCashAndCarryTransaction && salesLine.salesStatus}\n {salesLine.data.deliveryType === 'ship' && salesLine.data.shipment ? salesLine.trackingInfo : null}\n \n \n ))}\n \n )}\n {!delivery.showTimeslot && address}\n {delivery.showTimeslot && (\n \n {address}\n {delivery.pickupDateTimeslot}\n \n )}\n \n \n);\n\nexport const Groups: React.FC = ({ groupsProps, groups }) => (\n \n {groups.map((group, index) => (\n \n ))}\n \n);\n\nexport const OrderSummary: React.FC = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n \n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n \n);\n\nexport const Payment: React.FC = ({ paymentMethodsProps, title, methods }) => (\n \n {title}\n {methods}\n \n);\n\nexport const Help: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n \n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n \n);\n\nconst OrderDetailsView: React.FC = ({\n moduleProps,\n viewModes,\n tableViewActions,\n table,\n placedBy,\n heading,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n \n {placedBy}\n {heading}\n {alert}\n {loading}\n {orderInfomation && }\n {tableViewActions}\n {viewModes}\n {table}\n {groups && }\n \n {orderSummary && }\n {payment && }\n \n {help && }\n \n );\n};\n\nexport default OrderDetailsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nconst AccountProfileEditError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n );\n};\n\nexport default AccountProfileEditError;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Store Pickup option list interface.\n */\nexport interface IStorePickUpOptionListProps {\n productPickupListOptionMenuText?: string;\n productPickupModeList?: DeliveryOption[];\n defaultOptionText?: string;\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Store Pickup option state interface.\n */\nexport interface IStorePickOptionListState {\n isFilterExpanded: boolean;\n selectedPickupMode?: string;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class StorePickUpOptionList extends React.PureComponent {\n private readonly _storePickupListOptionMenu: React.RefObject;\n\n public constructor(props: IStorePickUpOptionListProps) {\n super(props);\n this._storePickupListOptionMenu = React.createRef();\n this.state = {\n isFilterExpanded: false,\n selectedPickupMode: ''\n };\n }\n\n public render(): JSX.Element {\n const { productPickupListOptionMenuText, productPickupModeList, defaultOptionText } = this.props;\n const selectedPickupModeDesc = defaultOptionText\n ? defaultOptionText\n : productPickupModeList?.find((delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\n const role = 'menu';\n return (\n
\n \n {this.state.isFilterExpanded ? (\n
    \n {productPickupModeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Method to call when drop dwon get selected.\n */\n private readonly _rendeDeliveryOptions = () => {\n const isExpandOptionsState = this.state.isFilterExpanded;\n this.setState({\n isFilterExpanded: !isExpandOptionsState\n });\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onKeyDown = async (event: React.KeyboardEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources } from '../store-selector.props.autogenerated';\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './store-selector-location-line-item';\n\n/**\n * Store selector location lines props interface.\n */\nexport interface IStoreSelectorLocationLinesProps {\n locations?: IFullOrgUnitAvailability[];\n resources: IStoreSelectorResources;\n preferredDistanceUnit?: string;\n\n alreadySelectedLocation?: OrgUnitLocation;\n outOfStockThreshold: number;\n enableOutOfStockCheck: boolean;\n storeLocatorView?: boolean;\n selectedStoreLocationId?: string;\n isPreferredStoreEnabled?: boolean;\n displayList?: boolean;\n isLocationDisabled?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n onClick: (locationId: string | undefined) => void;\n preferredStoreLocationId: string | null;\n onSetAsPreferredStore: (locationId: string | undefined) => void;\n onRemovePreferredStore: () => void;\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onLocationSelected(location: OrgUnitLocation | undefined): void;\n}\n\n/**\n * Displays all the location line items, or null if none exists.\n */\n@observer\nexport class StoreSelectorLocationLines extends React.PureComponent {\n @observable private _stores: IFullOrgUnitAvailability[] | undefined;\n\n private readonly selectedLocationRef: React.RefObject;\n\n private storeCounter: number;\n\n public constructor(props: IStoreSelectorLocationLinesProps) {\n super(props);\n this.selectedLocationRef = React.createRef();\n this.storeCounter = 0;\n }\n\n public componentDidUpdate(previousProps: IStoreSelectorLocationLinesProps): void {\n if (this.props.selectedStoreLocationId !== previousProps.selectedStoreLocationId) {\n this._scrollIntoView();\n }\n }\n\n public componentDidMount(): void {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n\n reaction(\n () => this.props.locations,\n () => {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n }\n );\n }\n\n public render(): JSX.Element | null {\n if (!ArrayExtensions.hasElements(this._stores)) {\n return null;\n }\n\n this.storeCounter = 0;\n\n return (\n
\n {this._stores.map((store, index) => {\n return this._renderStoreLocation(store, index);\n })}\n
\n );\n }\n\n /**\n * On click Handler function.\n * @param orgUnitLocation -OrgUnit location.\n * @returns Click action on orgUnit Location.\n */\n private readonly onClickHandler = (orgUnitLocation: OrgUnitLocation | undefined) => () => {\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\n };\n\n private _renderStoreLocation(store: IFullOrgUnitAvailability, index: number): JSX.Element | undefined {\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\n const deliveryOptions = store?.OrgUnitPickUpDeliveryModes;\n const defaultAriaSetsize = 0;\n if (orgUnitLocation) {\n ++this.storeCounter;\n return (\n \n \n
\n );\n }\n return undefined;\n }\n\n /**\n * Sort store.\n * @param stores - Array of stores data.\n * @returns Sorted stores array.\n */\n private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\n /**\n * IsPreferredStore.\n * @param value - Array of stores data.\n * @returns IsPreferred store boolean value.\n */\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n this.props.isPreferredStoreEnabled &&\n this.props.preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === this.props.preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Scroll into view.\n */\n private readonly _scrollIntoView = () => {\n const selectedLocationDiv = this.selectedLocationRef.current;\n const parent = selectedLocationDiv?.parentElement;\n if (selectedLocationDiv && parent) {\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\n parent.scrollTop = selectedLocationDiv.offsetTop;\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\n }\n }\n };\n\n /**\n * Is current location.\n * @param location - Org unit location.\n * @returns The current location.\n */\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\n (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\n false;\n\n /**\n * Check the product is in stock or not.\n * @param itemAvailabilities - Item availabilities.\n * @returns If the product is in stock.\n */\n private readonly _isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\n if (!this.props.enableOutOfStockCheck) {\n return true;\n }\n\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > 0 : false;\n }\n\n return false;\n };\n\n /**\n * Get the stock inventory label.\n * @param availabilityWithHours - Full org unit availability.\n * @returns The stock label.\n */\n private readonly _stockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\n for (let i = 0; i < availabilityWithHours.ProductInventoryInformation.length; i++) {\n if (\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n availabilityWithHours.ProductInventoryInformation[i].InventLocationId\n ) {\n return availabilityWithHours.ProductInventoryInformation[i].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n\n /**\n * Map resources.\n * @param resources - Store resources.\n * @returns Resources.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n pickupDeliveryOptionErrorMessage: resources.pickupDeliveryOptionErrorMessage,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n KeyCodes,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { StorePickUpOptionList } from './store-pickup-option-list';\n\n/**\n * Store Selector Search Form Props interface.\n */\nexport interface IStoreSelectorSearchFormProps {\n resources: {\n searchInputAriaLabel: string;\n searchButtonAriaLabel: string;\n searchPlaceholderText: string;\n seeAllStoresText: string;\n viewListText: string;\n viewMapText: string;\n pickupFilterByHeading?: string;\n pickupFilterMenuHeading?: string;\n };\n\n id: string;\n value: string;\n isMapDisabled?: boolean;\n showAllStores?: boolean;\n displayList?: boolean;\n locatorView?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n hasEnabledPickupFilterToShowStore?: boolean;\n filteredPickupMode?: string;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onShowAllStores(): void;\n onToggleListMapViewState(): void;\n performSearch(searchTerm: string): Promise;\n searchTermChanged(searchTerm: string): Promise;\n filterPickupModeSelected(pickupMode: string): void;\n}\n\n/**\n * Simple search form consisting of search text and a search button.\n */\nexport class StoreSelectorSearchForm extends React.PureComponent {\n private readonly searchBoxRef: React.RefObject = React.createRef();\n\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly showAllStoreAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly toggleMapViewAttributes: Msdyn365.IDictionary | undefined;\n\n private previousValue: string = '';\n\n private isSearchResultOpened: boolean = false;\n\n public constructor(props: IStoreSelectorSearchFormProps) {\n super(props);\n this.state = { value: '' };\n this._handleKeyPressPrev = this._handleKeyPressPrev.bind(this);\n const payLoad: IPayLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SearchStore);\n this.storeSearchAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ShowAllStore;\n this.showAllStoreAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ToggleMapView;\n this.toggleMapViewAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n const {\n resources: {\n searchButtonAriaLabel,\n searchPlaceholderText,\n seeAllStoresText,\n viewListText,\n viewMapText,\n pickupFilterByHeading,\n pickupFilterMenuHeading\n },\n id,\n value,\n isMapDisabled,\n showAllStores,\n displayList,\n locatorView,\n onShowAllStores,\n productPickUpDeliveryOptions,\n hasEnabledPickupFilterToShowStore\n } = this.props;\n\n const toggleButtonText = displayList ? viewMapText : viewListText;\n\n return (\n
\n \n
\n )}\n {this.renderPickupModesList(\n this.props,\n toggleButtonText,\n productPickUpDeliveryOptions,\n pickupFilterMenuHeading,\n locatorView,\n pickupFilterByHeading,\n hasEnabledPickupFilterToShowStore,\n displayList\n )}\n \n );\n }\n\n /**\n * Handles the key press on the input box.\n * @param event - Event object.\n */\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\n // In order to avoid that. Checking if the search result is open or not.\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\n if (activeDescedantValue) {\n if (this.previousValue === '') {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n return;\n }\n\n if (activeDescedantValue !== this.previousValue) {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n } else {\n this.isSearchResultOpened = false;\n }\n }\n }\n };\n\n /**\n * Calls method display result.\n * @param event - The first number.\n */\n private readonly _handleKeyPressPrev = (event: React.KeyboardEvent): void => {\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Space) {\n this.props.onShowAllStores();\n }\n };\n\n /**\n * Method called on search text changed.\n * @param event - Input value.\n */\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\n const inputValue: string = event.target.value;\n\n await this.props.searchTermChanged(inputValue);\n };\n\n /**\n * Method called on search submit.\n * @param event - Input value.\n */\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\n event.preventDefault(); // Prevents form submission\n this.searchBoxRef.current?.blur();\n if (!this.isSearchResultOpened) {\n await this.props.performSearch(this.props.value);\n }\n this.isSearchResultOpened = false;\n };\n\n /**\n * Method called on product pickup option change.\n * @returns - Void.\n */\n private readonly _onChangeHandler = () => async (deliveryCode: string): Promise => {\n this.props.filterPickupModeSelected(deliveryCode);\n return Promise.resolve();\n };\n\n /**\n * Method to render pickup mode list.\n * @param props - Store selector search form props.\n * @param toggleButtonText - Locator view button text.\n * @param productPickUpDeliveryOptions - Product DeliveryOption List.\n * @param pickupFilterMenuHeading - Pickup store button text.\n * @param locatorView - Locator View is on\\off.\n * @param pickupFilterByHeading - Pickup list label text.\n * @param hasEnabledPickupFilterToShowStore - Flag to check header filter is enabled.\n * @param shouldDisplayList - Display List.\n * @returns Jsx component.\n */\n private readonly renderPickupModesList = (\n props: IStoreSelectorSearchFormProps,\n toggleButtonText: string,\n productPickUpDeliveryOptions: DeliveryOption[] | undefined,\n pickupFilterMenuHeading: string | undefined,\n locatorView: boolean | undefined,\n pickupFilterByHeading: string | undefined,\n hasEnabledPickupFilterToShowStore: boolean | undefined,\n shouldDisplayList?: boolean\n ): JSX.Element | null => {\n const toggleButtonClass = shouldDisplayList ? 'view-map' : 'list-view';\n if (hasEnabledPickupFilterToShowStore) {\n return (\n
\n {locatorView && (\n \n {toggleButtonText}\n \n )}\n \n
{pickupFilterByHeading}
\n
\n );\n }\n if (locatorView) {\n return (\n \n {toggleButtonText}\n \n );\n }\n return null;\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources, ITermsOfServiceLinkData } from '../store-selector.props.autogenerated';\n\nexport interface IStoreSelectorEmptyMessageProps {\n resources: IStoreSelectorResources;\n}\nexport const StoreSelectorEmptyMessage: React.FC = ({ resources }) => (\n
\n

{resources.emptyLocationsText}

\n
\n);\n\nexport const StoreSelectorWaiting: React.FC = () =>
;\n\nexport interface IStoreSelectorTermsOfServiceProps {\n link?: ITermsOfServiceLinkData;\n requestContext: Msdyn365.IRequestContext;\n onTextChange?(event: Msdyn365.ContentEditableEvent): void;\n}\n\nexport const StoreSelectorTermsOfService: React.FC = ({ link, requestContext, onTextChange }) => {\n if (link) {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-store-select__terms-link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link'\n };\n\n return (\n
\n \n
\n );\n }\n return null;\n};\n\nexport interface IStoreSelectorFoundLocationsMessage {\n resources: IStoreSelectorResources;\n locations?: IFullOrgUnitAvailability[];\n searchRadius: number;\n preferredDistanceUnit: string;\n isSeeAllStore: boolean;\n}\nexport const StoreSelectorFoundLocationsMessage: React.FC = ({\n locations,\n searchRadius,\n resources,\n isSeeAllStore,\n preferredDistanceUnit\n}) => {\n if (locations) {\n const storeCountMessage =\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n return (\n
\n {isSeeAllStore\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\n
\n );\n }\n\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IAccountProfileEditItem,\n IAccountProfileEditLoading,\n IAccountProfileEditLocalAccount,\n IAccountProfileEditViewProps\n} from './account-profile-edit';\n\nconst AccountProfileEditItem: React.FC = ({ wrapper, label, errorMessage, input }) => {\n return (\n \n {label}\n {errorMessage}\n {input}\n \n );\n};\n\nconst LocalAccount: React.FC = ({\n localAccount,\n items,\n errorMessage,\n buttonsWrapper,\n buttons,\n verificationSuccessModal,\n verificationSuccessModalMessage\n}) => {\n return (\n \n {items &&\n items.map((item: IAccountProfileEditItem) => {\n // eslint-disable-next-line react/jsx-key\n return ;\n })}\n {errorMessage &&\n errorMessage.map((error: React.ReactNode, index: number) => {\n return {error};\n })}\n \n {buttons &&\n buttons.map((button: React.ReactNode, index: number) => {\n return {button};\n })}\n \n\n \n \n \n \n );\n};\n\nconst AccountProfileEditLoading: React.FC = ({ modal, modalBody, icon, message }) => {\n return (\n \n \n {icon}\n {message}\n \n \n );\n};\n\nconst AccountProfileEditView: React.FC = props => {\n const { accountProfileEdit, viewState, loading, defaultAADConainer, aadConainer, heading, accountProfileEditLocalAccount } = props;\n\n return (\n \n {viewState.isShowLoading && }\n {viewState.isShowLoading && }\n \n {heading}\n {LocalAccount(accountProfileEditLocalAccount)}\n \n \n );\n};\n\nexport default AccountProfileEditView;\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 pagination\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 {/* {pagination} */}\r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}\r\n // {/* <>{noLocationsMessage} */}\r\n }\r\n {pagination}\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","/*--------------------------------------------------------------\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 { IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport {\r\n IReportReviewModalViewProps,\r\n IReviewCardViewProps,\r\n IReviewsListData,\r\n IReviewsListResources,\r\n IReviewsListState,\r\n IReviewsListViewProps\r\n} from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\r\n\r\n/**\r\n * Build Review Card.\r\n * @param props - Review Card ViewProps.\r\n * @param resources - Resource Strings.\r\n * @param isUserReview - User review flag.\r\n * @returns JSX Element.\r\n */\r\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\r\n return (\r\n \r\n \r\n
\r\n {props.rating}\r\n {props.date}\r\n
\r\n {props.name}\r\n
\r\n \r\n \r\n {props.reviewTitle}\r\n {props.reviewText}\r\n \r\n \r\n {props.responseName}\r\n {props.responseDate}\r\n {props.responseText}\r\n \r\n \r\n {isUserReview ? undefined :

\r\n {resources.wasReviewHelpfulText}\r\n

}\r\n {props.like}\r\n {props.dislike}\r\n {props.edit}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Product Image.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\r\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\r\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product Description.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const product = props.data.product.result;\r\n return (\r\n \r\n
\r\n {renderProductImage(props)}\r\n
\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.ItemId}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review list ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const { resources, moduleProps, reviewModal } = props;\r\n return (\r\n \r\n {reviewModal.modalHeader}\r\n \r\n \r\n \r\n {renderProductDescription(props)}\r\n \r\n
\r\n {resources.selectRatingLabel}\r\n
\r\n {reviewModal.rating}\r\n
\r\n
\r\n \r\n {resources.reviewTitleLabel}\r\n {reviewModal.titleInput}\r\n \r\n \r\n {resources.reviewTextLabel}\r\n {reviewModal.textInput}\r\n \r\n {reviewModal.privacyPolicyUrl}\r\n {reviewModal.error}\r\n
\r\n
\r\n \r\n {reviewModal.submitButton}\r\n {reviewModal.cancelButton}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review modal ViewProps.\r\n * @param state - Review List State.\r\n * @returns JSX Element.\r\n */\r\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\r\n return (\r\n \r\n \r\n {state.reported ? props.headerSubmitted : props.header}\r\n \r\n \r\n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\r\n \r\n \r\n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * ReviewsList view.\r\n * @param props - Ratings ReviewsList ViewProps.\r\n * @returns ReviewsList view module.\r\n */\r\nconst ReviewsListview: React.FC> = props => {\r\n const {\r\n filterByDropdown,\r\n heading,\r\n moduleProps,\r\n noReviewsMessage,\r\n noReviewsWithFilterMessage,\r\n pageControls,\r\n refineReviewsProps,\r\n reportReviewModal,\r\n reviewsListProps,\r\n reviewCards,\r\n sortByDropdown,\r\n state,\r\n userReview,\r\n resources\r\n } = props;\r\n\r\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\r\n return (\r\n {noReviewsMessage}\r\n );\r\n }\r\n\r\n return (\r\n \r\n {heading}\r\n \r\n {sortByDropdown}\r\n {filterByDropdown}\r\n \r\n \r\n {userReview && buildReviewCard(userReview, resources, true)}\r\n {reviewCards.map(review => {\r\n return buildReviewCard(review, resources, false);\r\n })}\r\n \r\n { !ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\r\n {pageControls}\r\n {createReviewModal(props)}\r\n {createReportModal(reportReviewModal, state)}\r\n \r\n );\r\n};\r\n\r\nexport default ReviewsListview;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Interface Pickup option list.\n */\nexport interface IPickUpOptionListProps {\n pickupListOptionMenuText: string;\n pickupmodeList?: DeliveryOption[];\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Interface pickup option list state.\n */\nexport interface IPickOptionListState {\n expandSiteOptions: boolean;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class PickUpOptionList extends React.PureComponent {\n private readonly _pickupListOptionMenu: React.RefObject;\n\n private readonly _pickupListOptionButton: React.RefObject;\n\n private readonly eventsToBeBind = ['click', 'touchstart'];\n\n public constructor(props: IPickUpOptionListProps) {\n super(props);\n this._renderDeliveryOptions = this._renderDeliveryOptions.bind(this);\n this._pickupListOptionMenu = React.createRef();\n this._pickupListOptionButton = React.createRef();\n this.state = {\n expandSiteOptions: false\n };\n }\n\n public componentDidMount(): void {\n for (const event of this.eventsToBeBind) {\n window.addEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public componentWillUnmount(): void {\n for (const event of this.eventsToBeBind) {\n window.removeEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public render(): JSX.Element {\n const { pickupListOptionMenuText, pickupmodeList } = this.props;\n\n return (\n
\n \n {pickupListOptionMenuText}\n \n \n {this.state.expandSiteOptions ? (\n
    \n {pickupmodeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Handle the document click.\n * @param event -- Event object.\n */\n private readonly handleDocumentClick = (event: Event): void => {\n const htmlElement = event.target as HTMLElement;\n if (\n !(\n (this._pickupListOptionButton.current !== null &&\n (event.target === this._pickupListOptionButton.current ||\n this._pickupListOptionButton.current.contains(htmlElement))) ||\n (this._pickupListOptionMenu.current !== null &&\n (event.target === this._pickupListOptionMenu.current || this._pickupListOptionMenu.current.contains(htmlElement)))\n )\n ) {\n this.setState({\n expandSiteOptions: false\n });\n }\n };\n\n private _renderDeliveryOptions(event: React.MouseEvent): void {\n event.stopPropagation();\n const isExpandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !isExpandSiteOptionsState\n });\n }\n\n /**\n * Select Delivery option.\n * @param event -- Event Object.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode && deliveryCode.length > 0) {\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\n\n/**\n * Store Locator line item resources.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n\n closedText: string;\n\n outOfStock: string;\n inStock: string;\n\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n pickupDeliveryOptionErrorMessage?: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * Store Locator line item props.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n };\n}\n\n/**\n * Store Locator line item action component.\n */\nconst storeSelectorLocationLineItemComponentActions = {\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\n props.handlers.onSelected(props.location, deliveryMode);\n },\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\n },\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onRemovePreferredStore();\n }\n};\n\n/**\n * Function to render store hours.\n * @param storeHours - Store Hours object.\n * @param location - Store Unit.\n * @param resources - Resources.\n * @returns - Jsx element.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n location: OrgUnitLocation,\n resources: IStoreSelectorLocationLineItemResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day houts\n if (storeHours?.RegularStoreHours) {\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\n\n return (\n
\n {storeHoursList.map(displayTime => (\n
\n {displayTime.endDayShort ? (\n
\n {displayTime.startDayShort}–\n {displayTime.endDayShort}\n
\n ) : (\n
\n {displayTime.startDayShort}\n
\n )}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string | undefined = secondsToTime(location.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\n\n return (\n
\n {storeOpenFrom}-{storeOpenTo}\n
\n );\n};\n\n/**\n * Function to return distance measure unit.\n * @param distance - Store location within radius.\n * @param preferredDistanceUnit - Unit configuration.\n * @param isLocationDisabled - Flag to check user location.\n * @returns - Unit of distance.\n */\nexport const buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n isLocationDisabled?: boolean\n): string | undefined => {\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < 1) {\n return `(<1 ${preferredDistanceUnit})`;\n }\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\n};\n\n/**\n * Function to store contact.\n * @param contacts - Store location within radius.\n * @returns - Return primary contact number of store.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\n return Promise.resolve();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: IStoreSelectorLocationLineItemProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns DeliveryOptionList.\n */\nexport const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n const deliveryOption: DeliveryOption[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n });\n\n return deliveryOption;\n};\n\n/**\n * Renders store location line items.\n * @param props - Store location line items props.\n * @returns - HTML.\n */\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\n const {\n hideStockStatus,\n isCurrentLocation,\n isInStock,\n location,\n resources,\n storeHours,\n stockStatusLabel,\n storeLocatorView,\n index,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n shouldShowIndex\n } = props;\n\n const storeName: string | undefined = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = hideStockStatus || isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [isError, setError] = React.useState(false);\n\n const pickUpButtonClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n if (deliveryOptionList.length === 0) {\n setError(true);\n } else {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\n }\n };\n\n /* eslint-disable prettier/prettier */\n return (\n
\n
\n {(shouldShowIndex || storeLocatorView) && {index}}\n {storeName}\n {distanceAsString ? \n {' '}\n {distanceAsString}\n : false}\n
\n
\n
\n

{resources.contactInfoHeader}

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

{resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

}\n {stockText &&

{stockText}

}\n {isCurrentLocation ? (\n

{resources.currentLocation}

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

{locationLineItem.resources.contactInfoHeader}

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

{locationLineItem.resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

\n {stockText &&

{stockText}

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

{resources.currentLocation}

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

{storeSelectorViewProps.resources.contactText}

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

{storeSelectorViewProps.resources.timeText}

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

{productAvailability}

\n {stockStatus &&

{stockStatus}

}\n
\n )}\n
\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n {canSelectPickUpMethod}\n
\n );\n};\n\n/**\n * Store Selector View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst StoreSelectorViewComponent: React.FC> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Store-Selector.tsx file\n const {\n BodyContainerProps,\n storeResultContainerProps,\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n locationsMessage,\n search,\n state,\n spinner,\n maps,\n locationsList,\n noLocationsMessage,\n terms,\n storeDetailsModal,\n selectedLocation,\n bodyWrapperProps,\n data,\n context\n } = props;\n const selectedLocationReference = React.useRef(null);\n const [isDesktopPort, setIsDesktopPort] = React.useState(false);\n\n const isDesktopViewport = React.useCallback(() => {\n const portView = isMobile({ variant: VariantType.Browser, context: context.request });\n const isDesktopPorts = portView === 'md' || portView === 'xl' || portView === 'lg';\n setIsDesktopPort(isDesktopPorts);\n }, [context]);\n\n React.useEffect(() => {\n if (props.locationsList) {\n /**\n * Method to handle scrolling.\n */\n const scrollIntoView = () => {\n const selectedLocationDiv = (selectedLocationReference as React.RefObject).current;\n if (selectedLocationDiv !== null) {\n const offset = selectedLocationDiv.getBoundingClientRect();\n const parent = selectedLocationDiv.parentElement?.parentElement;\n if (parent && offset) {\n const totalHeight = parent.scrollTop + offset.top;\n parent.scrollTop = totalHeight - parent.clientHeight;\n }\n }\n };\n scrollIntoView();\n }\n }, [props.locationsList]);\n\n React.useEffect(() => {\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', isDesktopViewport);\n }\n isDesktopViewport();\n }, [isDesktopViewport]);\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\n\n const isDesktopView = viewport === 'md' || viewport === 'lg' || viewport === 'xl';\n\n if (!isDesktopView || !isDesktopPort) {\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n \n \n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n {maps}\n \n {selectedLocation && renderSelectedStore(selectedLocation, props)}\n \n \n \n \n {terms}\n \n );\n }\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n \n {maps}\n \n \n {terms}\n \n );\n};\n\nexport default StoreSelectorViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICartLineItemViewProps,\n ICartlinesViewProps,\n ICartResources,\n ICartViewProps,\n IOrderSummaryErrors\n} from '@msdyn365-commerce-modules/cart';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartProps as ICartExtensionProps } from '../definition-extensions/cart.ext.props.autogenerated';\n\n/**\n * Toggle Bopis Function.\n * @param cartLine -CartLine.\n * @param isBopisSelected -Boolean.\n * @returns Toggle Bopis.\n */\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * Change Store Function.\n * @param cartLine -CartLine.\n * @returns Toggle Bopis.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const {\n shipInsteadDisplayText,\n shipToAddressDisplayText,\n pickItUpDisplayText,\n pickUpAtStoreWithLocationText,\n changeStoreDisplayText\n } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
\n {isBopisSelected ? (\n {pickUpAtStoreWithLocationText}\n ) : (\n {shipToAddressDisplayText}\n )}\n
\n {isBopisSelected && (\n
\n {cartLine.pickUpInStore.orgUnitName}\n \n
\n )}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n
\n );\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderGroupBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? (\n \n ) : null}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLine = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element => {\n if (cartLine.error === resources.outOfStockErrorMessage) {\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (isMultiplePickUp) {\n return (\n \n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (cartLine.addToOrderTemplate) {\n return (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlinesInternal = (\n cartLines: ICartlinesViewProps[],\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n return cartLines.map((cartLine, index) => {\n const itemIndex = index;\n return (\n
\n {cartLine.cartline}\n \n {isMultiplePickUp\n ? null\n : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {renderCartLine(cartLine, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n
\n );\n });\n};\n\n/**\n * Render Cart Lines.\n * @param props - The cart line props.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param waitingComponent - Waiting component element.\n * @param cartLoadingStatus - Cart loading status string.\n * @param isCartDataResult - Flag to check if there is cart data.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlines = (\n props: ICartViewProps & ICartExtensionProps<{}>,\n cartLines: ICartlinesViewProps[] | undefined,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n isCartDataResult: boolean,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\n if (cartLines) {\n return props.multiplePickUpEnabled ? (\n renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\n ) : (\n \n {renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n );\n }\n\n return isCartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const itemCountOne: number = 1;\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\n const countTitle = `(${count} ${suffix})`;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n

{countTitle}

\n
\n \n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupHeader = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n count: number,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText, payInvoicesDisplayText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (cartLine.data && cartLine.data.cartline.IsInvoiceLine) {\n groupTitle = payInvoicesDisplayText;\n } else if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, resources, count)}\n
\n \n );\n};\n\n/**\n * Returns count of products.\n * @param cartLine - The cart line view props.\n * @returns Number of products.\n */\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n const defaultItemCount = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\n }, defaultItemCount);\n return countItem;\n};\n\n/**\n * Render Cart Lines group.\n * @param props - The cart line view props.\n * @param resources - Module resource strings.\n * @returns JSX Element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n cartlines[0],\n resources,\n countItems(cartlines),\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {renderCartlines(\n props,\n cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\n/**\n * Render error block.\n * @param errorData - Error component.\n * @returns JSX Element.\n */\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Render invoice summary.\n * @param invoiceSummaryLines - Invoice summary component.\n * @param orderSummaryItems - Order summary component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render order summary.\n * @param orderSummaryLines - Order summary component.\n * @param orderSummaryItems - Order summary items component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {orderSummaryLines.subtotal}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render error block.\n * @param promotions - The module view props.\n * @returns JSX Element.\n */\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Render order summary checkout.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.cart?.hasInvoiceLine ? null : props.promoCode}\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n \n {props.createTemplateFromCartButton}\n \n );\n};\n\n/**\n * Render order summary checkout button.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n \n );\n};\n\n/**\n * Render cart view.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\n const totalItemCountOne: number = 1;\n const updatedTitle = (\n

\n {props.resources.cartTitle}\n \n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? 'items' : 'item'})`}\n \n

\n );\n return (\n
\n {props.checkoutBlockedDueToUnavailableFunds}\n {updatedTitle}\n
{props.orderSummaryLineitems?.orderTotal}
\n {renderOrderSummaryCheckoutButton(props)}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\n {props.cart?.hasInvoiceLine || props.multiplePickUpEnabled\n ? renderCartLinesGroup(props, props.resources)\n : renderCartlines(\n props,\n props.cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n {props.orderSummaryHeading && (\n \n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {renderErrorBlock(props.OrderSummaryErrors)}\n \n {renderOrderSummaryCheckout(props)}\n \n )}\n {props.storeSelector}\n
\n );\n};\n\nexport default CartView;\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 { IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport {\r\n IReportReviewModalViewProps,\r\n IReviewCardViewProps,\r\n IReviewsListData,\r\n IReviewsListResources,\r\n IReviewsListState,\r\n IReviewsListViewProps\r\n} from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\r\n\r\n/**\r\n * Build Review Card.\r\n * @param props - Review Card ViewProps.\r\n * @param resources - Resource Strings.\r\n * @param isUserReview - User review flag.\r\n * @returns JSX Element.\r\n */\r\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\r\n return (\r\n \r\n \r\n
\r\n {props.rating}\r\n {props.date}\r\n
\r\n {props.name}\r\n
\r\n \r\n \r\n {props.reviewTitle}\r\n {props.reviewText}\r\n \r\n \r\n {props.responseName}\r\n {props.responseDate}\r\n {props.responseText}\r\n \r\n \r\n {isUserReview ? undefined :

\r\n {resources.wasReviewHelpfulText}\r\n

}\r\n {props.like}\r\n {props.dislike}\r\n {props.edit}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Product Image.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\r\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\r\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product Description.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const product = props.data.product.result;\r\n return (\r\n \r\n
\r\n {renderProductImage(props)}\r\n
\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.ItemId}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review list ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const { resources, moduleProps, reviewModal } = props;\r\n return (\r\n \r\n {reviewModal.modalHeader}\r\n \r\n \r\n \r\n {renderProductDescription(props)}\r\n \r\n
\r\n {resources.selectRatingLabel}\r\n
\r\n {reviewModal.rating}\r\n
\r\n
\r\n \r\n {resources.reviewTitleLabel}\r\n {reviewModal.titleInput}\r\n \r\n \r\n {resources.reviewTextLabel}\r\n {reviewModal.textInput}\r\n \r\n {reviewModal.privacyPolicyUrl}\r\n {reviewModal.error}\r\n
\r\n
\r\n \r\n {reviewModal.submitButton}\r\n {reviewModal.cancelButton}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review modal ViewProps.\r\n * @param state - Review List State.\r\n * @returns JSX Element.\r\n */\r\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\r\n return (\r\n \r\n \r\n {state.reported ? props.headerSubmitted : props.header}\r\n \r\n \r\n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\r\n \r\n \r\n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * ReviewsList view.\r\n * @param props - Ratings ReviewsList ViewProps.\r\n * @returns ReviewsList view module.\r\n */\r\nconst ReviewsListview: React.FC> = props => {\r\n const {\r\n filterByDropdown,\r\n heading,\r\n moduleProps,\r\n noReviewsMessage,\r\n noReviewsWithFilterMessage,\r\n pageControls,\r\n refineReviewsProps,\r\n reportReviewModal,\r\n reviewsListProps,\r\n reviewCards,\r\n sortByDropdown,\r\n state,\r\n userReview,\r\n resources\r\n } = props;\r\n\r\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\r\n return (\r\n {noReviewsMessage}\r\n );\r\n }\r\n\r\n return (\r\n \r\n {heading}\r\n \r\n {sortByDropdown}\r\n {filterByDropdown}\r\n \r\n \r\n {userReview && buildReviewCard(userReview, resources, true)}\r\n {reviewCards.map(review => {\r\n return buildReviewCard(review, resources, false);\r\n })}\r\n \r\n { !ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\r\n {pageControls}\r\n {createReviewModal(props)}\r\n {createReportModal(reportReviewModal, state)}\r\n \r\n );\r\n};\r\n\r\nexport default ReviewsListview;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLoadingMessage {\n className: string;\n message: string;\n}\n\nconst AccountProfileEditLoadingMessage: React.FC = ({ className, message }) => (\n
{message}
\n);\n\nexport default AccountProfileEditLoadingMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IGroup,\n IGroupDelivery,\n IGroups,\n IHelp,\n IOrderDetailsViewProps,\n IOrderInformation,\n IOrderSummary,\n IPaymentMethods,\n ISalesLine\n} from '@msdyn365-commerce-modules/order-management';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport const OrderInfomation: React.FC = ({\n orderInformationProps,\n salesId,\n receiptId,\n createdDate,\n count,\n amount,\n channelReferenceId,\n channelName,\n channelAddress\n}) => (\n \n {channelName}\n {channelAddress}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n \n);\n\nexport const SalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton, errors }) => (\n \n {salesLine}\n {buyAgainButton}\n {errors}\n \n);\n\nexport const GroupDelivery: React.FC = ({ deliveryProps, heading, count }) => (\n \n {heading}\n {count}\n \n);\n\nexport const Group: React.FC = ({ groupProps, delivery, address, salesLinesProps, salesLines, isCashAndCarryTransaction }) => (\n \n {delivery && }\n \n {salesLines && (\n \n {salesLines.map(salesLine => (\n \n {salesLine.data.deliveryType === 'ship' && salesLine.data.shipment ? salesLine.trackingInfo : null}\n \n {!isCashAndCarryTransaction && salesLine.salesStatus}\n \n ))}\n \n )}\n {!delivery.showTimeslot && address}\n {delivery.showTimeslot && (\n \n {address}\n {delivery.pickupDateTimeslot}\n \n )}\n \n \n);\n\nexport const Groups: React.FC = ({ groupsProps, groups }) => (\n \n {groups.map((group, index) => (\n \n ))}\n \n);\n\nexport const OrderSummary: React.FC = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n \n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n \n);\n\nexport const Payment: React.FC = ({ paymentMethodsProps, title, methods }) => (\n \n {title}\n {methods}\n \n);\n\nexport const Help: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n \n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n \n);\n\nconst OrderDetailsView: React.FC = ({\n moduleProps,\n viewModes,\n tableViewActions,\n table,\n placedBy,\n heading,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n \n {placedBy}\n {heading}\n {alert}\n {loading}\n {orderInfomation && }\n {tableViewActions}\n {viewModes}\n {table}\n {groups && }\n \n {orderSummary && }\n {payment && }\n \n {help && }\n \n );\n};\n\nexport default OrderDetailsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\n\nimport { IStoreSelectorLocationLineItemResources } from '.';\n\nexport interface IHoursDisplayInfo {\n startDayShort: string;\n startDayFull: string;\n endDayShort?: string;\n endDayFull?: string;\n timeRange: string;\n}\n\ninterface IHoursInfo {\n isClosed: boolean;\n openTime?: number;\n closeTime?: number;\n}\n\ntype DayType = 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN';\n\nexport const secondsToTime = (seconds: number | undefined): string | undefined => {\n if (seconds === undefined) {\n return undefined;\n }\n let hours = Math.floor(seconds / (60 * 60));\n const ampm = hours >= 12 ? 'pm' : 'am';\n hours %= 12;\n hours = hours ? hours : 12;\n const divisorForMinutes = seconds % (60 * 60);\n const minutes = Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\n return `${hours}:${minutes} ${ampm}`;\n};\n\nconst getShortTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.monday;\n case 'TUE':\n return resources.days.tuesday;\n case 'WED':\n return resources.days.wednesday;\n case 'THU':\n return resources.days.thursday;\n case 'FRI':\n return resources.days.friday;\n case 'SAT':\n return resources.days.saturday;\n default:\n // Case 'SUN':\n return resources.days.sunday;\n }\n};\n\nconst getFullTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.mondayFull;\n case 'TUE':\n return resources.days.tuesdayFull;\n case 'WED':\n return resources.days.wednesdayFull;\n case 'THU':\n return resources.days.thursdayFull;\n case 'FRI':\n return resources.days.fridayFull;\n case 'SAT':\n return resources.days.saturdayFull;\n default:\n // Case 'SUN':\n return resources.days.sundayFull;\n }\n};\n\nconst buildHoursDisplayInfo = (\n startDay: DayType,\n endDay: DayType,\n hoursInfo: string,\n resources: IStoreSelectorLocationLineItemResources\n): IHoursDisplayInfo => {\n return {\n startDayShort: getShortTimeString(startDay, resources),\n startDayFull: getFullTimeString(startDay, resources),\n endDayShort: startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,\n endDayFull: startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,\n timeRange: hoursInfo\n };\n};\n\nconst shouldMergeLines = (firstLine: IHoursInfo, secondLine: IHoursInfo): boolean => {\n if (firstLine.isClosed && secondLine.isClosed) {\n return true;\n }\n\n if (!firstLine.isClosed && !secondLine.isClosed) {\n return firstLine.openTime === secondLine.openTime && firstLine.closeTime === secondLine.closeTime;\n }\n\n return false;\n};\n\nconst getStoreHoursData = (storeHours: RegularStoreHours, dateForLookup: string): IHoursInfo => {\n return {\n isClosed: get(storeHours, `IsClosedOn${dateForLookup}`, false),\n openTime: get(storeHours, `${dateForLookup}OpenTime`, undefined),\n closeTime: get(storeHours, `${dateForLookup}CloseTime`, undefined)\n };\n};\n\nconst buildStoreHoursString = (hoursInfo: IHoursInfo, resources: IStoreSelectorLocationLineItemResources): string => {\n if (hoursInfo.isClosed) {\n return resources.closedText;\n }\n const openFrom: string | undefined = secondsToTime(hoursInfo.openTime);\n const openTo: string | undefined = secondsToTime(hoursInfo.closeTime);\n\n return `${openFrom}–${openTo}`;\n};\n\nexport const buildStoreHours = (storeHours: RegularStoreHours, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo[] => {\n const storeHoursList: IHoursDisplayInfo[] = [];\n\n const mondayHours = getStoreHoursData(storeHours, 'Monday');\n const tuesdayHours = getStoreHoursData(storeHours, 'Tuesday');\n const wednesdayHours = getStoreHoursData(storeHours, 'Wednesday');\n const thursdayHours = getStoreHoursData(storeHours, 'Thursday');\n const fridayHours = getStoreHoursData(storeHours, 'Friday');\n const saturdayHours = getStoreHoursData(storeHours, 'Saturday');\n const sundayHours = getStoreHoursData(storeHours, 'Sunday');\n\n let periodStart: DayType = 'MON';\n let periodEnd: DayType = 'MON';\n\n if (!shouldMergeLines(mondayHours, tuesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(mondayHours, resources), resources));\n\n periodStart = 'TUE';\n }\n periodEnd = 'TUE';\n\n if (!shouldMergeLines(tuesdayHours, wednesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(tuesdayHours, resources), resources));\n\n periodStart = 'WED';\n }\n periodEnd = 'WED';\n\n if (!shouldMergeLines(wednesdayHours, thursdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(wednesdayHours, resources), resources));\n\n periodStart = 'THU';\n }\n periodEnd = 'THU';\n\n if (!shouldMergeLines(thursdayHours, fridayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(thursdayHours, resources), resources));\n\n periodStart = 'FRI';\n }\n periodEnd = 'FRI';\n\n if (!shouldMergeLines(fridayHours, saturdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(fridayHours, resources), resources));\n\n periodStart = 'SAT';\n }\n periodEnd = 'SAT';\n\n if (!shouldMergeLines(saturdayHours, sundayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(saturdayHours, resources), resources));\n\n periodStart = 'SUN';\n }\n periodEnd = 'SUN';\n\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(sundayHours, resources), resources));\n\n return storeHoursList;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditInputProps {\n id?: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: any;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface IAccountProfileEditInput {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst GetMaxLength = (maxLength?: string): number | undefined => {\n if (maxLength) {\n const parsedMaxLength = Number.parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nconst AccountProfileEditInput: React.FC = ({ id, type, value, pattern, className, maxLength, onChange }) => (\n \n);\n\nexport default AccountProfileEditInput;\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 // scroll into view to have the page scroll to the top of the list when the page changes.\r\n const selectedLocationDiv = this.selectedLocationRef.current;\r\n const parent = selectedLocationDiv?.parentElement;\r\n if (selectedLocationDiv && parent) {\r\n // if (parent.scrollTop + parent.clientHeight > selectedLocationDiv.offsetTop) {\r\n // parent.scrollTop = selectedLocationDiv.offsetTop - parent.offsetTop - 20;\r\n // } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\r\n // // parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\r\n // }\r\n\r\n // Set the parent to the location of the selected dealer and slide it down by a small 20 px buffer.\r\n parent.scrollTop = selectedLocationDiv.offsetTop - parent.offsetTop - 20;\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","import React from 'react';\r\n// import { ICartResources } from '../../definition-extensions/cart.ext.props.autogenerated';\r\n// import { ICheckoutResources } from '../../definition-extensions/checkout.ext.props.autogenerated';\r\n\r\ninterface IEveLinePaginationProps {\r\n nextPage: (e: React.MouseEvent) => void;\r\n prevPage: (e: React.MouseEvent) => void;\r\n changePage: (page: number) => void;\r\n currentPage: number;\r\n numPages: number;\r\n prev: string;\r\n next: string;\r\n}\r\n\r\n/**\r\n * Renders pagination navigation on the page, which displays 4 buttons that allow\r\n * user to navigate to the first, last, next or previous pages. Also displays\r\n * the current page out of the total number of pages. ( ie. 5/7 )\r\n *\r\n * @param {(e: React.MouseEvent) => void} nextPage\r\n * @param {(e: React.MouseEvent) => void} prevPage\r\n * @param {(page: number) => void} changePage\r\n * @param {number} currentPage\r\n * @param {number} numPages\r\n * @param {ICartResources} resources\r\n * @return {*} {React.ReactNode}\r\n */\r\nexport const EveLinePagination: React.FC = ({\r\n nextPage,\r\n prevPage,\r\n changePage,\r\n currentPage,\r\n numPages,\r\n prev,\r\n next\r\n}) => {\r\n const firstPage: number = 1;\r\n const baseClassName = 'eve-pagination';\r\n\r\n return (\r\n
\r\n {numPages > 1 && (\r\n <>\r\n <>\r\n changePage(1)}\r\n >\r\n {`${firstPage}`}\r\n \r\n \r\n {prev}\r\n \r\n \r\n
\r\n \r\n {currentPage} / {numPages}\r\n \r\n
\r\n <>\r\n \r\n {next}\r\n \r\n changePage(numPages)}\r\n >\r\n {`${numPages}`}\r\n \r\n \r\n \r\n )}\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/// \r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { 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\nimport getDealerLocations, { GetDealerLocationsInput } from '../../actions/get-dealer-locations.action';\r\nimport { IDealerEntity } from '../../actions/DataServiceEntities.g';\r\nimport { getDealerDetailsAsync } 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\nimport { EveLinePagination } from './components/eve-line-pagination';\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 pagination: React.ReactNode;\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 // state value that will store the current page\r\n currentPage: number;\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 private readonly defaultPageLength: number = 20;\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 // set the page to the first page when the module first renders\r\n currentPage: 1\r\n };\r\n }\r\n\r\n public async componentDidMount(): Promise {\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 } = 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 }\r\n }\r\n );\r\n\r\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\r\n await this.props.data.storeSelectorStateManager.result.loadMapApi({\r\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\r\n lang: this.props.context.actionContext.requestContext.locale,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\r\n });\r\n }\r\n\r\n 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\r\n const { newDealerLocations, currentPage } = 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 const pageLength = this.props.config.pageLength || this.defaultPageLength;\r\n const paginatedLocationsList = newDealerLocations?.slice((currentPage - 1) * pageLength, pageLength * currentPage);\r\n const numPages = newDealerLocations ? Math.ceil(newDealerLocations.length / pageLength) : 1;\r\n\r\n const nextPage = () => {\r\n changePage(this.state.currentPage + 1);\r\n };\r\n\r\n const prevPage = () => {\r\n changePage(this.state.currentPage - 1);\r\n };\r\n\r\n const changePage = (page: number) => {\r\n // Don't make a page change if it is below the first page or greater than the last page\r\n if (page <= 0 || page > numPages) {\r\n return;\r\n }\r\n\r\n storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\r\n\r\n const scrollElement = document.querySelector('div.ms-store-select__locations.show');\r\n\r\n if (scrollElement !== null) {\r\n scrollElement.scrollTop = 0;\r\n }\r\n\r\n this.setState(\r\n { currentPage: page },\r\n // Rerender the map with pins for current page\r\n () => this._updateMap()\r\n );\r\n };\r\n const pagination = (\r\n \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(newDealerLocations) && newDealerLocations[0].OrgUnitLocation ? (\r\n \r\n ) : (\r\n undefined\r\n ),\r\n search: (\r\n \r\n ),\r\n pagination,\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 this._updateMap();\r\n if (newDealerLocations) {\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 // 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: 2000 }\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: IPushpinOptionsData = { ...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.Pushpin[] = [];\r\n pushpinOptions.color = pushpinOptions?.color ?? '#46555D';\r\n pushpinOptions.selectionColor = pushpinOptions?.selectionColor ?? '#003B64';\r\n pushpinOptions.size = pushpinOptions?.size ?? 1.25;\r\n pushpinOptions.showIndex = pushpinOptions?.showIndex ?? true;\r\n\r\n const currentPage = this.state.currentPage || 1;\r\n const pageLength = this.props.config.pageLength || this.defaultPageLength;\r\n const storeLocationList = orgUnitStoreInformation.filter(store => store.OrgUnitLocation !== undefined);\r\n const paginatedList = storeLocationList.slice((currentPage - 1) * pageLength, pageLength * currentPage);\r\n\r\n // for (const [index, unitStoreInfo] of storeLocationList.entries()) {\r\n for (const [index, unitStoreInfo] of paginatedList.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.clear();\r\n this.map.layers.insert(clusterLayer);\r\n }\r\n this.map.setOptions({ pushpinAccessible: true });\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\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 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\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 config: { useChannelMfr },\r\n context: { actionContext }\r\n } = this.props;\r\n\r\n const newOrgUnitLocationsInput = new GetDealerLocationsInput(useChannelMfr || false, latitude || 0, longitude || 0, calRadius);\r\n const newOrgUnits = await getDealerLocations(newOrgUnitLocationsInput, actionContext);\r\n if (newOrgUnits && this.state.newDealerLocations) {\r\n void this._setOrgUnitStoreInformation(newOrgUnits).then(() => {\r\n this.setState({ newDealerLocations: [...newOrgUnits] });\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 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 * 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","/*!\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 { EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Modal, ModalBody } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IAccountProfileEditConfig, IAccountProfileEditProps } from './account-profile-edit.props.autogenerated';\nimport AccountProfileEditButtonComponent from './components/account-profile-edit-button';\nimport AccountProfileEditErrorComponent from './components/account-profile-edit-error';\nimport AccountProfileEditInputComponent from './components/account-profile-edit-input';\nimport AccountProfileEditLabelComponent from './components/account-profile-edit-label';\nimport AccountProfileEditLoadingIconComponent from './components/account-profile-edit-loading-icon';\nimport AccountProfileEditLoadingMessageComponent from './components/account-profile-edit-loading-message';\n\nexport interface IAccountProfileEditViewState {\n isShowLoading: boolean;\n}\n\nexport interface IAccountProfileEditItem {\n wrapper: INodeProps;\n key: string;\n label: React.ReactNode;\n errorMessage: React.ReactNode;\n input: React.ReactNode;\n}\n\nexport interface IAccountProfileEditLocalAccount {\n localAccount: INodeProps;\n items: IAccountProfileEditItem[];\n errorMessage: React.ReactNode[];\n buttonsWrapper: INodeProps;\n buttons: React.ReactNode[];\n verificationSuccessModal: INodeProps;\n verificationSuccessModalMessage: INodeProps;\n}\n\nexport interface IAccountProfileEditLoading {\n modal: INodeProps;\n modalBody: INodeProps;\n icon: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface IAccountProfileEditViewProps {\n className: string;\n viewState: IAccountProfileEditViewState;\n loading: IAccountProfileEditLoading;\n accountProfileEdit: IModuleProps;\n defaultAADConainer: INodeProps;\n aadConainer: INodeProps;\n heading: React.ReactNode;\n accountProfileEditLocalAccount: IAccountProfileEditLocalAccount;\n}\n\n/**\n *\n * AccountProfileEdit component\n * All AAD related module is rendered on AAD page and we need to respect HTML contract provide by AAD.\n * Please ensure any change in module don't break contract with AAD.\n * @extends {React.Component>}\n */\n@observer\nclass AccountProfileEdit extends React.Component> {\n private readonly moduleClassName: string = 'ms-account-profile-edit';\n\n private readonly telemetryContent: ITelemetryContent;\n\n @observable private givenName: string;\n\n @observable private surname: string;\n\n @observable private email: string;\n\n @observable private emailRegex: string;\n\n @observable private isInitialized: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private initializationTimer: any;\n\n constructor(props: IAccountProfileEditProps) {\n super(props);\n this.givenName = '';\n this.surname = '';\n this.email = '';\n this.emailRegex = EmailRegex.defaultRegex.source;\n this.isInitialized = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n this._onInit();\n }\n\n // After successful AAD initialization, call initialize method provided by AAD to attach events.\n public componentDidUpdate(): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (this.isInitialized && window && window['$element'] && window['$element']['initialize']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['$element']['initialize']();\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IAccountProfileEditProps,\n nextState: IAccountProfileEditViewState\n ): 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 const { config, resources } = this.props;\n\n const viewProps = {\n ...this.props,\n viewState: {\n isShowLoading: !this.isInitialized\n },\n accountProfileEdit: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, config.className)\n },\n loading: {\n modal: {\n tag: Modal,\n isOpen: true\n },\n modalBody: {\n tag: ModalBody\n },\n icon: ,\n message: \n },\n defaultAADConainer: {\n id: 'api',\n style: { display: 'none' }\n },\n aadConainer: {\n id: this.isInitialized ? 'api' : null,\n className: `${this.moduleClassName}__container`\n },\n heading: config.heading && config.heading.text && (\n \n ),\n accountProfileEditLocalAccount: this._renderLocalAccount()\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 onTextBoxChange = (event: React.ChangeEvent) => {\n const id = event.target.id;\n const value = event.target.value;\n\n switch (id.toLowerCase()) {\n case 'givenname': {\n this.givenName = value;\n break;\n }\n case 'surname': {\n this.surname = value;\n break;\n }\n case 'email': {\n this.emailRegex = value;\n break;\n }\n default:\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _onInit = () => {\n this._prePopulateData();\n this._updateErrorMessage();\n\n // Check if AAD initialization is complete. AAD do not provide any event to subscribe so we need to check variable set by AAD to check initialization status.\n this.initializationTimer = setInterval(() => {\n this._isInitializationSuccessful();\n }, 100);\n setTimeout(() => {\n clearInterval(this.initializationTimer);\n }, 10_000);\n };\n\n // After successful AAD initialization, remove waiting and preload any data, if needed.\n private readonly _isInitializationSuccessful = () => {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window && window['$diags'] && window['$diags']['initializationSuccessful']) {\n clearInterval(this.initializationTimer);\n this.isInitialized = true;\n }\n };\n\n private readonly _prePopulateData = () => {\n const { resources } = this.props;\n const invalidEmailAddressError = resources.invalidEmailAddressError || 'Please enter a valid email address.';\n\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window['SA_FIELDS'] && window['SA_FIELDS']['AttributeFields']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['SA_FIELDS']['AttributeFields'].map(\n (obj: { ID: string; PRE: string; PAT: string; UX_INPUT_TYPE: string; PAT_DESC: string }) => {\n const value = obj.PRE ? this._htmlDecode(obj.PRE) : '';\n switch (obj.ID.toLowerCase()) {\n case 'givenname': {\n this.givenName = value;\n break;\n }\n case 'surname': {\n this.surname = value;\n break;\n }\n case 'email': {\n this.email = value;\n this.emailRegex = obj.PAT;\n obj.PAT_DESC = invalidEmailAddressError;\n break;\n }\n default:\n }\n }\n );\n }\n };\n\n private _htmlDecode(str: string): string {\n const e = document.createElement('div');\n\n e.innerHTML = str;\n return e.childNodes.length === 0 ? '' : e.childNodes[0].nodeValue || '';\n }\n\n private readonly _updateErrorMessage = () => {\n const { resources } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n if (window && window['CONTENT']) {\n const message = {\n required_field: resources.requiredFieldMissingError,\n verifying_blurb: resources.loadingMessage\n };\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n Object.assign(window['CONTENT'], message);\n }\n };\n\n private _renderLocalAccount(): IAccountProfileEditLocalAccount {\n const { config, resources } = this.props;\n const localAccount = {\n localAccount: {\n id: 'attributeList',\n className: `${this.moduleClassName}__account-items attr`\n },\n items: [\n this._renderInput('givenName', 'text', this.givenName, resources.firstNameLabelText, resources.firstNameMaxLength),\n this._renderInput('surname', 'text', this.surname, resources.lastNameLabelText, resources.lastNameMaxLength)\n ],\n errorMessage: [\n ,\n ,\n \n ],\n buttonsWrapper: {\n className: `${this.moduleClassName}__buttons`\n },\n buttons: [\n ,\n \n ],\n verificationSuccessModal: {\n className: `${this.moduleClassName}__verifying-modal verifying-modal`\n },\n verificationSuccessModalMessage: {\n id: 'verifying_blurb',\n className: `${this.moduleClassName}__verifying-modal-message`\n }\n };\n\n if (config.showEmail && this.email !== '') {\n localAccount.items.push(\n this._renderInput('email', 'email', this.email, resources.emailAddressLabelText, undefined, this.emailRegex)\n );\n }\n\n return localAccount;\n }\n\n private _renderInput(\n id: string,\n type: string,\n value: string,\n labelText: string,\n maxLength?: string,\n pattern?: string\n ): IAccountProfileEditItem {\n const className = `${this.moduleClassName}__account-item`;\n return {\n wrapper: {\n className: classnames(className, `${className}-${id}`, 'entry-item', 'attrEntry')\n },\n key: id,\n label: (\n \n ),\n errorMessage: (\n \n ),\n input: (\n \n )\n };\n }\n}\n\nexport default AccountProfileEdit;\n"],"sourceRoot":""}