{"version":3,"sources":["webpack:///src/modules/product-specification/components/product-specification-table-stucture.tsx?4b07","webpack:///src/modules/store-selector/store-selector.view.tsx?b873","webpack:///src/modules/product-specification/product-specification.tsx?f393","webpack:///./src/components/select-input-group.tsx?7829","webpack:///./src/components/text-input-group.tsx?584b","webpack:///./src/components/input-group-form.tsx?332f","webpack:///./src/modules/smwe-content-block/smwe-content-block.view.tsx?360a","webpack:///src/modules/accordion-item/accordion-item.view.tsx?b04f","webpack:///src/modules/store-selector/components/pickup-option-list.tsx?9a9c","webpack:///src/modules/store-selector/components/store-pickup-option-list.tsx?27e0","webpack:///src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?89f3","webpack:///src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?5a50","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/store-selector/components/selected-store/selected-store.tsx?8d1a","webpack:///src/modules/store-selector/store-selector.tsx?ce13","webpack:///src/modules/accordion-item/accordion-item.tsx?fc54","webpack:///src/modules/product-specification/product-specification.view.tsx?bfbe","webpack:///src/modules/accordion/accordion.view.tsx?8c70","webpack:///src/modules/account-customer-balance/components/account-actions.tsx?bbe9","webpack:///src/modules/account-customer-balance/components/account-statement-request-modal.tsx?cf6e","webpack:///src/modules/account-customer-balance/components/index.tsx?9c6a","webpack:///src/index.ts?c6ae","webpack:///./src/dataActions/validation-form-employee.ts?b9df","webpack:///./src/modules/validation-form/validation-form.tsx?ebaa","webpack:///src/modules/interactive-feature-collection/interactive-feature-collection.view.tsx?5927","webpack:///./src/modules/lightbox/lightbox.tsx?fa91","webpack:///src/modules/interactive-feature-collection/interactive-feature-collection.tsx?2538","webpack:///src/modules/account-customer-balance/account-customer-balance.tsx?da17","webpack:///src/modules/account-welcome-tile/account-welcome-tile.tsx?abcf","webpack:///./src/modules/smwe-content-block/components/links.tsx?a531","webpack:///./src/modules/smwe-content-block/smwe-content-block.props.autogenerated.ts?3170","webpack:///./src/modules/smwe-content-block/smwe-content-block.tsx?cb33","webpack:///src/modules/accordion/accordion.tsx?45c1","webpack:///src/modules/account-welcome-tile/account-welcome-tile.view.tsx?a13c","webpack:///src/modules/account-customer-balance/account-customer-balance.view.tsx?35d2"],"names":["ProductSpecificationTableRow","_ref","productName","cellData","className","React","scope","dangerouslySetInnerHTML","getRichTextHtml","renderSelectedStore","props","storeDetailsMain","storeHeader","storeName","storeDetailsCloseButton","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","isCurrentLocation","currentLocation","isPreferredStore","preferredStoreButton","removePreferredStoreButton","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","ProductSpecification","constructor","super","handleHeadingChange","event","this","config","heading","text","target","value","_toggle","drawerListId","setState","isDrawerOpen","undefined","context","data","telemetry","catalogId","Msdyn365","request","validateCatalogId","reaction","product","result","RecordId","actionInput","AttributesForSelectedVariantInput","actionContext","requestContext","apiSettings","channelId","getAttributesForSelectedVariant","catch","error","message","debug","shouldComponentUpdate","nextProps","nextState","render","_heading$tag","productSpecificationData","length","isAccrodion","displayStyle","viewProps","_objectSpread","handleText","moduleProps","classnames","ProductSpecificationTableProps","tag","ProductSpecificationTableBodyProps","title","editProps","onEdit","productSpecificationResult","_createDrawerBody","_createTableBody","renderView","content","map","index","_renderProductCell","key","Name","accordionItemContainer","_product$Name","Drawer","collapseProps","timeout","isOpen","openGlyph","closeGlyph","glyphPlacement","toggleButtonText","onToggle","DataTypeValue","_renderCurrencyCell","_renderDateTimeCell","_renderDecimalCell","_renderIntegerCell","_renderTextCell","_renderTrueFalseCell","warning","CurrencyValue","CurrencyCode","_product$DateTimeOffs","DateTimeOffsetValue","toUTCString","IntegerValue","FloatValue","TextValue","BooleanValue","resources","trueValueText","falseValueText","__decorate","observer","SelectInputGroup","_errorMessage","_isFirstBlur","initialSelect","_internalValue","selectList","find","select","_valueChanged","bind","_blurred","label","onBlur","id","onChange","htmlProps","_jsxErrorMessage","currentlyInvalid","isValid","observable","TextInputGroup","initialValue","typeSettings","useDatePicker","type","min","minDate","htmlFor","placeholder","required","autoComplete","FormInputGroupBuilder","_formStructure","form","_handleFormExport","_handleValidityUpdate","_handleValueFinish","_handleSelectionUpdate","_handleSelectionValidity","submitText","keys","fieldName","field","customRender","_renderField","onClick","disabled","_isFormValid","defaultValue","item","externalGroup","labelText","formData","forEach","input","onFinish","validity","fieldData","validationText","onFieldValidityCheck","regex","test","ContentBlockView","contentBlockContainer","imageContainer","detailsContainer","links","image","contentBlockAnchorTag","imageLink","imageAriaLabel","style","colorTheme","backgroundColor","href","color","textColor","_renderAccordionItemContent","items","AccordionItemView","drawer","accordionSlots","AccordionItemContainer","AccordionItemContent","accordionItemContent","PickUpOptionList","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","current","contains","_pickupListOptionMenu","expandSiteOptions","_onSelect","async","preventDefault","deliveryCode","currentTarget","getAttribute","_renderDeliveryOptions","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","pickupListOptionMenuText","pickupmodeList","ref","role","delivery","Code","tabIndex","Description","stopPropagation","isExpandSiteOptionsState","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","onKeyDown","secondsToTime","seconds","hours","Math","floor","ampm","divisorForMinutes","getShortTimeString","day","days","monday","tuesday","wednesday","thursday","friday","saturday","sunday","getFullTimeString","mondayFull","tuesdayFull","wednesdayFull","thursdayFull","fridayFull","saturdayFull","sundayFull","buildHoursDisplayInfo","startDay","endDay","hoursInfo","startDayShort","startDayFull","endDayShort","endDayFull","timeRange","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","storeHours","dateForLookup","get","buildStoreHoursString","closedText","buildStoreHours","storeHoursList","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","push","storeSelectorLocationLineItemComponentActions","onLocationSelected","deliveryMode","handlers","onSelected","location","onSetAsPreferredStore","OrgUnitNumber","onRemovePreferredStore","buildDistanceString","distance","preferredDistanceUnit","isLocationDisabled","onPickupModeSelectHandler","pickupMode","onSetPreferredStoreClickHandler","removePreferredStoreHandler","onChangeHandler","Promise","resolve","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","pickup","_delivery","StoreSelectorLocationLineItemComponent","hideStockStatus","isInStock","stockStatusLabel","storeLocatorView","preferredStoreLocationId","isPreferredStoreEnabled","telemetryContent","productPickUpOptionList","shouldShowIndex","OrgUnitName","distanceAsString","Distance","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","filter","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","resourceLabel","inStock","outOfStock","stockLabel","stockText","pickupInStoreButtonText","selectLocation","pickupInStoreAriaLabel","selectLocationAriaLabelFormat","replace","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","attributes","getTelemetryAttributes","contentAction","etext","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","deliveryOptionList","isError","setError","contactInfoHeader","storeHoursHeader","renderStoreHours","RegularStoreHours","displayTime","JSON","stringify","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","availabilityInfoHeader","pickUpButtonClickHandler","renderPickupModes","filteredPickupMode","preferredStoreAriaLabel","preferredStoreText","setAsPreferredStoreTextAriaLabel","setAsPreferredStoreText","pickupDeliveryOptionErrorMessage","StoreSelectorLocationLines","onClickHandler","orgUnitLocation","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","itemAvailabilities","enableOutOfStockCheck","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","i","_availabilityWithHour","OrgUnitAvailability","OrgUnitLocation","InventoryLocationId","InventLocationId","StockLevelLabel","_mapResources","contactText","timeText","availabilityText","storeHoursClosedText","outOfStockText","inStockText","selectedStoreLocationText","selectStoreText","selectStoreAriaFormatText","storeHoursMondayText","storeHoursTuesdayText","storeHoursWednesdayText","storeHoursThursdayText","storeHoursFridayText","storeHoursSaturdayText","storeHoursSundayText","storeHoursMondayFullText","storeHoursTuesdayFullText","storeHoursWednesdayFullText","storeHoursThursdayFullText","storeHoursFridayFullText","storeHoursSaturdayFullText","storeHoursSundayFullText","storeCounter","componentDidUpdate","previousProps","selectedStoreLocationId","locations","_stores","_sortStores","show","displayList","store","_renderStoreLocation","_store$OrgUnitAvailab","OrgUnitPickUpDeliveryModes","_store$OrgUnitAvailab2","selected","StoreHours","ItemAvailabilities","toString","DeliveryOptions","productPickUpDeliveryOptions","stores","_value$OrgUnitAvailab","StoreSelectorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","keyCode","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Enter","Space","onShowAllStores","_searchTextChanged","inputValue","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","blur","performSearch","_onChangeHandler","filterPickupModeSelected","renderPickupModesList","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","shouldDisplayList","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","name","onSubmit","searchInputAriaLabel","onKeyUp","StoreSelectorEmptyMessage","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","_ref2","link","onTextChange","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","StoreSelectorFoundLocationsMessage","_ref3","searchRadius","isSeeAllStore","storeCountMessage","milesShortText","storeCountMessageInKm","storeAllCountMessage","onPickupInStoreClickHandler","_props$selectedStore","selectedStore","_props$selectedStore2","_props$selectedStore3","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","createElement","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","parentClassName","Button","StoreSelector","shouldHideInventory","preferredStore","hasEnabledOutOfStockCheck","availabilitiesWithHours","storeSelectorStateManager","storeLocations","selectedStoreResources","_selectedStore$OrgUni3","selectedProps","StoreId","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","handleLinkTextChange","termsOfServiceLink","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","_location$OrgUnitPick","some","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","channel","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","storeId","cookies","mode","setPreferredStoreLocation","isConsentGiven","Latitude","Longitude","clearPreferredStore","setSelectedStoreLocationId","_setSelectedStore","searchTerm","isSeeAllStoreValue","geoLocate","trim","_updateLocations","latitude","longitude","shouldShowAllStores","_navigator","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","PERMISSION_DENIED","_closeDialog","_storeSelectorStateMa","parentElementRef","focus","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","preferredLocationId","storeLocationList","orgUnitStoreInformation","showMapViewLink","isDialog","setOrgUnitStoreInformation","radius","lookupRadius","searchRadiusUnit","calRadius","distanceUnitValue","modeDefault","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","getTelemetryObject","telemetryPageName","friendlyName","_this$props$data$stor6","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$context","setTimeout","_this$props$data$stor2","_this$props$data$stor3","_this$props$data$stor4","_this$props$data$stor5","loadMapApi","BingMapsEnabled","lang","locale","market","_this$props$data$stor7","_this$props$data$stor8","_this$props$context$a","_this$props$data$stor9","when","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","isSameContext","_storeSelectorStateMa2","_storeSelectorStateMa3","_sortLocation","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","app","appConfig","slots","mapSlot","isMobileDevice","isMobile","variant","VariantType","Viewport","isInlineView","isLocatorView","listMapViewState","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","sortLocation","isEnableOutofStock","enableStockCheck","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","Modal","classname","autoFocus","fade","onClosed","horizontalPosition","verticalPosition","toggle","ModalHeader","ModalFooter","ModalBody","outOfStockThreshold","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","_store$OrgUnitAvailab3","selectedStoreLocation","lineResources","_store$OrgUnitAvailab4","locationOpen","openFrom","openTo","AccordionItem","moduleClassName","accordionItemTitle","_onToggle","accordionExpandedStateResult","accordionExpandedState","expanded","isAllExpanded","isExpandedOnInitialLoad","ControlledDrawer","interactionStyle","accordionState","update","createAccordionStateInput","ProductSpecificationView","rowdata","row","ObjectExtensions","isNullOrUndefined","accordionView","AccordionContainer","accordionItems","accordionButtons","HeaderSection","HeadingWrapper","accordianButtonsContainer","ActionBar","onRequestStatement","requestStatementButtonLabel","AdminRequestStatementButton","onToggleDropdown","myUserAccountLabel","fullOrganizationLabel","isDropdownShowing","buttonReference","onSelectCustomerAccount","onSelectFullOrg","popoverReference","requestStatementDropdownString","Random","Guid","generateGuid","innerRef","Popover","placement","RequestStatementModal","email","isModalOpen","fromDateString","toDateString","onChangeFromDate","onChangeToDate","canSubmitRequest","modalHeaderLabel","sendToEmailLabel","fromDateLabel","toDateLabel","submitRequestLabel","cancelLabel","onSubmitRequest","selectedUser","selectedUserLabel","modalAriaLabel","maxDateString","onChangeFromDateEvent","onChangeToDateEvent","onBlurFromDate","isFunction","onBlurToDate","max","AccountLabels","accountNumber","customerSincePrefix","createdOn","AccountValues","availableCredit","availableCreditLabel","AvailableCreditComponent","_ref5","BalanceOwedComponent","_ref6","balanceOwedLabel","balanceOwed","CreditExcessComponent","_ref7","creditExcessLabel","creditExcess","BackButton","_ref8","BackToShopping","ValidationFormEmployeeInput","shouldCacheOutput","getCacheKey","getCacheObjectType","dataCacheType","createEmployeeValidationInput","inputData","appContext","verifyEmployeeInput","customerId","employeeId","lastName","birthYear","employeeValidationAction","ctx","execute","action","ValidationForm","_isFormCompleted","_displayValidationError","_displayCommunicationsError","_ffDisplayValidationError","_ffDisplayCommunicationsError","_onFinished","_onFriendsAndFamilyFinished","validationError","fatalError","validationForm__ffVerificationFailed","description","logo","emailContact","Image","gridSettings","imageSettings","Heading","RichTextComponent","_formJSX","_familyAndFriendsJSX","_successJSX","welcomeMessage","validationForm__ffValidation","validationForm__ffValidationRequiredError","validationCode","employeeNumber","employeeNumberValidation","birthYearValidation","lastNameValidation","redirectDelay","redirectLink","createValidateFriendsAndFamilyInput","code","emailListId","mailingListID","sourceId","mailingListSourceID","validateFriendsAndFamilyAction","then","requestFullfilled","Status","e","user","customerAccountNumber","_parseLeadingZeros","Result","console","interactiveFeatureCollectionView","interactiveFeatureCollectionHeading","interactiveFeatureCollectionContainer","interactiveFeatureCollectionDesktopContainer","interactiveFeatureCollectionDesktopItems","interactiveFeatureCollectionMobileItems","interactiveFeatureCollectionMobileContainer","singleSlideCarouselComponentProps","singleSlideCarouselItemContainer","tileItem","keyIndex","Lightbox","_closeModal","_openModal","defaultOpenState","launchLightboxButton","_launchLightboxButton","hasLaunchLightboxButton","launchLightboxButtonText","zIndex","applicationNode","modalHeader","slot","buttonText","prevState","InteractiveFeatureCollection","_telemetryContent","handleTextChange","itemsCounter","indexItem","itemCounter","isMosaic","_this$props$config$cl","_title$tag","interactiveItems","interactiveFeatureItems","itemsFeatureCounter","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","vertical","createHeading","_getFeatureItem","AccountCustomerBalance","_showRequestStatementModal","isStatementRequestModalOpen","_toggleModal","_toggleDropdown","isStatementRequestAdminDropdownOpen","_updateFromDate","newFromDate","statementRequestFromDateString","_updateToDate","newToDate","statementRequestToDateString","_adminShowRequestStatementModal","isFullOrg","statementRequestFullOrg","_requestStatement","_this$props$data$b2bU","customer","customerInformation","B2BUserId","b2bUserInformation","statementRequest","FromDate","Date","ToDate","IsForFullOrganization","RequestedUserId","RequestingUserEmail","Email","DeliveryTypeValue","BusinessPartnerOperationDeliveryType","callerContext","BusinessPartnerUsersDataActions","requestAccountStatementAsync","statementRequestMaxDateString","toISOString","split","_get","account","includes","creditSummarySectionHeading","accountSectionHeading","backToShoppingText","myAccountStatementLabel","AccountNumber","_formatJoinDate","CreatedDateTime","FirstName","LastName","customerCredit","customerAccountBalance","excess","InvoiceAccountCreditLimit","CreditLimit","Balance","InvoiceAccountBalance","_formatCurrency","backLink","emailAddress","isB2BSite","isChannelTypeB2B","actionBar","IsB2bAdmin","accountLabels","accountValues","homeButton","actions","requestStatementModal","canSubmitStatementRequest","currency","currencyCode","formatCurrency","toFixed","date","Intl","DateTimeFormat","month","year","format","computed","AccountWelcomeTile","accountInfo","accountInformation","ContentCardLinks","_mapEditableLinks","linkdata","editableLinks","btnClass","additionalProperties","onTelemetryClick","actionableRegion","HeadingTag","ContentBlock","handleParagraphChange","paragraph","linkIndex","contentBlockTitle","imageProps","contentBlockLinks","LinksComponent","contentBlockText","contentBlockImage","contentBlockviewProps","moduleClass","_getImageLink","region","imageAndLinks","Accordion","expandAllButtonRef","collapseAllButtonRef","_onExpandAll","_onCollapseAll","isDisabled","headingComponent","accordionViewProps","_renderAccordionButton","_getAccordionItem","ExpandAll","attributeExpandAll","CollapseAll","attributeCollapseAll","showToggleAll","expandAllText","toggleAllSeparator","collapseAllText","_this$collapseAllButt","_this$expandAllButton","AccountWelcomeTileView","creditSummaryLabels","creditSummaryValues"],"mappings":"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","file":"static/js/21.6c76f3ef37c6e414cf10.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\n/**\n * Product specification table row.\n */\nexport interface IProductSpecificationTableRow {\n productName?: string;\n cellData?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Product specification table row component.\n * @param props - For product specification table row.\n * @param props.productName - Product name.\n * @param props.cellData - Cell data.\n * @param props.className - Class name.\n * @returns - Returns JSX element.\n */\nexport const ProductSpecificationTableRow: React.FC = ({ productName, cellData, className }) => (\n \n \n {/* eslint-disable-next-line react/no-danger */}\n \n \n {cellData}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISelectedStoreViewProps } from './components/selected-store/selected-store';\nimport { IStoreSelectorViewProps } from './store-selector';\n\n/**\n * Renders the pickup Delivery options.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderDeliveryOptions: React.FC = props => {\n const { canSelectLocation, deliveryOptions, pickUpDeliveryOptionButton, pickupModes } = props;\n\n return (\n <>\n {/* eslint-disable-next-line no-nested-ternary -- Need this.*/}\n {canSelectLocation ? (ArrayExtensions.hasElements(deliveryOptions) ? pickupModes : pickUpDeliveryOptionButton) : false}\n \n );\n};\n\n/**\n * Render the selected store.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderSelectedStore: React.FC = props => {\n const {\n storeDetailsMain,\n storeHeader,\n storeName,\n storeDetailsCloseButton,\n storeDistance,\n storeDetailsAvailabilityContainer,\n productAvailability,\n stockStatus,\n isCurrentLocation,\n currentLocation,\n isPreferredStore,\n preferredStoreButton,\n removePreferredStoreButton\n } = props;\n\n return (\n \n \n {storeDetailsCloseButton}\n {storeName}\n {storeDistance}\n \n \n {productAvailability}\n {stockStatus}\n \n {isCurrentLocation ? currentLocation : renderDeliveryOptions(props)}\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n \n );\n};\n\n/**\n * Render the body of the popup.\n * @param props -- Store selector view props.\n * @returns -- Returns the html.\n */\nconst renderBody: React.FC = props => {\n const {\n BodyContainerProps,\n locationsMessage,\n search,\n state,\n spinner,\n locationsList,\n noLocationsMessage,\n maps,\n bodyWrapperProps,\n storeResultContainerProps,\n mapContainerProps,\n isMobileView,\n storeDetailsModal,\n selectedLocation\n } = props;\n\n if (isMobileView) {\n return (\n \n {locationsMessage}\n {search}\n \n \n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n {maps}\n {selectedLocation && renderSelectedStore(selectedLocation)}\n \n \n \n );\n }\n\n return (\n \n \n \n {locationsMessage}\n {search}\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n \n {maps}\n \n \n );\n};\n\n/**\n * Store selector view props.\n * @param props - Store selector view props.\n * @returns - HTML.\n */\nconst StoreSelectorView: React.FC = props => {\n const {\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n\n terms\n } = props;\n\n return (\n \n {HeaderProps}\n {renderBody(props)}\n {terms}\n \n );\n};\n\nexport default StoreSelectorView;\n","/*!\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 { AttributeValue } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { Drawer, IModuleProps, INodeProps, Module } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { AttributesForSelectedVariantInput, getAttributesForSelectedVariant } from '../..';\nimport { ProductSpecificationTableRow } from './components/product-specification-table-stucture';\nimport { IProductSpecificationData } from './product-specification.data';\nimport { displayStyle, IProductSpecificationProps } from './product-specification.props.autogenerated';\n\n/**\n * Maintain Drawer State.\n */\nexport interface IProductSpecificationState {\n isDrawerOpen: boolean;\n drawerListId: number | undefined;\n}\n\n/**\n * Product specification view props.\n */\nexport interface IProductSpecificationViewProps extends IProductSpecificationProps<{}> {\n ProductSpecification: IModuleProps;\n ProductSpecificationTableProps: INodeProps;\n ProductSpecificationTableBodyProps: INodeProps;\n productSpecificationResult?: (JSX.Element | null)[];\n title?: React.ReactNode;\n isAccrodion?: boolean;\n handleText?(event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * Check for display style either accordion or table.\n */\nexport interface IProductSpecificationExtentedProps extends IProductSpecificationProps {\n displayStyle?: displayStyle;\n}\n\n/**\n *\n * ProductSpecification component.\n * @extends {React.Component>}\n */\n@observer\nclass ProductSpecification extends React.Component {\n public constructor(props: IProductSpecificationExtentedProps) {\n super(props);\n this.state = {\n isDrawerOpen: false,\n drawerListId: undefined\n };\n }\n\n public async componentDidMount(): Promise {\n const { context, data, telemetry } = this.props;\n const catalogId = Msdyn365.getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n reaction(\n () => (data.product.result ? data.product.result.RecordId : null),\n () => {\n if (context && data.product.result) {\n const actionInput = new AttributesForSelectedVariantInput(\n data.product.result.RecordId,\n\n +context.actionContext.requestContext.apiSettings.channelId,\n data.product.result,\n catalogId\n );\n\n getAttributesForSelectedVariant(actionInput, this.props.context.actionContext).catch((error: Error) => {\n telemetry.error(error.message);\n telemetry.debug('Unable to update attributes for Product');\n telemetry.error(error.message);\n });\n }\n }\n );\n }\n\n public shouldComponentUpdate(nextProps: IProductSpecificationExtentedProps, nextState: IProductSpecificationState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n let data: IProductSpecificationData;\n try {\n data = this.props.data;\n } catch (error) {\n this.props.telemetry.error(`Something went wrong ------${error}`);\n return
{error}
;\n }\n\n if (!data.productSpecificationData.result || data.productSpecificationData.result.length <= 0) {\n this.props.telemetry.error('Product specification content is empty, module wont render.');\n return null;\n }\n\n const { heading, className } = this.props.config;\n const { productSpecificationData } = this.props.data;\n const isAccrodion = this.props.config.displayStyle === displayStyle.accordion;\n const viewProps = {\n ...this.props,\n handleText: this.handleHeadingChange,\n ProductSpecification: {\n moduleProps: this.props,\n className: classnames('ms-product-specification', className)\n },\n ProductSpecificationTableProps: isAccrodion\n ? {\n moduleProps: this.props,\n className: classnames('ms-product-specification__accordion', className)\n }\n : {\n className: classnames('ms-product-specification__table table-striped table-bordered'),\n tag: 'table'\n },\n isAccrodion,\n ProductSpecificationTableBodyProps: isAccrodion\n ? {}\n : {\n className: '',\n tag: 'tbody'\n },\n title: heading?.text && (\n \n ),\n\n productSpecificationResult: isAccrodion\n ? productSpecificationData && this._createDrawerBody(data)\n : productSpecificationData && this._createTableBody(data)\n } as IProductSpecificationViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle Heading Text Change.\n * @param event - Current event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n private _createTableBody(content: IProductSpecificationData): (JSX.Element | null)[] {\n return content.productSpecificationData.result!.map((product, index) => {\n const cellData: JSX.Element | null = this._renderProductCell(product);\n\n if (!cellData) {\n return null;\n }\n\n return (\n \n );\n });\n }\n\n private _createDrawerBody(content: IProductSpecificationData): (JSX.Element | null)[] {\n const accordionItemContainer: IModuleProps = {\n moduleProps: this.props,\n className: 'ms-product-specification-title'\n };\n return content.productSpecificationData.result!.map(product => {\n const cellData: JSX.Element | null = this._renderProductCell(product);\n if (!cellData) {\n return null;\n }\n return (\n \n \n
{cellData}
\n \n
\n );\n });\n }\n\n private readonly _toggle = (drawerListId: number | undefined) => (): void => {\n if (this.state.drawerListId !== drawerListId) {\n this.setState({ drawerListId, isDrawerOpen: true });\n } else {\n this.setState({ drawerListId: undefined, isDrawerOpen: false });\n }\n };\n\n private _renderProductCell(product: AttributeValue): JSX.Element | null {\n switch (product.DataTypeValue) {\n case 0: // None\n // Return span here instead of null so the row still shows\n return ;\n case 1: // Currency\n return this._renderCurrencyCell(product);\n case 2: // DateTime\n return this._renderDateTimeCell(product);\n case 3: // Decimal\n return this._renderDecimalCell(product);\n case 4: // Integer\n return this._renderIntegerCell(product);\n case 5: // Text\n return this._renderTextCell(product);\n case 6: // TrueFalse\n return this._renderTrueFalseCell(product);\n case 40: // Video\n this.props.telemetry.warning('Got video specification type, not supported yet so skipping line');\n return null;\n case 41: // Image\n this.props.telemetry.warning('Got image specification type, not supported yet so skipping line');\n return null;\n default:\n this.props.telemetry.warning(`Got unknown specification type ${product.DataTypeValue} so skipping line`);\n return null;\n }\n }\n\n private _renderCurrencyCell(product: AttributeValue): JSX.Element | null {\n if (product.CurrencyValue !== null && product.CurrencyValue !== undefined) {\n return (\n \n {product.CurrencyCode}\n {product.CurrencyValue}\n \n );\n }\n\n return null;\n }\n\n private _renderDateTimeCell(product: AttributeValue): JSX.Element | null {\n if (product.DateTimeOffsetValue?.toUTCString) {\n return {product.DateTimeOffsetValue.toUTCString()};\n }\n\n return null;\n }\n\n private _renderIntegerCell(product: AttributeValue): JSX.Element | null {\n if (product.IntegerValue !== null && product.IntegerValue !== undefined) {\n return {product.IntegerValue};\n }\n\n return null;\n }\n\n private _renderDecimalCell(product: AttributeValue): JSX.Element | null {\n if (product.FloatValue !== null && product.FloatValue !== undefined) {\n return {product.FloatValue};\n }\n\n return null;\n }\n\n private _renderTextCell(product: AttributeValue): JSX.Element | null {\n if (product.TextValue !== null && product.TextValue !== undefined) {\n // eslint-disable-next-line react/no-danger\n return ;\n }\n\n return null;\n }\n\n private _renderTrueFalseCell(product: AttributeValue): JSX.Element | null {\n // TODO 20369885 setting to default value is needed to work around a platform bug where\n // config string value does not get its default value.\n if (product.BooleanValue) {\n return {this.props.resources.trueValueText ? this.props.resources.trueValueText : 'Yes'};\n }\n return {this.props.resources.falseValueText ? this.props.resources.falseValueText : 'No'};\n }\n}\n\nexport default ProductSpecification;\n","import { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nexport type selectListItem = {\r\n label: string;\r\n id: string;\r\n};\r\n\r\ninterface ISelectInputGroupProps {\r\n id: string;\r\n label?: string;\r\n selectList: selectListItem[];\r\n initialSelect?: selectListItem;\r\n htmlProps?: React.DetailedHTMLProps, HTMLSelectElement>;\r\n isValid(selection: selectListItem, id: string): string | void;\r\n onChange(selection: selectListItem, currentValidity: boolean, id: string): void;\r\n}\r\n\r\n/**\r\n * TextInputGroup is a wrapper that allows you to validate text values from the\r\n * user and returns the correct value after\r\n */\r\n@observer\r\nexport class SelectInputGroup extends React.Component {\r\n\r\n @observable private _internalValue: selectListItem;\r\n @observable private _errorMessage: string = '';\r\n @observable private _isFirstBlur: boolean = true;\r\n\r\n constructor(props: ISelectInputGroupProps) {\r\n super(props);\r\n\r\n if (props.initialSelect) {\r\n this._internalValue = props.initialSelect;\r\n } else {\r\n this._internalValue = props.selectList.find(select => !!select)!;\r\n }\r\n\r\n this._valueChanged = this._valueChanged.bind(this);\r\n this._blurred = this._blurred.bind(this);\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n
\r\n \r\n \r\n {\r\n this.props.selectList\r\n .map(\r\n (select, key) =>\r\n \r\n {select.label}\r\n )\r\n }\r\n \r\n {this._jsxErrorMessage}\r\n
\r\n );\r\n }\r\n\r\n private _blurred(event: React.ChangeEvent): void {\r\n this._isFirstBlur = false;\r\n this._valueChanged(event);\r\n }\r\n\r\n private _valueChanged(event: React.ChangeEvent): void {\r\n const id = event.target.value;\r\n this._internalValue = this.props.selectList.find(select => select.id === id)!;\r\n const currentlyInvalid = this.props.isValid(this._internalValue, this.props.id);\r\n const isValid = (currentlyInvalid) ? false : true;\r\n\r\n // we only want to show an error if a user has clicked away and its\r\n // still wrong\r\n if (currentlyInvalid && !this._isFirstBlur) {\r\n this._errorMessage = currentlyInvalid;\r\n } else {\r\n this._errorMessage = '';\r\n }\r\n\r\n this.props.onChange(this._internalValue, isValid, this.props.id);\r\n }\r\n\r\n private get _jsxErrorMessage(): JSX.Element | void {\r\n if (this._errorMessage.length > 0) {\r\n return (\r\n

\r\n {this._errorMessage}\r\n

\r\n );\r\n }\r\n }\r\n}","import { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\ninterface ITextInputGroupProps {\r\n useDatePicker?: boolean;\r\n minDate?: string;\r\n label?: string;\r\n placeholder?: string;\r\n id: string;\r\n initialValue?: string;\r\n htmlProps?: React.DetailedHTMLProps, HTMLInputElement>;\r\n isValid(curValue: string, id: string): string | void;\r\n onChange(value: string, currentValidity: boolean, id: string): void;\r\n}\r\n\r\n/**\r\n * TextInputGroup is a wrapper that allows you to validate text values from the\r\n * user and returns the correct value after\r\n */\r\n@observer\r\nexport class TextInputGroup extends React.Component {\r\n\r\n @observable private _internalValue: string = '';\r\n @observable private _errorMessage: string = '';\r\n @observable private _isFirstBlur: boolean = true;\r\n\r\n constructor(props: ITextInputGroupProps) {\r\n super(props);\r\n\r\n if (props.initialValue) {\r\n this._internalValue = props.initialValue;\r\n const currentlyInvalid = this.props.isValid(this._internalValue, this.props.id);\r\n const isValid = (currentlyInvalid) ? false : true;\r\n this.props.onChange(this._internalValue, isValid, this.props.id);\r\n }\r\n\r\n this._valueChanged = this._valueChanged.bind(this);\r\n this._blurred = this._blurred.bind(this);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const typeSettings = this.props.useDatePicker ?\r\n {\r\n type: 'date',\r\n min: this.props.minDate\r\n } :\r\n { type: 'text' };\r\n\r\n return (\r\n
\r\n \r\n \r\n
{this._jsxErrorMessage}
\r\n
\r\n );\r\n }\r\n\r\n private _blurred(event: React.ChangeEvent): void {\r\n this._isFirstBlur = false;\r\n this._valueChanged(event);\r\n }\r\n\r\n private _valueChanged(event: React.ChangeEvent): void {\r\n this._internalValue = event.target.value;\r\n const currentlyInvalid = this.props.isValid(this._internalValue, this.props.id);\r\n const isValid = (currentlyInvalid) ? false : true;\r\n\r\n // we only want to show an error if a user has clicked away and its\r\n // still wrong\r\n if (currentlyInvalid && !this._isFirstBlur) {\r\n this._errorMessage = currentlyInvalid;\r\n } else {\r\n this._errorMessage = '';\r\n }\r\n\r\n this.props.onChange(this._internalValue, isValid, this.props.id);\r\n }\r\n\r\n private get _jsxErrorMessage(): JSX.Element | void {\r\n if (this._errorMessage.length > 0) {\r\n return (\r\n

\r\n {this._errorMessage}\r\n

\r\n );\r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport { SelectInputGroup, selectListItem } from './select-input-group';\r\nimport { TextInputGroup } from './text-input-group';\r\n\r\nexport type inputGroup = {\r\n labelText?: string;\r\n validationText?: string;\r\n};\r\n\r\ninterface IMailingListInputGroup {\r\n form: formInputGroupStructure;\r\n submitText?: string;\r\n onFinish(dataSet: unknown): void;\r\n onFieldValidityCheck?(value: string, id: string): boolean;\r\n}\r\n\r\ntype formInputGroupItem = {\r\n validity: boolean;\r\n value: string;\r\n useDatePicker?: boolean;\r\n minDate?: string;\r\n selectList?: selectListItem[];\r\n externalGroup: inputGroup;\r\n htmlProps?: unknown;\r\n regex?: RegExp;\r\n customRender?(jsx: React.ReactNode): JSX.Element;\r\n};\r\n\r\nexport type formInputGroupStructure = {\r\n [fieldName: string]: formInputGroupItem;\r\n};\r\n\r\n/**\r\n * Constructs only the necessary components of the mailing list inputs\r\n *\r\n * To add a new field, add it to the internal form structure object and\r\n * the external props typing\r\n */\r\nexport class FormInputGroupBuilder extends React.Component {\r\n\r\n private _formStructure: formInputGroupStructure = {};\r\n\r\n constructor(props: IMailingListInputGroup) {\r\n super(props);\r\n\r\n this._formStructure = props.form;\r\n this._handleFormExport = this._handleFormExport.bind(this);\r\n\r\n this._handleValidityUpdate = this._handleValidityUpdate.bind(this);\r\n this._handleValueFinish = this._handleValueFinish.bind(this);\r\n\r\n this._handleSelectionUpdate = this._handleSelectionUpdate.bind(this);\r\n this._handleSelectionValidity = this._handleSelectionValidity.bind(this);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { submitText } = this.props;\r\n return (\r\n \r\n {Object.keys(this._formStructure).map(fieldName => {\r\n const field = this._formStructure[fieldName];\r\n if (field.customRender) {\r\n return field.customRender(this._renderField(fieldName, field));\r\n } else {\r\n return this._renderField(fieldName, field);\r\n }\r\n })}\r\n \r\n {submitText || 'SUBMIT'}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderField(fieldName: string, field: formInputGroupItem): JSX.Element {\r\n if (field.selectList && field.selectList.length > 0) {\r\n const defaultValue = field.selectList.find(item => item.id === field.value);\r\n return (\r\n , HTMLSelectElement> || {}}\r\n />\r\n );\r\n } else {\r\n return (\r\n , HTMLInputElement> || {}}\r\n />\r\n );\r\n }\r\n }\r\n\r\n private _handleFormExport(): void {\r\n const formData = {};\r\n Object.keys(this._formStructure).forEach(input => {\r\n formData[input] = this._formStructure[input].value;\r\n });\r\n this.props.onFinish(formData);\r\n }\r\n\r\n private _isFormValid(): boolean {\r\n const containsInvalidField = !!Object.keys(this._formStructure)\r\n .find((fieldName) => {\r\n const field = this._formStructure[fieldName];\r\n return !field.validity;\r\n });\r\n return !containsInvalidField;\r\n }\r\n\r\n private _handleSelectionUpdate(value: selectListItem, isValid: boolean, id: string): void {\r\n const fieldData = this._formStructure[id];\r\n fieldData.validity = isValid;\r\n fieldData.value = value.id;\r\n\r\n this.setState({});\r\n }\r\n\r\n private _handleSelectionValidity(value: selectListItem, id: string): void {\r\n // no validation necessary\r\n return;\r\n }\r\n\r\n private _handleValueFinish(value: string, isValid: boolean, id: string): void {\r\n const fieldData = this._formStructure[id];\r\n fieldData.validity = isValid;\r\n fieldData.value = value;\r\n\r\n // re-render, no reason to use mobx for this\r\n this.setState({});\r\n }\r\n\r\n private _handleValidityUpdate(value: string, id: string): string | void {\r\n const fieldData = this._formStructure[id];\r\n\r\n // should always be true but just in case\r\n if (fieldData) {\r\n const validationText = fieldData.externalGroup.validationText;\r\n if (this.props.onFieldValidityCheck) {\r\n const passedCheck = this.props.onFieldValidityCheck(value, id);\r\n if (!passedCheck) { return validationText; }\r\n }\r\n if (value.length === 0) { return validationText; }\r\n if (fieldData.regex && !fieldData.regex.test(value)) { return validationText; }\r\n }\r\n }\r\n}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\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\nimport { IContentBlockViewProps } from './smwe-content-block';\r\n\r\nconst ContentBlockView: React.FC = (props) => {\r\n const {\r\n config,\r\n contentBlockContainer,\r\n imageContainer,\r\n detailsContainer,\r\n title,\r\n text,\r\n links,\r\n image,\r\n contentBlockAnchorTag,\r\n imageLink,\r\n imageAriaLabel\r\n } = props;\r\n\r\n if (imageLink) {\r\n return (\r\n \r\n \r\n {image}\r\n \r\n \r\n {title}\r\n {text}\r\n {links}\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {image}\r\n \r\n {title}\r\n {text}\r\n {links}\r\n \r\n \r\n );\r\n }\r\n};\r\n\r\nexport default ContentBlockView;\r\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 { IAccordionItemViewProps } from './accordion-item';\n\nconst AccordionItemView: React.FC = props => {\n const { drawer, accordionSlots, AccordionItemContainer, AccordionItemContent } = props;\n return (\n \n \n \n {accordionSlots &&\n accordionSlots.accordionItemContent &&\n accordionSlots.accordionItemContent.length &&\n _renderAccordionItemContent(accordionSlots.accordionItemContent)}\n \n \n \n );\n};\n\nconst _renderAccordionItemContent = (items: React.ReactNode[]): JSX.Element | null => {\n return (\n <>\n {items && items.length > 0\n ? items.map((item: React.ReactNode, index: number) => {\n return {item};\n })\n : null}\n \n );\n};\nexport default AccordionItemView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Interface Pickup option list.\n */\nexport interface IPickUpOptionListProps {\n pickupListOptionMenuText: string;\n pickupmodeList?: DeliveryOption[];\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Interface pickup option list state.\n */\nexport interface IPickOptionListState {\n expandSiteOptions: boolean;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class PickUpOptionList extends React.PureComponent {\n private readonly _pickupListOptionMenu: React.RefObject;\n\n private readonly _pickupListOptionButton: React.RefObject;\n\n private readonly eventsToBeBind = ['click', 'touchstart'];\n\n public constructor(props: IPickUpOptionListProps) {\n super(props);\n this._renderDeliveryOptions = this._renderDeliveryOptions.bind(this);\n this._pickupListOptionMenu = React.createRef();\n this._pickupListOptionButton = React.createRef();\n this.state = {\n expandSiteOptions: false\n };\n }\n\n public componentDidMount(): void {\n for (const event of this.eventsToBeBind) {\n window.addEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public componentWillUnmount(): void {\n for (const event of this.eventsToBeBind) {\n window.removeEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public render(): JSX.Element {\n const { pickupListOptionMenuText, pickupmodeList } = this.props;\n\n return (\n
\n \n {pickupListOptionMenuText}\n \n \n {this.state.expandSiteOptions ? (\n
    \n {pickupmodeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Handle the document click.\n * @param event -- Event object.\n */\n private readonly handleDocumentClick = (event: Event): void => {\n const htmlElement = event.target as HTMLElement;\n if (\n !(\n (this._pickupListOptionButton.current !== null &&\n (event.target === this._pickupListOptionButton.current ||\n this._pickupListOptionButton.current.contains(htmlElement))) ||\n (this._pickupListOptionMenu.current !== null &&\n (event.target === this._pickupListOptionMenu.current || this._pickupListOptionMenu.current.contains(htmlElement)))\n )\n ) {\n this.setState({\n expandSiteOptions: false\n });\n }\n };\n\n private _renderDeliveryOptions(event: React.MouseEvent): void {\n event.stopPropagation();\n const isExpandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !isExpandSiteOptionsState\n });\n }\n\n /**\n * Select Delivery option.\n * @param event -- Event Object.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode && deliveryCode.length > 0) {\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Store Pickup option list interface.\n */\nexport interface IStorePickUpOptionListProps {\n productPickupListOptionMenuText?: string;\n productPickupModeList?: DeliveryOption[];\n defaultOptionText?: string;\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Store Pickup option state interface.\n */\nexport interface IStorePickOptionListState {\n isFilterExpanded: boolean;\n selectedPickupMode?: string;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class StorePickUpOptionList extends React.PureComponent {\n private readonly _storePickupListOptionMenu: React.RefObject;\n\n public constructor(props: IStorePickUpOptionListProps) {\n super(props);\n this._storePickupListOptionMenu = React.createRef();\n this.state = {\n isFilterExpanded: false,\n selectedPickupMode: ''\n };\n }\n\n public render(): JSX.Element {\n const { productPickupListOptionMenuText, productPickupModeList, defaultOptionText } = this.props;\n const selectedPickupModeDesc = defaultOptionText\n ? defaultOptionText\n : productPickupModeList?.find((delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\n const role = 'menu';\n return (\n
\n \n {this.state.isFilterExpanded ? (\n
    \n {productPickupModeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Method to call when drop dwon get selected.\n */\n private readonly _rendeDeliveryOptions = () => {\n const isExpandOptionsState = this.state.isFilterExpanded;\n this.setState({\n isFilterExpanded: !isExpandOptionsState\n });\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onKeyDown = async (event: React.KeyboardEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\n\nimport { IStoreSelectorLocationLineItemResources } from '.';\n\nexport interface IHoursDisplayInfo {\n startDayShort: string;\n startDayFull: string;\n endDayShort?: string;\n endDayFull?: string;\n timeRange: string;\n}\n\ninterface IHoursInfo {\n isClosed: boolean;\n openTime?: number;\n closeTime?: number;\n}\n\ntype DayType = 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN';\n\nexport const secondsToTime = (seconds: number | undefined): string | undefined => {\n if (seconds === undefined) {\n return undefined;\n }\n let hours = Math.floor(seconds / (60 * 60));\n const ampm = hours >= 12 ? 'pm' : 'am';\n hours %= 12;\n hours = hours ? hours : 12;\n const divisorForMinutes = seconds % (60 * 60);\n const minutes = Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\n return `${hours}:${minutes} ${ampm}`;\n};\n\nconst getShortTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.monday;\n case 'TUE':\n return resources.days.tuesday;\n case 'WED':\n return resources.days.wednesday;\n case 'THU':\n return resources.days.thursday;\n case 'FRI':\n return resources.days.friday;\n case 'SAT':\n return resources.days.saturday;\n default:\n // Case 'SUN':\n return resources.days.sunday;\n }\n};\n\nconst getFullTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.mondayFull;\n case 'TUE':\n return resources.days.tuesdayFull;\n case 'WED':\n return resources.days.wednesdayFull;\n case 'THU':\n return resources.days.thursdayFull;\n case 'FRI':\n return resources.days.fridayFull;\n case 'SAT':\n return resources.days.saturdayFull;\n default:\n // Case 'SUN':\n return resources.days.sundayFull;\n }\n};\n\nconst buildHoursDisplayInfo = (\n startDay: DayType,\n endDay: DayType,\n hoursInfo: string,\n resources: IStoreSelectorLocationLineItemResources\n): IHoursDisplayInfo => {\n return {\n startDayShort: getShortTimeString(startDay, resources),\n startDayFull: getFullTimeString(startDay, resources),\n endDayShort: startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,\n endDayFull: startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,\n timeRange: hoursInfo\n };\n};\n\nconst shouldMergeLines = (firstLine: IHoursInfo, secondLine: IHoursInfo): boolean => {\n if (firstLine.isClosed && secondLine.isClosed) {\n return true;\n }\n\n if (!firstLine.isClosed && !secondLine.isClosed) {\n return firstLine.openTime === secondLine.openTime && firstLine.closeTime === secondLine.closeTime;\n }\n\n return false;\n};\n\nconst getStoreHoursData = (storeHours: RegularStoreHours, dateForLookup: string): IHoursInfo => {\n return {\n isClosed: get(storeHours, `IsClosedOn${dateForLookup}`, false),\n openTime: get(storeHours, `${dateForLookup}OpenTime`, undefined),\n closeTime: get(storeHours, `${dateForLookup}CloseTime`, undefined)\n };\n};\n\nconst buildStoreHoursString = (hoursInfo: IHoursInfo, resources: IStoreSelectorLocationLineItemResources): string => {\n if (hoursInfo.isClosed) {\n return resources.closedText;\n }\n const openFrom: string | undefined = secondsToTime(hoursInfo.openTime);\n const openTo: string | undefined = secondsToTime(hoursInfo.closeTime);\n\n return `${openFrom}–${openTo}`;\n};\n\nexport const buildStoreHours = (storeHours: RegularStoreHours, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo[] => {\n const storeHoursList: IHoursDisplayInfo[] = [];\n\n const mondayHours = getStoreHoursData(storeHours, 'Monday');\n const tuesdayHours = getStoreHoursData(storeHours, 'Tuesday');\n const wednesdayHours = getStoreHoursData(storeHours, 'Wednesday');\n const thursdayHours = getStoreHoursData(storeHours, 'Thursday');\n const fridayHours = getStoreHoursData(storeHours, 'Friday');\n const saturdayHours = getStoreHoursData(storeHours, 'Saturday');\n const sundayHours = getStoreHoursData(storeHours, 'Sunday');\n\n let periodStart: DayType = 'MON';\n let periodEnd: DayType = 'MON';\n\n if (!shouldMergeLines(mondayHours, tuesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(mondayHours, resources), resources));\n\n periodStart = 'TUE';\n }\n periodEnd = 'TUE';\n\n if (!shouldMergeLines(tuesdayHours, wednesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(tuesdayHours, resources), resources));\n\n periodStart = 'WED';\n }\n periodEnd = 'WED';\n\n if (!shouldMergeLines(wednesdayHours, thursdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(wednesdayHours, resources), resources));\n\n periodStart = 'THU';\n }\n periodEnd = 'THU';\n\n if (!shouldMergeLines(thursdayHours, fridayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(thursdayHours, resources), resources));\n\n periodStart = 'FRI';\n }\n periodEnd = 'FRI';\n\n if (!shouldMergeLines(fridayHours, saturdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(fridayHours, resources), resources));\n\n periodStart = 'SAT';\n }\n periodEnd = 'SAT';\n\n if (!shouldMergeLines(saturdayHours, sundayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(saturdayHours, resources), resources));\n\n periodStart = 'SUN';\n }\n periodEnd = 'SUN';\n\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(sundayHours, resources), resources));\n\n return storeHoursList;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\n\n/**\n * Store Locator line item resources.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n\n closedText: string;\n\n outOfStock: string;\n inStock: string;\n\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n pickupDeliveryOptionErrorMessage?: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * Store Locator line item props.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n };\n}\n\n/**\n * Store Locator line item action component.\n */\nconst storeSelectorLocationLineItemComponentActions = {\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\n props.handlers.onSelected(props.location, deliveryMode);\n },\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\n },\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onRemovePreferredStore();\n }\n};\n\n/**\n * Function to render store hours.\n * @param storeHours - Store Hours object.\n * @param location - Store Unit.\n * @param resources - Resources.\n * @returns - Jsx element.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n location: OrgUnitLocation,\n resources: IStoreSelectorLocationLineItemResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day houts\n if (storeHours?.RegularStoreHours) {\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\n\n return (\n
\n {storeHoursList.map(displayTime => (\n
\n {displayTime.endDayShort ? (\n
\n {displayTime.startDayShort}–\n {displayTime.endDayShort}\n
\n ) : (\n
\n {displayTime.startDayShort}\n
\n )}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string | undefined = secondsToTime(location.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\n\n return (\n
\n {storeOpenFrom}-{storeOpenTo}\n
\n );\n};\n\n/**\n * Function to return distance measure unit.\n * @param distance - Store location within radius.\n * @param preferredDistanceUnit - Unit configuration.\n * @param isLocationDisabled - Flag to check user location.\n * @returns - Unit of distance.\n */\nexport const buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n isLocationDisabled?: boolean\n): string | undefined => {\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < 1) {\n return `(<1 ${preferredDistanceUnit})`;\n }\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\n};\n\n/**\n * Function to store contact.\n * @param contacts - Store location within radius.\n * @returns - Return primary contact number of store.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\n return Promise.resolve();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: IStoreSelectorLocationLineItemProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns DeliveryOptionList.\n */\nexport const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n const deliveryOption: DeliveryOption[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n });\n\n return deliveryOption;\n};\n\n/**\n * Renders store location line items.\n * @param props - Store location line items props.\n * @returns - HTML.\n */\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\n const {\n hideStockStatus,\n isCurrentLocation,\n isInStock,\n location,\n resources,\n storeHours,\n stockStatusLabel,\n storeLocatorView,\n index,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n shouldShowIndex\n } = props;\n\n const storeName: string | undefined = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = hideStockStatus || isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [isError, setError] = React.useState(false);\n\n const pickUpButtonClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n if (deliveryOptionList.length === 0) {\n setError(true);\n } else {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\n }\n };\n\n /* eslint-disable prettier/prettier */\n return (\n
\n
\n {(shouldShowIndex || storeLocatorView) && {index}}\n {storeName}\n {distanceAsString ? \n {' '}\n {distanceAsString}\n : false}\n
\n
\n
\n

{resources.contactInfoHeader}

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

{resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

\n {stockText &&

{stockText}

}\n {isCurrentLocation ? (\n

{resources.currentLocation}

\n ) : canSelectLocation ? (\n deliveryOptionList.length === 0 ? (\n \n {pickupInStoreButtonText}\n \n ) : (\n renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel)\n )\n ) : (\n false\n )}\n
\n )}\n {isPreferredStoreEnabled ? (\n isPreferredStore ? (\n \n {resources.preferredStoreText}\n \n ) : (\n \n {resources.setAsPreferredStoreText}\n \n )\n ) : null}\n
\n {isError ? (\n \n \n ) : ('')}\n
\n );\n};\n\n/**\n * Store location line item component.\n */\nexport const StoreSelectorLocationLineItemComponent = storeSelectorLocationLineItem as (\n props: IStoreSelectorLocationLineItemProps\n) => JSX.Element;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 { DeliveryOption, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildDistanceString, matchDeliveryOptions } from '../store-selector-location-line-item';\n\n/**\n * Store Locator line item resources.\n */\nexport interface ISelectedStoreResources {\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreProps {\n className?: string;\n shouldHideStockStatus?: boolean;\n isCurrentLocation?: boolean;\n isInStock?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n resources: ISelectedStoreResources;\n stockStatusLabel?: string;\n preferredStoreLocationId: string | null;\n isPreferredStoreEnabled?: boolean;\n isLocationDisabled?: boolean;\n telemetryContent?: ITelemetryContent;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n preferredDistanceUnit: string;\n filteredPickupMode?: string;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreViewProps {\n isCurrentLocation?: boolean;\n canSelectLocation?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n deliveryOptions?: DeliveryOption[];\n isPreferredStore?: boolean;\n resources: ISelectedStoreResources;\n\n storeDetailsMain: INodeProps;\n storeHeader: INodeProps;\n storeName: React.ReactNode;\n storeDistance: React.ReactNode;\n storeDetailsAvailabilityContainer: INodeProps;\n productAvailability: React.ReactNode;\n stockStatus: React.ReactNode;\n currentLocation: React.ReactNode;\n pickUpDeliveryOptionButton: React.ReactNode;\n pickupModes?: React.ReactNode;\n preferredStoreButton?: React.ReactNode;\n removePreferredStoreButton?: React.ReactNode;\n storeDetailsCloseButton?: React.ReactNode;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupInStoreClickHandler = (props: ISelectedStoreProps) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation);\n }\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onSetAsPreferredStore(props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: ISelectedStoreProps) => async (deliveryCode: string): Promise => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, deliveryCode);\n }\n return Promise.resolve();\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onRemovePreferredStore();\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: ISelectedStoreProps, pickupMode?: string) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, pickupMode);\n }\n};\n\n/**\n * On store details close functionality.\n * @param props -Store locator location items.\n * @returns Void promise.\n */\nconst storeDetailsModalHandler = (props: ISelectedStoreProps) => async (): Promise => {\n await props.handlers.closeStoreDetailsModal();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: ISelectedStoreProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Renders selected store details.\n * @param props - Store location details props.\n * @returns - Selected Store view props.\n */\nconst selectedStoreDetails = (props: ISelectedStoreProps): ISelectedStoreViewProps => {\n const {\n className,\n shouldHideStockStatus,\n isCurrentLocation,\n isInStock,\n selectedStore,\n resources,\n stockStatusLabel,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n preferredDistanceUnit\n } = props;\n\n const parentClassName = className ? className : 'ms-store-select__map__selected_store';\n const storeName: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\n const location = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const distanceAsString: string | undefined = buildDistanceString(location?.Distance, preferredDistanceUnit, isLocationDisabled);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n // eslint-disable-next-line no-nested-ternary -- Required to check stock Label\n const stockText: string | undefined = shouldHideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = !shouldHideStockStatus && isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\n const isPreferredStore = preferredStoreLocationId === location?.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n\n const viewProps: ISelectedStoreViewProps = {\n selectedStore,\n isCurrentLocation,\n canSelectLocation,\n isPreferredStore,\n resources,\n deliveryOptions: deliveryOptionList,\n storeDetailsMain: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__main`\n },\n storeHeader: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__header`\n },\n storeName: {storeName},\n storeDetailsCloseButton: \n ),\n pickupModes: renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel),\n preferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.preferredStoreText}\n \n ) : null,\n removePreferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.setAsPreferredStoreText}\n \n ) : null,\n handlers: {\n onSelected: props.handlers.onSelected,\n onSetAsPreferredStore: props.handlers.onSetAsPreferredStore,\n onRemovePreferredStore: props.handlers.onRemovePreferredStore,\n closeStoreDetailsModal: props.handlers.closeStoreDetailsModal\n }\n };\n\n return viewProps;\n};\n\n/**\n * Store location line item component.\n */\nexport const SelectedStoreComponent = selectedStoreDetails as (props: ISelectedStoreProps) => ISelectedStoreViewProps;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/// \n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreInfo, IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n getOrgUnitLocationsByArea,\n GetOrgUnitLocationsByAreaInput,\n IFullOrgUnitAvailability\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n NodeTag,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n StoreSelectorEmptyMessage,\n StoreSelectorFoundLocationsMessage,\n StoreSelectorLocationLines,\n StoreSelectorSearchForm,\n StoreSelectorTermsOfService,\n StoreSelectorWaiting\n} from './components';\nimport { ISelectedStoreProps, ISelectedStoreViewProps, SelectedStoreComponent } from './components/selected-store/selected-store';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './components/store-selector-location-line-item/date-time-helpers';\nimport { IStoreSelectorData } from './store-selector.data';\nimport {\n IStoreSelectorProps,\n IStoreSelectorResources,\n mode as modeEnum,\n searchRadiusUnit as SearchRadiusUnit,\n style as styleEnum\n} from './store-selector.props.autogenerated';\n\n/**\n * StoreSelector State Interface.\n */\nexport interface IStoreSelectorState {\n isSearchInProgress: boolean;\n searchTerm?: string;\n isSeeAllStoreValue: boolean;\n isLocationDisabled?: boolean;\n filteredPickupMode?: string;\n}\n\n/**\n * StoreSelector View Props Interface.\n */\nexport interface IStoreSelectorViewProps extends IStoreSelectorProps {\n state: IStoreSelectorState;\n\n // Containers:\n ModuleProps: IModuleProps;\n BodyContainerProps: INodeProps;\n FooterContainerProps: INodeProps;\n HeaderContainerProps: INodeProps;\n HeaderProps?: React.ReactNode;\n\n // Components\n locationsMessage?: React.ReactNode;\n search?: React.ReactNode;\n spinner?: React.ReactNode;\n locationsList?: React.ReactNode;\n selectedLocation?: ISelectedStoreViewProps;\n noLocationsMessage?: React.ReactNode;\n terms?: React.ReactNode;\n headerText?: React.ReactNode;\n sortLocations?: IFullOrgUnitAvailability[];\n locationListProps?: IStoreSelectorLocationLineItemProps[];\n bodyWrapperProps?: INodeProps;\n storeResultContainerProps?: INodeProps;\n mapContainerProps?: INodeProps;\n maps?: React.ReactNode;\n isMobileView?: boolean;\n storeDetailsModal?: INodeProps;\n\n callbacks: {\n closeDialog(): Promise;\n searchTermChanged(searchTerm: string): Promise;\n performSearch(searchTerm: string): Promise;\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\n getAndUpdateUserLocation(): Promise;\n attachMapAutoSuggest(): Promise;\n onSuggestionSelected(result: Microsoft.Maps.ISuggestionResult): Promise;\n setPreferredStore(storeId: string | undefined): Promise;\n removePreferredStore(): Promise;\n setSelectedStore(storeId: string | undefined): Promise;\n setOrgUnitStoreInformation(location: OrgUnitLocation | undefined): Promise;\n };\n}\n\n/**\n * StoreSelectorLocation Line Resources Interface.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * ILocationHours Interface.\n */\nexport interface ILocationHours {\n openFrom?: string;\n openTo?: string;\n}\n\n/**\n * StoreSelectorLocation Line Item Props Interface.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n storeHoursList?: IHoursDisplayInfo[];\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n selectedStoreLocationId?: string;\n locationOpen?: ILocationHours;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n onClick: (locationId: string | undefined) => void;\n}\n\n/**\n *\n * Pick Up In Store module.\n * @extends React.Component>}\n */\n@observer\nclass StoreSelector extends React.Component, IStoreSelectorState> {\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private storeCounter: number;\n\n private isPreferredStoreEnabled?: boolean;\n\n public constructor(props: IStoreSelectorProps) {\n super(props);\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.state = { isSearchInProgress: true, searchTerm: '', isSeeAllStoreValue: false, filteredPickupMode: undefined };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.storeCounter = 0;\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\n } = this.props;\n\n // Adding Timeout to make sure it loads the data based upon the preferred store.\n setTimeout(() => {\n this._getAndUpdateStoreLocation();\n }, 0);\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isDialogOpen,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context?.id === this.props.id) {\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (!context || context.id === this.props.id) {\n await this._searchTermChanged('');\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\n await this.props.data.storeSelectorStateManager.result.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\n });\n }\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\n () => {\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context.actionContext.requestContext.channel?.ChannelCountryRegionISOCode\n });\n }\n );\n\n reaction(\n () => this.props.data.availabilitiesWithHours.result,\n async () => {\n if (this.props.data.storeSelectorStateManager.result?.isDialogOpen) {\n const storeLocationList = this.props.data.availabilitiesWithHours.result;\n if (storeLocationList) {\n await this._setOrgUnitStoreInformation(storeLocationList);\n }\n }\n }\n );\n\n if (isAutoSuggestionEnabled) {\n when(\n () => {\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\n return isMapApiLoaded && isDialogOpen && isSameContext;\n },\n () => {\n setTimeout(async () => {\n await this._attachMapAutoSuggest();\n }, 0);\n }\n );\n }\n }\n\n public shouldComponentUpdate(): boolean {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n if (context && context.id === this.props.id) {\n return true;\n }\n return false;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element {\n const {\n config: {\n termsOfServiceLink,\n className,\n heading,\n mode,\n style,\n setAsPreferredStore: shouldSetAsPreferredStore,\n showAllStores: shouldShowAllStores,\n lookupRadius,\n enablePickupFilterToShowStore: hasEnablePickupFilterToShowStore,\n searchRadiusUnit\n },\n context: {\n telemetry,\n app: { config: appConfig },\n actionContext: {\n requestContext: { channel, cookies }\n }\n },\n slots: { maps: mapSlot },\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n this.storeCounter = 0;\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n const isMapDisabled = !(channel?.BingMapsApiKey && channel.BingMapsEnabled);\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const isDialogOpen: boolean = storeSelectorStateManager\n ? storeSelectorStateManager.isDialogOpen && context?.id === this.props.id\n : false;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const isInlineView = styleDefault === styleEnum.inline;\n const isLocatorView = modeDefault === modeEnum.findStores;\n const shouldHideInventory = isLocatorView;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\n this.isPreferredStoreEnabled = shouldSetAsPreferredStore && cookies?.isConsentGiven();\n const canShowLocationView =\n context && (context.showMapViewLink === undefined || context.showMapViewLink) && storeSelectorStateManager?.isMapModuleLoaded;\n\n const storeSelectorActions = {\n async toggleListMapViewState(): Promise {\n await storeSelectorStateManager?.toggleListMapViewState();\n }\n };\n\n if (!channel?.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n }\n\n const configHeading = heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText;\n const preferredDistanceUnit =\n searchRadiusUnit === SearchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n let storeLocationList: IFullOrgUnitAvailability[] | undefined = shouldHideInventory ? storeLocations : availabilitiesWithHours;\n let sortLocation = null;\n if (storeLocationList) {\n sortLocation = this._sortStores(storeLocationList, this.isPreferredStoreEnabled, preferredLocationId);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Reading value from app config.\n const isEnableOutofStock: boolean = appConfig?.enableStockCheck || false;\n const alreadySelectedLocation = context ? context.alreadySelectedLocation : undefined;\n const productPickUpOptionList = storeSelectorStateManager?.context?.deliveryOptions?.DeliveryOptions;\n if (this.state.filteredPickupMode && storeLocationList) {\n storeLocationList = this.onFilterLocations(storeLocationList, this.state.filteredPickupMode);\n }\n const locationListProps = this._getStoreLocationListProps(\n isEnableOutofStock,\n isLocatorView,\n preferredLocationId,\n this.isPreferredStoreEnabled,\n selectedStoreLocationId,\n sortLocation ?? null,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n\n const hasMapSlot = ArrayExtensions.hasElements(mapSlot);\n const dialogClassName = hasMapSlot ? 'ms-store-select__map' : '';\n const viewProps: IStoreSelectorViewProps = {\n ...(this.props as IStoreSelectorProps),\n state: this.state,\n maps: hasMapSlot ? mapSlot[0] : undefined,\n\n ModuleProps: {\n tag: isInlineView ? ('div' as NodeTag) : Modal,\n moduleProps: this.props,\n className: classname(\n `ms-store-${isInlineView ? 'locate' : 'select'}`,\n className,\n dialogClassName,\n isInlineView ? '' : 'msc-modal-input-required'\n ),\n autoFocus: true,\n fade: true,\n isOpen: isDialogOpen,\n 'aria-label': configHeading,\n onClosed: this._closeDialog,\n horizontalPosition: 'center',\n verticalPosition: 'center',\n toggle: this._closeDialog\n },\n isMobileView: isMobileDevice,\n HeaderContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalHeader,\n className: `ms-store-select__${isInlineView ? 'header' : 'modal-header'}`,\n toggle: this._closeDialog\n },\n HeaderProps: configHeading && (\n \n ),\n FooterContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalFooter,\n className: `ms-store-select__${isInlineView ? 'footer' : 'modal-footer'} ${!shouldDisplayList ? 'map-only-view' : ''}`\n },\n BodyContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalBody,\n className: `ms-store-select__${isInlineView ? 'body' : 'modal-body'}`\n },\n bodyWrapperProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__body_wrapper'\n },\n storeResultContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__store_container'\n },\n mapContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__map_container'\n },\n storeDetailsModal: {\n tag: 'div' as NodeTag,\n className: `ms-store-select__map__selected_store__modal ${\n selectedStoreLocationId && isDialogOpen && !shouldDisplayList ? 'show' : 'hide'\n }`\n },\n locationsMessage: !this.state.isLocationDisabled && (\n \n ),\n selectedLocation: this.renderSelectedStore(\n shouldHideInventory,\n preferredDistanceUnit,\n preferredStore,\n this.isPreferredStoreEnabled,\n isEnableOutofStock,\n productPickUpOptionList,\n shouldDisplayList\n ),\n search: (\n \n ),\n spinner: ,\n locationsList: ArrayExtensions.hasElements(storeLocationList) ? (\n \n ) : (\n undefined\n ),\n noLocationsMessage: ,\n terms: (\n \n ),\n\n // Not being used in current context, we can use it here to pass more props.\n headerText: (\n {heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText}\n ),\n sortLocations: sortLocation,\n locationListProps,\n callbacks: {\n searchTermChanged: this._searchTermChanged,\n performSearch: this._performSearch,\n closeDialog: this._closeDialog,\n selectedLocation: this._onOrgUnitLocationSelected,\n getAndUpdateUserLocation: async () => {\n this._getAndUpdateStoreLocation();\n return Promise.resolve();\n },\n attachMapAutoSuggest: this._attachMapAutoSuggest,\n onSuggestionSelected: this._onOrgUnitLocationSelected,\n setPreferredStore: this._setPreferredStore,\n removePreferredStore: this._removePreferredStore,\n setSelectedStore: this._setSelectedStore,\n setOrgUnitStoreInformation: this._setOrgUnitStoreInformation\n }\n } as IStoreSelectorViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Render the selected store for the mobile devices.\n * @param shouldHideInventory -- Hide Inventory.\n * @param preferredDistanceUnit -- Preferred Distance Unit.\n * @param preferredStore -- Preferred Store.\n * @param isPreferredStoreEnabled -- Is Preferred Store Enabled.\n * @param hasEnabledOutOfStockCheck -- Stock check is enabled or not.\n * @param productPickUpOptionList -- Product pickup option list.\n * @param shouldDisplayList - Should Display list.\n * @returns -- Returns the view props.\n */\n public renderSelectedStore = (\n shouldHideInventory: boolean,\n preferredDistanceUnit: string,\n preferredStore: IStoreInfo | undefined,\n isPreferredStoreEnabled: boolean | undefined,\n hasEnabledOutOfStockCheck: boolean,\n productPickUpOptionList?: DeliveryOption[],\n shouldDisplayList?: boolean\n ): ISelectedStoreViewProps | undefined => {\n const {\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const selectedStore = (shouldHideInventory ? storeLocations : availabilitiesWithHours)?.find(\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === selectedStoreLocationId\n );\n const orgUnitLocation = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreResources = this._mapResources(resources);\n\n if (!shouldDisplayList && selectedStore) {\n const selectedProps: ISelectedStoreProps = {\n shouldHideStockStatus: shouldHideInventory,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, context?.alreadySelectedLocation),\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, selectedStore.OrgUnitAvailability?.ItemAvailabilities),\n selectedStore,\n resources: selectedStoreResources,\n stockStatusLabel: this._stockInventoryLabel(selectedStore),\n preferredStoreLocationId: preferredStore?.StoreId ? preferredStore.StoreId : '',\n isPreferredStoreEnabled,\n isLocationDisabled: this.state.isLocationDisabled,\n telemetryContent: this.telemetryContent,\n storePickUpOptionList: selectedStore.OrgUnitPickUpDeliveryModes?.DeliveryOptions,\n productPickUpOptionList,\n preferredDistanceUnit,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n\n return SelectedStoreComponent(selectedProps);\n }\n\n return undefined;\n };\n\n /**\n * Method to be called on link text change.\n * @param event -Content Edit Event.\n */\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.termsOfServiceLink) {\n this.props.config.termsOfServiceLink.linkText = event.target.value;\n }\n };\n\n /**\n * Method to be called on heading change.\n * @param event -Content Edit Event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading = event.target.value;\n };\n\n /**\n * Show all stores handler function.\n */\n private readonly onShowAllStoresHandler = () => {\n this._getAndUpdateStoreLocation(true);\n this.setState({ filteredPickupMode: undefined });\n };\n\n /**\n * Method to be called for filtered the store location based on the filter selected by the user.\n * @param stores -All the stores from the API.\n * @param filteredPickupMode -Filter selected by the user.\n * @returns -Filtered stores.\n */\n private readonly onFilterLocations = (stores: IFullOrgUnitAvailability[], filteredPickupMode: string) => {\n return stores.filter(location => {\n return location.OrgUnitPickUpDeliveryModes?.DeliveryOptions?.some(deliveryOption => {\n return deliveryOption.Code === filteredPickupMode;\n });\n });\n };\n\n /**\n * Filter Store by pickup mode.\n * @param deliveryCode -Delivery Code.\n */\n private readonly onFilteredPickupMode = (deliveryCode: string) => {\n this.setState({ filteredPickupMode: deliveryCode });\n };\n\n /**\n * Method will sort all stores.\n * @param stores -Stores List.\n * @param isPreferredStoreEnabled -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @returns List of Stores.\n */\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\n private _sortStores(\n stores: IFullOrgUnitAvailability[],\n isPreferredStoreEnabled: boolean | undefined,\n preferredStoreLocationId: string\n ): IFullOrgUnitAvailability[] {\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n isPreferredStoreEnabled &&\n preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Method will list of store selector location line.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param stores -Store Id.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns List of StoreSelectorLocation Line.\n */\n private _getStoreLocationListProps(\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n stores: IFullOrgUnitAvailability[] | null,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps[] {\n const storeList: IStoreSelectorLocationLineItemProps[] = [];\n if (ArrayExtensions.hasElements(stores)) {\n stores.map((store, index: number) => {\n const storeLineProps = this._createStoreLocationList(\n store,\n index,\n hasEnabledOutOfStockCheck,\n isStoreLocatorView,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n selectedStoreLocationId,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n if (storeLineProps) {\n storeList.push(storeLineProps);\n }\n });\n }\n return storeList;\n }\n\n /**\n * Initialize Map AutoSuggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n config: { autoSuggestOptions },\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\n /**\n * Callback for the autosuggest API.\n */\n callback: () => {\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\n this.autoSuggestManager.attachAutosuggest(\n `#ms-store-select__search-box_${this.props.id}`,\n `#ms-store-select__search-box-container_${this.props.id}`,\n this._onSuggestionSelected\n );\n },\n\n /**\n * Error call back for autosuggest API.\n */\n errorCallback: () => {\n if (telemetry) {\n telemetry.debug('Unable to attach map auto suggest.');\n }\n },\n credentials: channel?.BingMapsApiKey\n });\n }\n };\n\n /**\n * On Selecting Location Suggestion.\n * @param result - Map Suggestions List.\n */\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context && context.id === this.props.id) {\n await this._searchTermChanged(result.formattedSuggestion);\n await this._performSearch(result.formattedSuggestion);\n }\n };\n\n /**\n * On Selecting Preferred Store.\n * @param storeId - Store Id.\n */\n private readonly _setPreferredStore = async (storeId: string | undefined): Promise => {\n if (!storeId) {\n return;\n }\n\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n config: { mode },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations },\n availabilitiesWithHours: { result: availabilitiesWithHours }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n\n let stores: IFullOrgUnitAvailability[];\n if (modeDefault === modeEnum.findStores && storeLocations) {\n stores = storeLocations;\n } else {\n stores = availabilitiesWithHours!;\n }\n\n const preferredStore = stores.find(store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === storeId);\n\n await storeSelectorStateManager.setPreferredStoreLocation(\n storeId,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\n cookies.isConsentGiven(),\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude\n );\n };\n\n /**\n * On Removing Preferred Store.\n */\n private readonly _removePreferredStore = async (): Promise => {\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.clearPreferredStore(cookies.isConsentGiven());\n };\n\n /**\n * Method called to close the store details modal that comes up on clicking the pushpin.\n * @returns Void promise.\n */\n private readonly _closeStoreDetailModal = async (): Promise => {\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\n };\n\n /**\n * On Selecting Store for pickup.\n * @param storeId - Store Id.\n */\n private readonly _setSelectedStore = async (storeId: string | undefined): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.setSelectedStoreLocationId(storeId);\n };\n\n /**\n * Method to be called on search.\n * @param searchTerm - Search string.\n */\n private readonly _performSearch = async (searchTerm: string): Promise => {\n const {\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!searchTerm || !storeSelectorStateManager) {\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\n\n if (location) {\n await this._updateLocations(location.latitude, location.longitude);\n } else {\n await this._updateLocations();\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n };\n\n /**\n * Method to be called on search term changed.\n * @param searchTerm - Search string.\n */\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\n this.setState({ searchTerm });\n };\n\n /**\n * Method to be called updating the store location.\n * @param shouldShowAllStores - Flag to show all stores.\n */\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\n const {\n config: { style },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n\n if (styleDefault !== styleEnum.inline && (!storeSelectorStateManager || !storeSelectorStateManager.isDialogOpen)) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n if (navigator?.geolocation) {\n navigator.geolocation.getCurrentPosition(\n async position => {\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\n this.setState({ isLocationDisabled: false, isSearchInProgress: true });\n if (shouldShowAllStores) {\n this.setState({ isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(position.coords.latitude, position.coords.longitude, 0);\n } else {\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n async error => {\n // If the location setting is turned off\n if (error.PERMISSION_DENIED) {\n this.setState({ isLocationDisabled: true, isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(0, 0, 0);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n { timeout: 5000 }\n );\n } else {\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n }\n };\n\n /**\n * Method to be called closing the store selector dialog.\n * @returns Void promise.\n */\n private readonly _closeDialog = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n this.setState({ searchTerm: '' });\n\n if (storeSelectorStateManager) {\n storeSelectorStateManager.context?.parentElementRef?.current?.focus();\n return storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method to set store info.\n * @param orgUnitStoreInformation - Store Info Object.\n * @returns Void promise.\n */\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n config: { style },\n telemetry\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n const context = storeSelectorStateManager.context;\n const moduleId: string = context?.id ? context.id : this.props.id;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n let input: IStoreSelectionStateContext = {\n /**\n * On Location selected.\n * @returns - Returns promise.\n */\n onLocationSelected: async () => {\n // TO-DO handle event for when location in selected\n return Promise.resolve();\n }\n };\n\n if (storeSelectorStateManager.context) {\n input = storeSelectorStateManager.context;\n }\n\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager.preferredStore;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n const storeLocationList = this._sortStores(orgUnitStoreInformation, this.isPreferredStoreEnabled, preferredLocationId);\n\n input = {\n ...input,\n id: moduleId,\n showMapViewLink: context?.showMapViewLink,\n parentElementRef: context?.parentElementRef,\n isDialog: styleDefault === styleEnum.dialog,\n orgUnitStoreInformation: storeLocationList,\n product: context?.product\n };\n\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\n if (telemetry) {\n telemetry.error(error.message);\n telemetry.debug('Unable to Update store location state');\n }\n });\n };\n\n /**\n * Method to update user location.\n * @param latitude - User location.\n * @param longitude - User location.\n * @param radius - Search Criteria Radius.\n * @returns Void promise.\n */\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\n const {\n config: { mode, lookupRadius, style, searchRadiusUnit },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.kilometers ? 1 : 0;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n let localLatitude = this.state.searchTerm || !preferredStore?.Latitude ? latitude : preferredStore.Latitude;\n let long = this.state.searchTerm || !preferredStore?.Longitude ? longitude : preferredStore.Longitude;\n if (styleDefault === styleEnum.inline) {\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\n if (lastInlineStoreLocation && !this.state.searchTerm) {\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\n }\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\n }\n\n if (modeDefault === modeEnum.findStores) {\n await this.getOrgUnitLocationByArea(calRadius, distanceUnitValue, localLatitude, long);\n return;\n }\n\n await this.getFullAvailableInventoryNearby(calRadius, distanceUnitValue, localLatitude, long);\n };\n\n /**\n * Get org unit location by area.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getOrgUnitLocationByArea = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n context: { actionContext }\n } = this.props;\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\n latitude,\n longitude,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\n if (orgUnitLocations) {\n await this._setOrgUnitStoreInformation(orgUnitLocations);\n await this._setSelectedStore(undefined);\n }\n };\n\n /**\n * Get full available inventory nearby.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getFullAvailableInventoryNearby = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n telemetry,\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager || !storeSelectorStateManager.context) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n if (!storeSelectorStateManager.context.product) {\n // TODO: Use alternative search method here to not make inventory check\n return;\n }\n\n const input = new GetFullAvailableInventoryNearbyInput(\n storeSelectorStateManager.context.product.RecordId,\n latitude ?? 0,\n longitude ?? 0,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n await getFullAvailableInventoryNearby(input, actionContext).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get full available inventory near by');\n });\n };\n\n /**\n * Method to called on store selected.\n * @param location - Store Info.\n * @param deliveryMode - Pickup mode.\n * @returns Void promise.\n */\n private readonly _onOrgUnitLocationSelected = async (location: OrgUnitLocation | undefined, deliveryMode?: string): Promise => {\n const {\n telemetry,\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager) {\n if (location && storeSelectorStateManager.context) {\n // Want to eat exceptions here so that the dialog still closes even if the onLocationSelected call goes wrong\n await storeSelectorStateManager.context.onLocationSelected(location, deliveryMode).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get on org unit location selected');\n });\n }\n\n await storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method will list of store selector location line.\n * @param store -Store Info.\n * @param index - List index.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns StoreSelectorLocation Line Prop.\n */\n private _createStoreLocationList(\n store: IFullOrgUnitAvailability,\n index: number,\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps | undefined {\n const orgUnitLocation = store.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocation = selectedStoreLocationId;\n const deliveryOptions = store.OrgUnitPickUpDeliveryModes;\n const lineResources = this._mapResources(this.props.resources);\n const storeOpenFrom: string | undefined = secondsToTime(orgUnitLocation?.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(orgUnitLocation?.OpenTo);\n const storeHours = store.StoreHours;\n\n if (orgUnitLocation) {\n ++this.storeCounter;\n return {\n location: orgUnitLocation,\n selectedStoreLocationId: selectedStoreLocation,\n storeHours,\n resources: lineResources,\n preferredDistanceUnit: preferredDistanceUnit!,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, alreadySelectedLocation),\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, store.OrgUnitAvailability?.ItemAvailabilities),\n stockStatusLabel: this._stockInventoryLabel(store),\n storeLocatorView: isStoreLocatorView,\n index: this.storeCounter.toString(),\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n telemetryContent: this.telemetryContent,\n isLocationDisabled: this.state.isLocationDisabled,\n storePickUpOptionList: deliveryOptions?.DeliveryOptions,\n productPickUpOptionList,\n locationOpen: { openFrom: storeOpenFrom, openTo: storeOpenTo },\n storeHoursList: storeHours?.RegularStoreHours ? buildStoreHours(storeHours.RegularStoreHours, lineResources) : [],\n onClick: this._setSelectedStore,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n }\n return undefined;\n }\n\n /**\n * Method to map resources with Location Item.\n * @param resources - List of strings for module.\n * @returns Resources for StoreSelector location line.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined, selectedLocation?: OrgUnitLocation): boolean =>\n (selectedLocation && location && selectedLocation.OrgUnitNumber === location.OrgUnitNumber) || false;\n\n /**\n * Method to get stock.\n * @param hasEnableOutOfStockCheck - Config to check for stock check enabled.\n * @param itemAvailabilities - Item quantity availability.\n * @returns Boolean value for item stock.\n */\n private readonly _isProductInStock = (\n hasEnableOutOfStockCheck: boolean,\n itemAvailabilities: ItemAvailability[] | undefined\n ): boolean => {\n if (!hasEnableOutOfStockCheck) {\n return true;\n }\n const quantityCount = 0;\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > quantityCount : false;\n }\n\n return false;\n };\n\n /**\n * Method to get stocklevel label.\n * @param isInStock - Stock available in store.\n * @returns Label for stock status.\n */\n private readonly _stockInventoryLabel = (isInStock: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (isInStock?.ProductInventoryInformation && ArrayExtensions.hasElements(isInStock.ProductInventoryInformation)) {\n for (let index = 0; index < isInStock.ProductInventoryInformation.length; index++) {\n if (\n isInStock.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n isInStock.ProductInventoryInformation[index].InventLocationId\n ) {\n return isInStock.ProductInventoryInformation[index].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n}\n\nexport default StoreSelector;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { ControlledDrawer, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { IDrawerState } from '@msdyn365-commerce-modules/utilities/dist/types/drawer/Drawer';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createAccordionStateInput, interactionStyle } from '../..';\nimport { IAccordionItemData } from './accordion-item.data';\nimport { IAccordionItemProps } from './accordion-item.props.autogenerated';\n\nexport interface IAccordionItemViewProps {\n AccordionItemContainer: IModuleProps;\n drawer: INodeProps;\n accordionSlots: INodeProps;\n AccordionItemContent: INodeProps;\n className: string;\n}\n\nexport interface IAccordionItemExtentedProps extends IAccordionItemProps {\n interactionStyle?: interactionStyle;\n}\n\n/**\n *\n * AccordionItem component.\n * @extends {React.Component}\n */\n@observer\nclass AccordionItem extends React.Component {\n private readonly moduleClassName: string = 'ms-accordion-item';\n\n private readonly telemetryContent?: ITelemetryContent;\n\n constructor(props: IAccordionItemProps) {\n super(props);\n this._onToggle = this._onToggle.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public shouldComponentUpdate(nextProps: IAccordionItemProps): boolean {\n if (this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { slots, renderView, config, data } = this.props;\n const accordionExpandedStateResult = data && data.accordionExpandedState && data.accordionExpandedState.result;\n const expanded =\n accordionExpandedStateResult && accordionExpandedStateResult.isAllExpanded === undefined\n ? data && config.isExpandedOnInitialLoad\n : accordionExpandedStateResult && accordionExpandedStateResult.isAllExpanded;\n const viewProps = {\n ...this.props,\n AccordionItemContainer: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, config.className)\n },\n AccordionItemContent: {\n className: 'ms-accordion-item-content'\n },\n drawer: {\n tag: ControlledDrawer,\n className: `${this.moduleClassName}__drawer`,\n toggleButtonText: (config.accordionItemTitle && config.accordionItemTitle) || '',\n collapseProps: { isOpen: expanded },\n onToggle: this._onToggle,\n onTextChange: this.handleHeadingChange,\n requestContext: this.props.context.request,\n telemetryContent: this.telemetryContent\n },\n accordionSlots: slots\n };\n return renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.accordionItemTitle = event.target.value);\n\n private _onToggle(state: IDrawerState): void {\n if (!state.isOpen && this.props.interactionStyle === interactionStyle.ExpandOneItemOnly) {\n const accordionState = { isAllExpanded: false };\n this.props.context.actionContext.update(createAccordionStateInput(accordionState), accordionState);\n }\n }\n}\nexport default AccordionItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductSpecificationViewProps } from './product-specification';\n\nconst ProductSpecificationView: React.FC = props => {\n const { ProductSpecification, ProductSpecificationTableProps, ProductSpecificationTableBodyProps, productSpecificationResult } = props;\n const rowdata =\n productSpecificationResult &&\n ArrayExtensions.hasElements(productSpecificationResult) &&\n productSpecificationResult.filter(row => !ObjectExtensions.isNullOrUndefined(row));\n\n return rowdata && ArrayExtensions.hasElements(rowdata) ? (\n \n {props.title}\n \n {rowdata}\n \n \n ) : null;\n};\n\nexport default ProductSpecificationView;\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 { IAccordionViewProps } from './accordion';\n\nconst accordionView: React.FC = props => {\n const { heading, AccordionContainer, accordionItems } = props;\n if (!props.heading && !props.accordionButtons && !props.accordionItems) {\n props.context.telemetry.error('Accordion content is empty, module wont render');\n return null;\n }\n return (\n \n \n {heading}\n {props.accordionButtons && {props.accordionButtons}}\n \n {accordionItems}\n \n );\n};\n\nexport default accordionView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Popover } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface IAccountCustomerBalanceActions {\n className?: string;\n requestStatementButtonLabel: string;\n onRequestStatement(): void;\n}\n\ninterface IAdminRequestStatementProps {\n className?: string;\n requestStatementButtonLabel: string;\n myUserAccountLabel: string;\n fullOrganizationLabel: string;\n isDropdownShowing: boolean;\n buttonReference?: React.RefObject;\n onToggleDropdown(): void;\n onRequestStatement(isFullOrg: boolean): void;\n}\n\nexport const ActionBar: React.FC = ({ className, onRequestStatement, requestStatementButtonLabel }) => {\n return (\n
\n \n
\n );\n};\n\nexport const AdminRequestStatementButton: React.FC = ({\n className,\n onRequestStatement,\n requestStatementButtonLabel,\n onToggleDropdown,\n myUserAccountLabel,\n fullOrganizationLabel,\n isDropdownShowing,\n buttonReference\n}) => {\n const onSelectCustomerAccount = React.useCallback(() => {\n onRequestStatement(false);\n }, [onRequestStatement]);\n\n const onSelectFullOrg = React.useCallback(() => {\n onRequestStatement(true);\n }, [onRequestStatement]);\n\n const popoverReference = buttonReference !== undefined ? buttonReference : React.createRef();\n const requestStatementDropdownString = `request-statement-dropdown-id-${Random.Guid.generateGuid()}`;\n return (\n
\n \n {requestStatementButtonLabel}\n \n \n \n {myUserAccountLabel}\n \n \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 { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * The interface for the props for the account statement request modal.\n */\ninterface IAccountStatementRequestModalProps {\n email: string;\n isModalOpen: boolean;\n fromDateString: string;\n toDateString: string;\n canSubmitRequest: boolean;\n modalHeaderLabel: string;\n sendToEmailLabel: string;\n fromDateLabel: string;\n toDateLabel: string;\n submitRequestLabel: string;\n cancelLabel: string;\n className: string;\n selectedUser: string;\n selectedUserLabel: string;\n toggle(): void;\n onChangeFromDate(newFromDate: string): void;\n onChangeToDate(newToDate: string): void;\n onSubmitRequest(): void;\n modalAriaLabel?: string;\n maxDateString?: string;\n}\n\nexport const RequestStatementModal: React.FC = ({\n className,\n email,\n isModalOpen,\n toggle,\n fromDateString,\n toDateString,\n onChangeFromDate,\n onChangeToDate,\n canSubmitRequest,\n modalHeaderLabel,\n sendToEmailLabel,\n fromDateLabel,\n toDateLabel,\n submitRequestLabel,\n cancelLabel,\n onSubmitRequest,\n selectedUser,\n selectedUserLabel,\n modalAriaLabel,\n maxDateString\n}) => {\n const onChangeFromDateEvent = React.useCallback(\n (event: React.ChangeEvent) => {\n const value = event.target.value;\n\n onChangeFromDate(value);\n },\n [onChangeFromDate]\n );\n\n const onChangeToDateEvent = React.useCallback(\n (event: React.ChangeEvent) => {\n const value = event.target.value;\n\n onChangeToDate(value);\n },\n [onChangeToDate]\n );\n\n /**\n * If the onBlur is called on the fromDate and the date has been changed, reset focus on it.\n * @param event - The event that is triggering onBlur.\n */\n const onBlurFromDate = React.useCallback(\n (event: React.ChangeEvent) => {\n if (ObjectExtensions.isFunction(event.target.focus) && event.target.value !== fromDateString) {\n event.target.focus();\n }\n },\n [fromDateString]\n );\n\n /**\n * If the onBlur is called on the toDate and the date has been changed, reset focus on it.\n * @param event - The event that is triggering onBlur.\n */\n const onBlurToDate = React.useCallback(\n (event: React.ChangeEvent) => {\n if (ObjectExtensions.isFunction(event.target.focus) && event.target.value !== toDateString) {\n event.target.focus();\n }\n },\n [toDateString]\n );\n\n return (\n \n {modalHeaderLabel}\n \n {selectedUser && (\n
\n \n
\n
{selectedUser}
\n
\n )}\n \n
\n {email}\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n {submitRequestLabel}\n \n {` `}\n \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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { AdminRequestStatementButton } from './account-actions';\nimport { RequestStatementModal } from './account-statement-request-modal';\n\nexport * from './account-actions';\nexport * from './account-statement-request-modal';\n\ninterface IAccountLabel {\n name: string;\n accountNumber: string;\n createdOn: string;\n customerSincePrefix: string;\n}\n\ninterface IAccountValues {\n availableCredit: string;\n availableCreditLabel: string;\n}\n\n/**\n * Prop for Available credit component.\n */\ninterface ICreditSummaryAvailableCredit {\n availableCreditLabel: string;\n availableCredit: string;\n}\n\n/**\n * Prop for Balanced owed component.\n */\ninterface ICreditSummaryBalanceOwed {\n balanceOwedLabel: string;\n balanceOwed: string;\n}\n\n/**\n * Prop for credit excess component.\n */\ninterface ICreditSummaryCreditExcess {\n creditExcessLabel: string | null;\n creditExcess: string | null;\n}\n\ninterface ICreditSummaryLabel {\n availableCredit: string;\n balanceOwed: string;\n creditExcess: string | null;\n}\n\ninterface ICreditSummaryValues {\n availableCredit: string;\n balanceOwed: string;\n creditExcess: string | null;\n}\n\ninterface IBackButton {\n link: string;\n label: string;\n telemetryContent?: ITelemetryContent;\n}\n\nexport const AccountLabels: React.FC = ({ name, accountNumber, customerSincePrefix, createdOn }) => (\n
\n

{name}

\n
#{accountNumber}
\n
\n {customerSincePrefix} {createdOn}\n
\n
\n);\n\nexport const AccountValues: React.FC = ({ availableCredit, availableCreditLabel }) => (\n
\n
{availableCreditLabel}
\n
{availableCredit}
\n
\n);\n\nexport const CreditSummaryLabels: React.FC = ({ availableCredit, balanceOwed, creditExcess }) => (\n
\n
{availableCredit}
\n
{balanceOwed}
\n
{creditExcess}
\n
\n);\n\nexport const CreditSummaryValues: React.FC = ({ availableCredit, balanceOwed, creditExcess }) => (\n
\n
{availableCredit}
\n
{balanceOwed}
\n {creditExcess &&
{creditExcess}
}\n
\n);\n\n/**\n * Available credit component.\n * @param props - ICreditSummaryAvailableCredit.\n * @param props.availableCreditLabel - Available credit label.\n * @param props.availableCredit - Available credit value.\n * @returns - React Node for available credit component.\n */\nexport const AvailableCreditComponent: React.FC = ({ availableCreditLabel, availableCredit }) => (\n
\n
\n
{availableCreditLabel}
\n
\n
\n
{availableCredit}
\n
\n
\n);\n\n/**\n * Balance Owed Component.\n * @param props - ICreditSummaryBalanceOwed.\n * @param props.balanceOwedLabel - Balance Owed label.\n * @param props.balanceOwed - Balance Owed value.\n * @returns - React Node for balance owed component.\n */\nexport const BalanceOwedComponent: React.FC = ({ balanceOwedLabel, balanceOwed }) => (\n
\n
\n
{balanceOwedLabel}
\n
\n
\n
{balanceOwed}
\n
\n
\n);\n\n/**\n * Credit Excess Component.\n * @param props - ICreditSummaryCreditExcess.\n * @param props.creditExcessLabel - Credit excess label.\n * @param props.creditExcess - Credit excess value.\n * @returns - React Node for credit excess component.\n */\nexport const CreditExcessComponent: React.FC = ({ creditExcessLabel, creditExcess }) => (\n
\n {creditExcess && (\n
\n
{creditExcessLabel}
\n
\n )}\n
\n {creditExcess &&
{creditExcess}
}\n
\n
\n);\nexport const BackButton: React.FC = ({ link, label, telemetryContent }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.BackToShopping);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {label}\n \n );\n};\n\nexport { AdminRequestStatementButton, RequestStatementModal };\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IAccordionExpandedState } from './data-actions/accordion-state';\nimport { createAccordionStateInput } from './data-actions/accordion-state-data-action';\nimport accordion from './modules/accordion/accordion';\nimport { interactionStyle } from './modules/accordion/accordion.props.autogenerated';\nimport accordionView from './modules/accordion/accordion.view';\n\nexport * from './modules/accordion/accordion';\nexport * from './modules/accordion/accordion.view';\n\nexport { accordion, accordionView, createAccordionStateInput, IAccordionExpandedState, interactionStyle };\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\r\nimport { verifyEmployeeInput } from './DataActionExtension.g';\r\n\r\n/**\r\n * ValidationFormEmployee Input Action\r\n */\r\n\r\nexport class ValidationFormEmployeeInput implements Msdyn365.IActionInput {\r\n public input: IDataServiceRequest;\r\n constructor(input: IDataServiceRequest) {\r\n this.input = input;\r\n }\r\n\r\n public shouldCacheOutput = () => { return false; };\r\n public getCacheKey = () => `IValidationFormEmployee`;\r\n public getCacheObjectType = () => 'IValidationFormEmployee';\r\n public dataCacheType = (): Msdyn365.CacheType => 'application';\r\n}\r\n\r\n// TODO: Create a data model here or import one to capture the response of the action\r\nexport interface IValidationFormEmployeeData {\r\n text: string;\r\n}\r\n\r\nexport type validationFormEmployeeInfo = {\r\n employeeId: string;\r\n lastName: string;\r\n birthYear: string;\r\n customerId: string;\r\n};\r\n\r\n/**\r\n * TODO: Use this function to create the input required to make the action call\r\n */\r\nexport const createEmployeeValidationInput = (inputData: validationFormEmployeeInfo, appContext: Msdyn365.ICoreContext<{ [x: string]: unknown }>): ValidationFormEmployeeInput => {\r\n return new ValidationFormEmployeeInput(\r\n verifyEmployeeInput(\r\n inputData.customerId,\r\n inputData.employeeId,\r\n inputData.lastName,\r\n inputData.birthYear\r\n )\r\n );\r\n};\r\n\r\n/**\r\n * TODO: Use this function to call your action and process the results as needed\r\n */\r\nexport async function employeeValidationAction(input: ValidationFormEmployeeInput, ctx: Msdyn365.IActionContext): Promise {\r\n return input.input.execute(ctx);\r\n}\r\n\r\nexport const IValidationFormEmployeeAction = Msdyn365.createObservableDataAction({\r\n action: >employeeValidationAction,\r\n input: createEmployeeValidationInput\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { Heading } from '@msdyn365-commerce-modules/utilities';\r\nimport { Image, RichTextComponent } from '@msdyn365-commerce/core';\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport { FormInputGroupBuilder } from '../../components/input-group-form';\r\nimport { createEmployeeValidationInput, employeeValidationAction } from '../../dataActions/validation-form-employee';\r\nimport validateFriendsAndFamilyAction, { createValidateFriendsAndFamilyInput } from '../family-and-friends/actions/validate-friends-and-family.action';\r\nimport { IValidationFormProps } from './validation-form.props.autogenerated';\r\n\r\nexport interface IValidationFormViewProps extends IValidationFormProps<{}> {\r\n}\r\n\r\ntype validationFormData = {\r\n employeeNumber: string;\r\n lastName: string;\r\n birthYear: string;\r\n};\r\n\r\n/**\r\n *\r\n * ValidationForm component\r\n * @extends {React.Component>}\r\n */\r\n\r\n@observer\r\nclass ValidationForm extends React.Component> {\r\n\r\n @observable private _isFormCompleted: boolean = false;\r\n\r\n @observable private _displayValidationError: boolean = false;\r\n @observable private _displayCommunicationsError: boolean = false;\r\n\r\n @observable private _ffDisplayValidationError: boolean = false;\r\n @observable private _ffDisplayCommunicationsError: boolean = false;\r\n\r\n public constructor(props: IValidationFormProps<{}>) {\r\n super(props);\r\n\r\n this._onFinished = this._onFinished.bind(this);\r\n this._onFriendsAndFamilyFinished = this._onFriendsAndFamilyFinished.bind(this);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n\r\n const {\r\n validationError, fatalError,\r\n validationForm__ffVerificationFailed\r\n } = this.props.resources;\r\n\r\n const {\r\n className,\r\n description, title,\r\n logo, emailContact\r\n } = this.props.config;\r\n\r\n return (\r\n
\r\n {logo && }\r\n\r\n {/* regular login form */}\r\n {title && }\r\n {!this._isFormCompleted && description && }\r\n
\r\n {!this._isFormCompleted && this._formJSX}\r\n
\r\n {this._displayValidationError && validationError &&
{validationError}
}\r\n {this._displayCommunicationsError && fatalError &&
{fatalError}
}\r\n {/* regular login form end */}\r\n\r\n {/* OR divider */}\r\n {!this._isFormCompleted &&\r\n
\r\n or\r\n
\r\n }\r\n {/* OR divider */}\r\n\r\n {/* FF login */}\r\n
\r\n {!this._isFormCompleted && this._familyAndFriendsJSX}\r\n
\r\n {this._ffDisplayValidationError && validationForm__ffVerificationFailed &&
{validationForm__ffVerificationFailed} {emailContact}
}\r\n {this._ffDisplayCommunicationsError && fatalError &&
{fatalError}
}\r\n {/* FF login */}\r\n\r\n {this._isFormCompleted && this._successJSX}\r\n
\r\n );\r\n }\r\n\r\n private get _successJSX(): JSX.Element {\r\n const { welcomeMessage } = this.props.config;\r\n return (\r\n \r\n {welcomeMessage && }\r\n \r\n );\r\n }\r\n\r\n private get _familyAndFriendsJSX(): JSX.Element {\r\n const {\r\n validationForm__ffValidation,\r\n validationForm__ffValidationRequiredError\r\n } = this.props.resources;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private get _formJSX(): JSX.Element {\r\n\r\n const {\r\n employeeNumber, employeeNumberValidation,\r\n birthYear, birthYearValidation,\r\n lastName, lastNameValidation\r\n } = this.props.resources;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _onFriendsAndFamilyFinished(formData: { validationCode?: string }): void {\r\n if (formData.validationCode) {\r\n const { redirectDelay, redirectLink } = this.props.config;\r\n\r\n const input = createValidateFriendsAndFamilyInput(\r\n this.props.context.actionContext,\r\n {\r\n code: formData.validationCode,\r\n emailListId: this.props.context.app.config.mailingListID || '',\r\n sourceId: this.props.context.app.config.mailingListSourceID || '' // possible to hardcode to WEB for now\r\n }\r\n );\r\n validateFriendsAndFamilyAction(input, this.props.context.actionContext)\r\n .then(requestFullfilled => {\r\n if (requestFullfilled.Status === 'SUCCESS') {\r\n this._isFormCompleted = true;\r\n this._ffDisplayCommunicationsError = false;\r\n this._ffDisplayValidationError = false;\r\n setTimeout(\r\n () => {\r\n window.location.replace(redirectLink.destinationUrl);\r\n },\r\n redirectDelay * 1000\r\n );\r\n } else {\r\n this._ffDisplayValidationError = true;\r\n this._isFormCompleted = false;\r\n this._ffDisplayCommunicationsError = false;\r\n }\r\n })\r\n .catch(e => {\r\n this._ffDisplayCommunicationsError = true;\r\n this._isFormCompleted = false;\r\n this._ffDisplayValidationError = false;\r\n });\r\n }\r\n }\r\n\r\n private _onFinished(formData: validationFormData): void {\r\n // process form here\r\n const { redirectDelay, redirectLink } = this.props.config;\r\n\r\n const input = createEmployeeValidationInput(\r\n {\r\n customerId: this.props.context.request.user.customerAccountNumber /* will exist at this stage always */ || 'CUST006052',\r\n employeeId: this._parseLeadingZeros(formData.employeeNumber),\r\n birthYear: formData.birthYear,\r\n lastName: formData.lastName\r\n },\r\n this.props.context\r\n );\r\n\r\n employeeValidationAction(input, this.props.context.actionContext)\r\n .then(requestFullfilled => {\r\n // having the set the opposite completion booleans like this\r\n // shouldn't be necessary but just in case\r\n if ((requestFullfilled as unknown as { Result: boolean }).Result) {\r\n this._isFormCompleted = true;\r\n this._displayValidationError = false;\r\n this._displayCommunicationsError = false;\r\n setTimeout(\r\n () => {\r\n window.location.replace(redirectLink.destinationUrl);\r\n },\r\n redirectDelay * 1000\r\n );\r\n } else {\r\n this._displayValidationError = true;\r\n this._isFormCompleted = false;\r\n this._displayCommunicationsError = false;\r\n }\r\n })\r\n .catch(e => {\r\n // this shouldn't happen, all error codes are set to 200 anyway\r\n console.error(e);\r\n this._displayCommunicationsError = true;\r\n this._isFormCompleted = false;\r\n this._displayValidationError = false;\r\n });\r\n }\r\n\r\n private _parseLeadingZeros(employeeNumber: string): string {\r\n return employeeNumber.replace(/^0+/, '');\r\n }\r\n}\r\n\r\nexport default ValidationForm;\r\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 React, { ReactNode } from 'react';\n\nimport { IInteractiveFeatureCollectionViewProps } from './interactive-feature-collection';\n\n/**\n * Feature Collection View.\n * @param props - Feature Collection view props.\n * @returns Feature Collection View.\n */\nexport const interactiveFeatureCollectionView: React.FC = props => {\n const {\n title,\n interactiveFeatureCollectionHeading,\n interactiveFeatureCollectionContainer,\n interactiveFeatureCollectionDesktopContainer,\n interactiveFeatureCollectionDesktopItems,\n interactiveFeatureCollectionMobileItems,\n interactiveFeatureCollectionMobileContainer,\n singleSlideCarouselComponentProps,\n singleSlideCarouselItemContainer\n } = props;\n return (\n \n {title}\n {interactiveFeatureCollectionDesktopItems}\n \n \n {interactiveFeatureCollectionMobileItems &&\n interactiveFeatureCollectionMobileItems.map((tileItem: ReactNode, index: number) => {\n const keyIndex = `interactive-feature-carousel-item__${index}`;\n return (\n \n {tileItem}\n \n );\n })}\n \n \n \n );\n};\n\nexport default interactiveFeatureCollectionView;\n","/* ---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * --------------------------------------------------------------------------------------------*/\r\n\r\nimport {\r\n Button,\r\n Modal,\r\n ModalBody,\r\n ModalHeader\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport {\r\n ILightboxConfig,\r\n ILightboxProps\r\n} from './lightbox.props.autogenerated';\r\n\r\ninterface ILightBoxState extends React.ComponentState {\r\n isOpen: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Lightbox component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass Lightbox extends React.PureComponent<\r\n ILightboxProps,\r\n ILightBoxState\r\n> {\r\n constructor(props: ILightboxProps) {\r\n super(props);\r\n this.state = { isOpen: false };\r\n this._closeModal = this._closeModal.bind(this);\r\n this._openModal = this._openModal.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n const {\r\n config: { defaultOpenState }\r\n } = this.props;\r\n if (defaultOpenState) {\r\n this.setState({ isOpen: defaultOpenState });\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { config } = this.props;\r\n const launchLightboxButton = this._launchLightboxButton(\r\n config.hasLaunchLightboxButton,\r\n config.launchLightboxButtonText\r\n );\r\n\r\n return (\r\n \r\n {launchLightboxButton}\r\n \r\n \r\n {config.modalHeader}\r\n \r\n \r\n {this.props.slots &&\r\n this.props.slots.content &&\r\n this.props.slots.content.length\r\n ? this.props.slots.content.map(\r\n (slot: React.ReactNode, index: number) => {\r\n return
{slot}
;\r\n }\r\n )\r\n : false}\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private _launchLightboxButton(\r\n hasLaunchLightboxButton: boolean | undefined,\r\n buttonText: string | undefined\r\n ): JSX.Element | null {\r\n if (hasLaunchLightboxButton) {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _closeModal(): void {\r\n this.setState(prevState => ({\r\n isOpen: !prevState.isOpen\r\n }));\r\n }\r\n private _openModal(): void {\r\n this.setState(prevState => ({\r\n isOpen: !prevState.isOpen\r\n }));\r\n }\r\n}\r\n\r\nexport default Lightbox;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { IInteractiveFeatureCollectionProps } from './interactive-feature-collection.props.autogenerated';\n\n/**\n * Interactive Feature Collection view props.\n */\nexport interface IInteractiveFeatureCollectionViewProps extends IInteractiveFeatureCollectionProps<{}> {\n title: React.ReactNode;\n interactiveFeatureCollectionHeading: INodeProps;\n interactiveFeatureCollectionContainer: IModuleProps;\n interactiveFeatureCollectionDesktopContainer: INodeProps;\n interactiveFeatureCollectionDesktopItems: React.ReactNode[];\n interactiveFeatureCollectionMobileContainer: INodeProps;\n interactiveFeatureCollectionMobileItems: React.ReactNode[];\n singleSlideCarouselComponentProps: INodeProps;\n singleSlideCarouselItemContainer: INodeProps;\n}\n\n/**\n *\n * InteractiveFeatureCollection component.\n * @extends {React.PureComponent>}\n */\nexport class InteractiveFeatureCollection extends React.PureComponent> {\n private readonly _telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n private static _getFeatureItem(item: React.ReactNode, index: number, itemsCounter: number): React.ReactNode {\n const keyIndex = `interactive-feature-mosaic-item__${index}`;\n return (\n \n {React.cloneElement(item as React.ReactElement, { indexItem: index, itemCounter: itemsCounter, isMosaic: true })}\n \n );\n }\n\n public constructor(props: IInteractiveFeatureCollectionProps) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { title, className } = this.props.config;\n const interactiveItems = this.props.slots && this.props.slots.interactiveFeatureItems;\n const itemsFeatureCounter = interactiveItems && interactiveItems.length;\n const singleSlideCarouselComponentProps: IComponentNodeProps = {\n tag: SingleSlideCarousel,\n className: this.props.config.className ?? '',\n flipperPrevLabel: resources.flipperPrevious,\n flipperNextLabel: resources.flipperNext,\n parentId: this.props.id,\n telemetryContent: this._telemetryContent,\n vertical: false\n };\n const initItemsFeatureCounter = 0;\n const createHeading = title && (\n \n );\n const viewProps = {\n ...this.props,\n title: createHeading,\n interactiveFeatureCollectionHeading: {\n className: 'ms-interactive-feature-collection__heading'\n },\n interactiveFeatureCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-interactive-feature-collection', className)\n },\n interactiveFeatureCollectionDesktopContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-desktop'\n },\n interactiveFeatureCollectionMobileContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-mobile'\n },\n singleSlideCarouselComponentProps,\n singleSlideCarouselItemContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-interactive-feature-collection-carousel',\n role: 'listitem'\n },\n interactiveFeatureCollectionMobileItems: this.props.slots.interactiveFeatureItems,\n interactiveFeatureCollectionDesktopItems:\n itemsFeatureCounter > initItemsFeatureCounter &&\n interactiveItems.map((item: React.ReactNode, index: number) =>\n InteractiveFeatureCollection._getFeatureItem(item, index, itemsFeatureCounter)\n )\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * To handle text change.\n * @param event - To handle text change event.\n * @name - HandleTextChange\n * @public\n * @returns - The Text value.\n */\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.title!.text = event.target.value);\n}\n\nexport default InteractiveFeatureCollection;\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 { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { BusinessPartnerUsersDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n AccountStatementRequest,\n BusinessPartnerOperationDeliveryType,\n CustomerBalances\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getTelemetryObject, Heading, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { IAccountCustomerBalanceData } from './account-customer-balance.data';\nimport { HeadingTag, IAccountCustomerBalanceProps } from './account-customer-balance.props.autogenerated';\nimport {\n AccountLabels,\n AccountValues,\n ActionBar,\n AdminRequestStatementButton,\n AvailableCreditComponent,\n BackButton,\n BalanceOwedComponent,\n CreditExcessComponent,\n RequestStatementModal\n} from './components';\n\nexport interface IAccountCustomerBalanceViewProps extends IAccountCustomerBalanceProps {\n heading: string;\n homeButton: React.ReactNode;\n accountSectionHeading: React.ReactNode;\n accountLabels: React.ReactNode;\n accountValues: React.ReactNode;\n creditSummarySectionHeading: React.ReactNode;\n creditSummaryLabels?: React.ReactNode;\n creditSummaryValues?: React.ReactNode;\n actions: React.ReactNode;\n requestStatementModal: React.ReactNode;\n availableCredit?: React.ReactNode;\n balanceOwed?: React.ReactNode;\n creditExcess?: React.ReactNode;\n}\n\nexport interface IAccountCustomerBalanceState {\n isStatementRequestModalOpen: boolean;\n statementRequestFromDateString: string;\n statementRequestToDateString: string;\n isStatementRequestAdminDropdownOpen: boolean;\n statementRequestFullOrg: boolean;\n statementRequestMaxDateString?: string;\n}\n\n/**\n *\n * AccountCustomerBalance component.\n * @extends {React.PureComponent>}\n */\nclass AccountCustomerBalance extends React.PureComponent<\n IAccountCustomerBalanceProps,\n IAccountCustomerBalanceState\n> {\n private readonly telemetryContent?: ITelemetryContent;\n\n @computed get canSubmitStatementRequest(): boolean {\n return this.state.statementRequestFromDateString !== '' && this.state.statementRequestToDateString !== '';\n }\n\n constructor(props: IAccountCustomerBalanceProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.state = {\n isStatementRequestModalOpen: false,\n statementRequestFromDateString: '',\n statementRequestToDateString: '',\n isStatementRequestAdminDropdownOpen: false,\n statementRequestFullOrg: false,\n statementRequestMaxDateString: new Date().toISOString().split('T')[0]\n };\n }\n\n public render(): JSX.Element | null {\n const customer = get(this.props, 'data.customerInformation.result');\n const account: CustomerBalances = get(this.props, 'data.balance.result');\n if ([customer, account].includes(undefined)) {\n this.props.context.telemetry.error('Customer data is unavailable, module will not render');\n return null;\n }\n\n const { config, resources, context } = this.props;\n const { heading } = config;\n const {\n creditSummarySectionHeading,\n accountSectionHeading,\n backToShoppingText,\n customerSincePrefix,\n availableCreditLabel,\n balanceOwedLabel,\n creditExcessLabel,\n requestStatementButtonLabel,\n modalHeaderLabel,\n sendToEmailLabel,\n fromDateLabel,\n toDateLabel,\n submitRequestLabel,\n cancelLabel,\n myAccountStatementLabel,\n fullOrganizationLabel,\n modalAriaLabel\n } = resources;\n\n const {\n isStatementRequestModalOpen,\n statementRequestFromDateString,\n statementRequestToDateString,\n statementRequestMaxDateString\n } = this.state;\n\n const accountNumber = customer.AccountNumber;\n const createdOn = this._formatJoinDate(new Date(customer.CreatedDateTime));\n const name = `${customer.FirstName} ${customer.LastName}`;\n let customerCredit = 0;\n let customerAccountBalance = 0;\n let excess = 0;\n\n if (account.InvoiceAccountCreditLimit === 0) {\n customerCredit = account.CreditLimit - account.Balance;\n customerAccountBalance = account.Balance;\n excess = account.Balance - account.CreditLimit;\n } else {\n customerCredit = account.InvoiceAccountCreditLimit - account.InvoiceAccountBalance;\n customerAccountBalance = account.InvoiceAccountBalance;\n excess = account.InvoiceAccountBalance - account.InvoiceAccountCreditLimit;\n }\n\n const creditExcess = excess > 0 ? this._formatCurrency(excess) : null;\n const availableCredit = this._formatCurrency(customerCredit);\n const balanceOwed = this._formatCurrency(customerAccountBalance);\n const backLink = Msdyn365.getUrlSync('home', context.actionContext) || '';\n const emailAddress = customer.Email;\n const isB2BSite = isChannelTypeB2B(this.props.context.request);\n const isB2BAdmin = isB2BSite && customer.IsB2bAdmin;\n\n const actionBar = isB2BAdmin ? (\n \n ) : (\n isB2BSite && (\n \n )\n );\n\n const viewProps = {\n ...this.props,\n heading: ,\n accountSectionHeading: (\n \n ),\n accountLabels: (\n \n ),\n accountValues: ,\n creditSummarySectionHeading: (\n \n ),\n availableCredit: ,\n balanceOwed: ,\n creditExcess: ,\n homeButton: ,\n actions: actionBar,\n requestStatementModal: isB2BSite && (\n \n )\n };\n\n return this.props.renderView(viewProps);\n }\n\n private _formatCurrency(currency: number): string {\n const currencyCode = get(this.props, 'context.request.channel.Currency');\n const formatCurrency = get(this.props, 'context.cultureFormatter.formatCurrency');\n\n return `${formatCurrency(currency.toFixed(2), currencyCode)}`;\n }\n\n private _formatJoinDate(date: Date): string {\n const i14nDate = new Intl.DateTimeFormat(this.props.context.actionContext.requestContext.locale, {\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n });\n\n return i14nDate.format(date);\n }\n\n private readonly _showRequestStatementModal = (): void => {\n if (!this.state.isStatementRequestModalOpen) {\n this.setState({\n isStatementRequestModalOpen: true\n });\n }\n };\n\n private readonly _toggleModal = (): void => {\n this.setState({\n isStatementRequestModalOpen: false\n });\n };\n\n private readonly _toggleDropdown = (): void => {\n this.setState({\n isStatementRequestAdminDropdownOpen: !this.state.isStatementRequestAdminDropdownOpen\n });\n };\n\n private readonly _updateFromDate = (newFromDate: string) => {\n this.setState({\n statementRequestFromDateString: newFromDate\n });\n };\n\n private readonly _updateToDate = (newToDate: string) => {\n this.setState({\n statementRequestToDateString: newToDate\n });\n };\n\n private readonly _adminShowRequestStatementModal = (isFullOrg: boolean) => {\n this.setState({\n statementRequestFullOrg: isFullOrg,\n isStatementRequestAdminDropdownOpen: false\n });\n\n this._showRequestStatementModal();\n };\n\n private readonly _requestStatement = () => {\n const customer = this.props.data.customerInformation.result!;\n const B2BUserId = this.props.data.b2bUserInformation?.result?.B2BUserId || '';\n\n const statementRequest: AccountStatementRequest = {\n FromDate: new Date(this.state.statementRequestFromDateString),\n ToDate: new Date(this.state.statementRequestToDateString),\n IsForFullOrganization: this.state.statementRequestFullOrg,\n RequestedUserId: B2BUserId,\n RequestingUserEmail: customer.Email,\n DeliveryTypeValue: BusinessPartnerOperationDeliveryType.Email\n };\n\n const context = { callerContext: this.props.context.actionContext };\n\n BusinessPartnerUsersDataActions.requestAccountStatementAsync(context, B2BUserId, statementRequest);\n\n this.setState({\n isStatementRequestModalOpen: false\n });\n };\n}\n\nexport default AccountCustomerBalance;\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 { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IAccountWelcomeTileData } from './account-welcome-tile.data';\nimport { IAccountWelcomeTileProps } from './account-welcome-tile.props.autogenerated';\n\nexport interface IAccountWelcomeTileViewProps extends IAccountWelcomeTileProps {\n AccountWelcomeTile: IModuleProps;\n className: string;\n heading?: React.ReactNode;\n}\n\n/**\n *\n * AccountWelcome component.\n * @extends {React.PureComponent>}\n */\nclass AccountWelcomeTile extends React.PureComponent> {\n public render(): JSX.Element {\n const { config, data } = this.props;\n const { className } = config;\n\n const accountInfo = data.accountInformation.result;\n const heading = {\n ...config.heading,\n ...{\n text: `${config.heading.text ? config.heading.text : ''} ${\n accountInfo && accountInfo.FirstName ? accountInfo.FirstName : ''\n }`\n }\n };\n\n const viewProps = {\n ...this.props,\n className,\n AccountWelcomeTile: {\n moduleProps: this.props,\n className: classnames('ms-account-welcome-tile', config.className)\n },\n heading: heading && heading.text && (\n \n )\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\nexport default AccountWelcomeTile;\n","/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { ILinksData } from '../smwe-content-block.props.autogenerated';\r\n\r\nexport interface IContentCardLinks {\r\n links: ILinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n telemetryContent: ITelemetryContent;\r\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\r\n}\r\n\r\n/**\r\n *\r\n * ContentCardLinks component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class ContentCardLinks extends React.PureComponent {\r\n public render(): JSX.Element {\r\n const editableLinks = this._mapEditableLinks(this.props.links);\r\n return(\r\n
\r\n { editableLinks && editableLinks.length ?\r\n \r\n : null\r\n }\r\n
\r\n );\r\n }\r\n\r\n private _mapEditableLinks = (linkdata: ILinksData[]): Msdyn365.ILinksData[] | null => {\r\n if(!linkdata || linkdata.length === 0) {\r\n return null;\r\n }\r\n const editableLinks: Msdyn365.ILinksData[] = [];\r\n linkdata.forEach((link,index) => {\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\r\n const linkText = link.linkText ? link.linkText : '';\r\n payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\r\n const btnClass = index === 0 ? 'msc-cta__primary' : 'msc-cta__secondary';\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: btnClass,\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n // role: 'button',\r\n additionalProperties: attributes,\r\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\r\n };\r\n editableLinks.push(editableLink);\r\n });\r\n\r\n return editableLinks;\r\n };\r\n}\r\nexport default ContentCardLinks;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ISmweContentBlock 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 actionableRegion {\r\n imageAndLinks = 'imageAndLinks',\r\n linksOnly = 'linksOnly'\r\n}\r\n\r\nexport interface ISmweContentBlockConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n paragraph?: Msdyn365.RichText;\r\n image?: Msdyn365.IImageData;\r\n links?: ILinksData[];\r\n actionableRegion?: actionableRegion;\r\n imageLink?: Msdyn365.ILinkData;\r\n imageAriaLabel?: string;\r\n className?: string;\r\n colorTheme?: boolean;\r\n backgroundColor?: string;\r\n textColor?: 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 ariaLabel?: string;\r\n}\r\n\r\nexport interface ILinksData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface ISmweContentBlockProps extends Msdyn365.IModule {\r\n config: ISmweContentBlockConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport LinksComponent from './components/links';\r\nimport { actionableRegion as region, ISmweContentBlockProps } from './smwe-content-block.props.autogenerated';\r\n\r\nexport interface IContentBlockViewProps extends ISmweContentBlockProps<{}> {\r\n title?: React.ReactNode;\r\n text?: React.ReactNode;\r\n image?: React.ReactNode;\r\n links?: React.ReactNode;\r\n className?: string;\r\n contentBlockContainer: IModuleProps;\r\n imageContainer: INodeProps;\r\n detailsContainer: INodeProps;\r\n contentBlockAnchorTag?: INodeProps;\r\n imageLink?: string;\r\n imageAriaLabel?: string;\r\n}\r\n/**\r\n *\r\n * ContentCard component\r\n * @extends {React.PureComponent}\r\n */\r\n\r\nclass ContentBlock extends React.PureComponent> {\r\n private telemetryContent: ITelemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n public render(): JSX.Element | null {\r\n const {\r\n heading,\r\n paragraph,\r\n image,\r\n links,\r\n className,\r\n imageAriaLabel\r\n } = this.props.config;\r\n const contentBlockTitle = heading && (\r\n \r\n );\r\n const imageProps = {\r\n gridSettings: this.props.context.request.gridSettings || {},\r\n imageSettings: image && image.imageSettings,\r\n };\r\n const contentBlockLinks = links && links.length > 0 && (\r\n \r\n );\r\n const contentBlockText = paragraph && (\r\n \r\n );\r\n const contentBlockImage = image && (\r\n \r\n );\r\n\r\n if (\r\n !contentBlockTitle &&\r\n !contentBlockText &&\r\n !contentBlockImage &&\r\n !contentBlockLinks\r\n ) {\r\n this.props.context.telemetry.error(\r\n 'Content block content is empty, module wont render.'\r\n );\r\n return null;\r\n }\r\n\r\n const contentBlockviewProps = {\r\n ...this.props,\r\n title: contentBlockTitle,\r\n text: contentBlockText,\r\n image: contentBlockImage,\r\n links: contentBlockLinks,\r\n moduleClass: this.props.config.className,\r\n contentBlockContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-content-block', className),\r\n },\r\n imageContainer: { className: 'ms-content-block__image' },\r\n detailsContainer: { className: 'ms-content-block__details' },\r\n contentBlockAnchorTag: {\r\n tag: 'a',\r\n className: 'ms-content-block__link',\r\n role: 'link',\r\n },\r\n imageLink: this._getImageLink(),\r\n imageAriaLabel\r\n };\r\n\r\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\r\n }\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\r\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.paragraph = event.target.value;\r\n /* Handle link text change*/\r\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\r\n if (this.props.config.links && this.props.config.links[linkIndex]) {\r\n this.props.config.links[linkIndex].linkText = event.target.value;\r\n }\r\n };\r\n private _getImageLink(): string | null {\r\n const { imageLink, links, actionableRegion } = this.props.config;\r\n if (actionableRegion === region.imageAndLinks) {\r\n if (imageLink && imageLink.destinationUrl) {\r\n return imageLink.destinationUrl;\r\n } else if (links && links.length && links[0].linkUrl) {\r\n return links[0].linkUrl.destinationUrl;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport default ContentBlock;\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 {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createAccordionStateInput } from '../..';\nimport { IAccordionData } from './accordion.data';\nimport { IAccordionProps } from './accordion.props.autogenerated';\n\n/**\n *\n * Accordion component.\n * @extends {React.PureComponent>}\n */\n\nexport interface ICallToActionProps {\n link: INodeProps[];\n}\n\n/**\n * Added interface for state management.\n */\nexport interface IAccordianState {\n isDisabled: boolean;\n}\n\nexport interface IAccordionViewProps extends IAccordionProps<{}> {\n heading?: React.ReactNode;\n AccordionContainer: IModuleProps;\n HeaderSection: INodeProps;\n HeadingWrapper: INodeProps;\n accordianButtonsContainer: INodeProps;\n accordionButtons: React.ReactNode;\n accordionItemContainer: INodeProps;\n accordionItems: React.ReactNode;\n}\n\n/**\n *\n * Accordion component.\n * @extends {React.Component>}\n */\n@observer\nclass Accordion extends React.PureComponent, IAccordianState> {\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private readonly expandAllButtonRef: React.RefObject = React.createRef();\n\n private readonly collapseAllButtonRef: React.RefObject = React.createRef();\n\n constructor(props: IAccordionProps) {\n super(props);\n this._onExpandAll = this._onExpandAll.bind(this);\n this._onCollapseAll = this._onCollapseAll.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.state = { isDisabled: false };\n }\n\n public render(): JSX.Element {\n const { slots } = this.props;\n const { heading, className } = this.props.config;\n const headingComponent = heading && heading.text && (\n \n );\n\n const accordionViewProps = {\n ...this.props,\n AccordionContainer: {\n moduleProps: this.props,\n className: classnames('ms-accordion', className)\n },\n HeaderSection: { className: 'ms-accordion-header-section' },\n HeadingWrapper: { className: 'ms-accordion-header-section-container' },\n heading: headingComponent,\n config: this.props && this.props.config,\n accordianButtonsContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-accordion-header-section-toggle-button-container'\n },\n accordionButtons: this._renderAccordionButton(),\n accordionItemContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-accordion-item-section'\n },\n accordionItems:\n slots &&\n slots.accordionItems &&\n slots.accordionItems.length > 0 &&\n slots.accordionItems.map((item: React.ReactNode, index: number) => this._getAccordionItem(item, index))\n };\n return this.props.renderView(accordionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n private _renderAccordionButton(): React.ReactNode | null {\n const { config, resources } = this.props;\n const { heading } = config;\n this.payLoad.contentAction.etext = TelemetryConstant.ExpandAll;\n const attributeExpandAll = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.CollapseAll;\n const attributeCollapseAll = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\n if (!config.showToggleAll) {\n this.props.context.telemetry.error('Accordion button content is empty, module wont render');\n return null;\n }\n return (\n <>\n \n {resources.expandAllText}\n \n  \n {resources.toggleAllSeparator}\n  \n \n {resources.collapseAllText}\n \n \n );\n }\n\n private _onExpandAll(): void {\n const accordionState = { isAllExpanded: true };\n this.props.context.actionContext.update(createAccordionStateInput(accordionState), accordionState);\n if (accordionState.isAllExpanded) {\n this.setState({\n isDisabled: true\n });\n setTimeout(() => {\n this.collapseAllButtonRef.current?.focus();\n }, 50);\n }\n }\n\n private _onCollapseAll(): void {\n const accordionState = { isAllExpanded: false };\n this.props.context.actionContext.update(createAccordionStateInput(accordionState), accordionState);\n if (!accordionState.isAllExpanded) {\n this.setState({\n isDisabled: false\n });\n setTimeout(() => {\n this.expandAllButtonRef.current?.focus();\n }, 50);\n }\n }\n\n private _getAccordionItem(item: React.ReactNode, index: number): React.ReactNode {\n return (\n \n {React.cloneElement(item as React.ReactElement, { interactionStyle: this.props.config.interactionStyle })}\n \n );\n }\n}\n\nexport default Accordion;\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 { IAccountWelcomeTileViewProps } from './account-welcome-tile';\n\nconst AccountWelcomeTileView: React.FC = props => {\n const { AccountWelcomeTile, heading } = props;\n\n return {heading};\n};\n\nexport default AccountWelcomeTileView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAccountCustomerBalanceViewProps } from './account-customer-balance';\n\nexport default (props: IAccountCustomerBalanceViewProps) => {\n const {\n heading,\n accountSectionHeading,\n creditSummarySectionHeading,\n accountLabels,\n accountValues,\n creditSummaryLabels,\n creditSummaryValues,\n homeButton,\n actions,\n requestStatementModal,\n availableCredit,\n balanceOwed,\n creditExcess\n } = props;\n\n return (\n \n {heading}\n {requestStatementModal}\n {actions}\n {accountSectionHeading}\n
\n {accountLabels}\n {accountValues}\n
\n {creditSummarySectionHeading}\n
\n {creditSummaryLabels}\n {creditSummaryValues}\n {availableCredit}\n {balanceOwed}\n {creditExcess}\n
\n {homeButton}\n
\n );\n};\n"],"sourceRoot":""}