{"version":3,"sources":["webpack:///src/modules/checkout-delivery-options/components/checkout-delivery-options.description.tsx?8620","webpack:///src/modules/checkout-delivery-options/components/checkout-delivery-options.error-message.tsx?8f25","webpack:///src/modules/checkout-delivery-options/components/checkout-delivery-options.error-title.tsx?e220","webpack:///src/modules/checkout-delivery-options/components/checkout-delivery-options.radio-button.tsx?f1bb","webpack:///src/modules/checkout-delivery-options/checkout-delivery-options.tsx?d83e","webpack:///./src/modules/search-result-container/actions/index.ts?c90b","webpack:///./src/modules/search-result-container/components/modal.tsx?aff7","webpack:///./src/modules/ccbcuheader/components/logo.tsx?803e","webpack:///./src/modules/ccbcuheader/components/nav-icon.tsx?1bcc","webpack:///./src/modules/ccbcuheader/components/bot.tsx?9dbe","webpack:///./src/modules/ccbcuheader/ccbcuheader.tsx?b4a4","webpack:///src/modules/product-comparison/actions/index.ts?f094","webpack:///src/modules/product-comparison/base/product-specification.tsx?6f75","webpack:///src/modules/product-comparison/base/remove-from-comparison-button.tsx?caa4","webpack:///./src/modules/ccbcucheckout/components/postStudentDetails.tsx?71c8","webpack:///src/modules/product-comparison-preview/product-comparison-preview.tsx?b807","webpack:///./src/modules/search-result-container/components/refine-submenu.tsx?9432","webpack:///src/order-summary-lineitem.tsx?86d9","webpack:///../../src/index.ts?0e3e","webpack:///./src/modules/ccbcucheckout/components/getStudentDetails.tsx?026f","webpack:///./src/modules/search-result-container/components/choice-summary.tsx?2628","webpack:///../../../src/module-state-manager/with-module-state.tsx?61ca","webpack:///src/modules/product-comparison-preview/product-comparison-preview.view.tsx?6cfd","webpack:///./src/modules/search-result-container/components/separator.tsx?a59a","webpack:///../../src/checkout-state.ts?acd8","webpack:///./src/modules/search-result-container/components/product-search-result-items.tsx?faa8","webpack:///./src/modules/search-result-container/components/link.tsx?0e8b","webpack:///./src/modules/search-result-container/components/range-refine-item.tsx?df59","webpack:///./src/modules/search-result-container/components/error-message.tsx?90e6","webpack:///src/modules/checkout-loyalty/checkout-loyalty.view.tsx?876d","webpack:///src/common/error.tsx?f9f6","webpack:///./src/modules/search-result-container/components/feature-search-result-item.tsx?cad2","webpack:///./src/modules/search-result-container/search-result-container.props.autogenerated.ts?389d","webpack:///./src/modules/search-result-container/search-result-container.tsx?bdd8","webpack:///src/modules/product-comparison/product-comparison.view.tsx?af5e","webpack:///../../../src/module-state-manager/module-state.ts?7579","webpack:///./src/modules/search-result-container/components/utilities.ts?e434","webpack:///src/modules/product-comparison/product-comparison.tsx?5d0f","webpack:///src/modules/product-comparison/index.ts?09f2","webpack:///./src/modules/search-result-container/components/refine-item.tsx?fcc9","webpack:///../../../src/module-state-manager/index.ts?8e3a","webpack:///./src/modules/ccbcucheckout/components/alert.tsx?90c3","webpack:///./src/modules/ccbcucheckout/components/get-line-items.tsx?41c9","webpack:///./src/modules/ccbcucheckout/components/get-order-summary.tsx?099b","webpack:///./src/modules/ccbcucheckout/components/guided-card.tsx?2b4f","webpack:///./src/modules/ccbcucheckout/components/guided-form.tsx?3080","webpack:///./src/modules/ccbcucheckout/components/place-order-button.tsx?8ddc","webpack:///./src/modules/ccbcucheckout/methods/ccbcucheckout.ts?4595","webpack:///./src/modules/ccbcucheckout/methods/empty-active-cart.ts?183b","webpack:///./src/modules/ccbcucheckout/methods/place-order.ts?fd7d","webpack:///./src/modules/ccbcucheckout/components/get-time-slots.tsx?2998","webpack:///./src/modules/ccbcucheckout/ccbcucheckout.tsx?20f6","webpack:///./src/modules/ccbcucheckout/ccbcucheckout.view.tsx?bab3","webpack:///./src/modules/search-result-container/search-result-container.view.tsx?9827","webpack:///src/modules/checkout-loyalty/components/checkout-loyalty-input.tsx?d04f","webpack:///src/modules/checkout-loyalty/components/checkout-loyalty-label.tsx?3110","webpack:///src/modules/checkout-loyalty/components/checkout-loyalty-text.tsx?0080","webpack:///src/modules/checkout-loyalty/checkout-loyalty.tsx?c94a","webpack:///src/modules/checkout-delivery-options/checkout-delivery-options.view.tsx?d64d","webpack:///./src/modules/search-result-container/components/title.tsx?e884","webpack:///./src/modules/search-result-container/components/index.ts?bc46","webpack:///./src/modules/ccbcuheader/ccbcuheader.view.tsx?cfa9","webpack:///../../src/checkout-state-data-action.ts?8344"],"names":["CheckoutDeliveryOptionsDescription","_ref","description","React","className","CheckoutDeliveryOptionsErrorMessage","message","CheckoutDeliveryOptionsErrorTitle","title","CheckoutDeliveryOptionsRadioButton","isChecked","value","ariaSetSize","ariaPosInSet","ariaLabel","telemetryContent","onChange","payLoad","getPayloadObject","TelemetryConstant","DeliveryOptions","attributes","getTelemetryAttributes","Object","assign","checked","type","contentAction","etext","name","CheckoutDeliveryOptions","constructor","props","super","selectedItemId","deliveryOptions","isLoading","retailMultiplePickUpOptionEnabled","init","async","this","moduleState","onEdit","isSelectDefaultOptionEnabled","undefined","onCancel","onSubmit","status","config","useDefaultDeliveryOption","canShip","cartDeliveryMode","getSavedDeliveryOption","loadDeliveryOptions","_this$props$data$chec","data","checkout","result","checkoutCart","hasInvoiceLine","getCartLinesForShipping","length","isDeliveryModeExists","deliveryMode","find","deliveryOption","Code","getDeliveryOptionSelected","selectedItem","context","telemetry","error","id","typeName","priceFree","resources","price","get","DeliveryOption","DescriptionComponent","Description","PriceComponent","CustomerContextualPrice","freePriceText","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","tag","role","ErrorTitleComponent","ErrorMessageComponent","errorMessage","getDeliveryOptionList","count","map","index","code","radioButton","RadioButtonComponent","onDeliveryOptionChange","getSaveButton","saveBtnLabel","Button","color","disabled","onClick","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","setHasError","onUpdating","clearError","_this$props$data$chec2","information","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","_this$props$data$chec3","updateCartDeliverySpecification","savedDeliveryOption","_this$props$data$chec4","onReady","cartLinesForShipping","DeliveryMode","deliveryModeId","trim","checkoutState","updateCartDeliverySpecificationInput","shippingAddress","channelDeliveryOptionConfig","onPending","then","response","genericErrorMessage","setIsCancellable","catch","request","pickupDeliveryModeCode","channel","PickupDeliveryModeCode","emailDeliveryModeCode","EmailDeliveryModeCode","cart","CartLines","filter","cartLine","_this$channelDelivery","_this$channelDelivery2","PickupDeliveryModeCodes","getDeliveryOptions","_this$props$data$chec5","cartState","cartId","Id","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","deliveryOptionFilter","filterDeliveryModeOption","FilterDeliveryModeOption","None","FilterOutNonCarrierDeliveryMode","getDeliveryOptionsAsync","callerContext","actionContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","_unused","deliveryOptionsNotFound","_this$props$data$chec6","_this$props$data$chec7","updateHasCartDeliveryMode","newHasCartDeliveryMode","isPaymentVerificationRedirection","_this$props$data$chec8","getStoredDeliveryOptions","_this$props$data$chec9","_this$props$data$chec10","_this$props$data$chec11","_this$props$data$chec12","_this$props$data$chec13","_this$props$data$chec14","isExpressCheckoutApplied","isExpressPaymentAppliedInCartPage","event","currentTarget","getTelemetryObject","telemetryPageName","friendlyName","_this$props$data$cart","_this$props$data$cart2","_this$props$data$cart3","_this$props$data$cart4","_this$props$data$cart5","_this$props$data$cart6","_this$props$data$cart7","properties","ExtensionProperties","property","Key","Value","StringValue","JSON","parse","_this$expressPaymentD","_this$expressPaymentD2","expressPaymentDetailsFromCartPage","isExpressCheckoutAppliedInCartPage","_this$props$data$chec19","when","isDataReady","reaction","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","_this$props$data$chec18","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec20","checkoutError","errorLocation","ErrorLocation","shouldComponentUpdate","nextProps","nextState","state","render","_this$props$data$chan","_this$props$data$feat","_this$props$data$feat2","_this$props$data$feat3","featureState","feature","Name","IsEnabled","isReady","isUpdating","hasError","isError","isShowList","isShowSelected","deliveryOptionAriaLabel","viewProps","_objectSpread","deliveryOptionsData","alert","ErrorComponent","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","moduleProps","classname","DeliveryOptionsList","list","deliveryOptionSelected","waiting","Waiting","saveButton","editButton","cancelButton","renderView","__decorate","observable","computed","action","withModuleState","observer","ModalToggle","text","innerRef","createElement","ref","SearchResultModal","modal","modalNode","modalHeader","modalHeaderNode","modalFooter","modalFooterNode","modalBody","ModalBody","Modal","autoFocus","applicationNode","returnFocusRef","returnRef","isOpen","toggle","onModalToggle","zIndex","ModalHeader","modalTitle","ModalFooter","modalCloseButtonText","Logo","_renderLogo","link","linkUrl","destinationUrl","href","target","openInNewTab","rel","_renderImage","defaultImageSettings","viewports","xs","q","w","h","lg","lazyload","Msdyn365","image","gridSettings","imageSettings","loadFailureBehavior","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","isExpanded","targetId","ClickButton","styled","div","PopupCard","Overlay","Bots","Component","getStudentValue","localStorage","getItem","e","isStudentSelected","showPopUp","selectedMediaIcon","selectedStudent","selectedStudentName","event_ID","postStudentObj","selectStudent","val","event_guid","studValid","studentValid","setState","handleShare","socialMedia","studName","pageUrl","setItem","document","isStudentFeature","studentID","NAME","updateStudentDetailsToCDS","replace","homePageUrl","split","event_Name","ConfigValues","eventTitle","mailBody","url","navigator","clipboard","writeText","left","screen","width","params","height","window","open","openWindow","componentDidMount","obj","channelID","channelId","arr","RETAIL_CHANNEL_ID","push","stringify","requestOptions","method","headers","body","toString","updateStu","fetch","studApiendpoint","studAPiKey","json","componentDidUpdate","_","prevState","students","studProd","isVisible","toggleBot","botID","studentfeature","timeslotfeature","isSlotFeature","handleShareIcons","studentIDlocalStorage","studentNamelocalstorage","urlParams","URLSearchParams","URL","key","includes","querystring","splitted","studValuesplit","join","GetStudentDetailsComponent","placeOrderText","studentsArr","canPlaceOrder","PostStudentDetailsComponent","EVENT_GUID","sendStudentPostDetails","displayBtn","newObj","handleCancel","cursor","viewBox","version","xmlns","d","rx","fill","fillOpacity","stroke","strokeLinecap","strokeWidth","clipPath","fillRule","clipRule","style","display","Header","toggleBotDisplay","botState","isBotVisible","popOverRef","_toggleNavbar","bind","_togglePopover","_keydown","mobileMenuCollapsed","signinPopoverOpen","addEventListener","componentWillUnmount","removeEventListener","_this$props$context$a","slots","accountInformation","user","cartLabel","cartQtyLabel","logoLink","logoImage","headerClassName","classnames","srcVideoURL","app","customer","logo","wishListIconDesktop","WishListIconComponent","wishlistTooltipText","wishListIconMobile","cartIcon","CartIconComponent","navIcon","menuBar","search","HeaderTag","HeaderContainer","HeaderTopBarContainer","Divider","MobileMenuContainer","wrapClassName","MobileMenuHeader","MobileMenuBodyContainer","MobileMenuLinksContainer","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","FirstName","Popover","placement","signInLink","_getSigninButton","signOutLink","_getSignOutButton","accountInfoDropdownButton","_getAccountInfoDropdownButton","accountLinks","_getAccountLinks","backToShopping","backToShoppingCustomURL","bots","GetBotComponent","srcURL","isStudentFeatureRequired","isSlotSelectionFeatureRequired","requestContext","ChannelNaturalId","studentAPIKey","studentAPIEndPoint","mainProps","signInLinkText","signInUrl","signInLinkAriaText","signOutLinkText","signOutUrl","signOutLinkAriaText","myAccountLinks","cta","linkText","keyCode","KeyCodes","Escape","SpecificationDataTypeValues","ProductSpecification","PureComponent","product","ObjectExtensions","isNullOrUndefined","CurrencyValue","CurrencyCode","_product$DateTimeOffs","isFunction","DateTimeOffsetValue","toUTCString","IntegerValue","FloatValue","TextValue","dangerouslySetInnerHTML","getRichTextHtml","_specification$DataTy","specification","DataTypeValue","none","currency","_renderCurrencyCell","dateTime","_renderDateTimeCell","decimal","_renderDecimalCell","integer","_renderIntegerCell","_renderTextCell","boolean","_renderTrueFalseCell","video","warning","BooleanValue","productComparisonProductItemSpecificationTrue","productComparisonProductItemSpecificationFalse","RemoveFromComparisonButtonFunctionalComponent","useCallback","onClickHandler","itemId","productComparisonRemoveProductFromListAriaLabel","RemoveFromComparisonButtonComponent","PostStudentDetails","EMAIL","displayNameError","displayEmailError","sendPostData","btnDisplay","btnText","validateEmail","postObj","mail","test","validateName","marginTop","placeholder","Fragment","ProductComparisonPreview","_renderGreyPlaceHolders","productData","counts","greyPlaceHoldersCount","displayGreyPlaceHolders","elements","_removeProductFromList","ProductComparisonState","instance","removeItemById","previousState","_previousState$produc","productsData","item","_handleCollapseClick","_previousState$isExpa","_hasUserInteractedWithComparison","_clearAllProductsFromTheComparison","clearAll","_instanceId","Random","Guid","generateGuid","_displayedInstanceId","_loadProducts","listModifiedEvent","subscribe","instanceId","handler","unsubscribe","_this$state$productsD","_this$props$data$prod","collapseButton","_renderCollapseButton","isMainContentReady","hasUserInteractedWithComparison","_getProdutComparisonDataByCatalogId","ArrayExtensions","hasElements","productsLimit","_getProductsLimit","subheaderText","productComparisonPreviewHeaderTextWithLimit","handleCollapseClick","productsMainInfo","_getProductsMainInfo","previewGreyPlaceHolders","productComparisonLink","getUrlSync","clearAllProductsFromTheComparison","removeProductFromList","goToComparisonButton","_renderGoToComparisonButton","clearAllButton","_renderClearAllButton","_productData$filter","catalogId","getCatalogId","items","input","GetProductsInPreviewProductComparisonInput","getProductsInPreviewProductComparisonAction","productDataByCatalogId","_getGreyPlaceHoldersCount","limit","placeHolder","products","productImageContainerClassName","tableRowClassName","productImageClassName","productNameClassName","productNameLink","msdyn365Commerce","isBrowser","_product$Dimensions","productUrl","getProductUrlSync","fullUrl","location","searchParams","set","Dimensions","dimension","_dimension$DimensionV","dimensionValue","DimensionValue","StringExtensions","isNullOrWhitespace","dimensionName","convertProductDimensionTypeToDimensionTypes","DimensionTypeValue","removeFromComparisonButton","productImage","_renderProductImage","productLink","viewport","isMobile","variant","VariantType","Browser","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_product$PrimaryImage","_getFallbackImageUrl","xl","Image","src","PrimaryImageUrl","fallBackSrc","getFallbackImageUrl","ItemId","apiSettings","_this$state$isExpande","shouldBeExpanded","headerContainerClassName","mainContainerClassName","collapseClassName","collapseButtonClassName","tabIndex","footerClassName","productComparisonCompareProductsButtonText","productComparisonClearAllProductsButtonText","containerClassName","headerLabelClassName","tableClassName","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpandedOnInitialLoad","expanded","productRefinerHierarchy","refineItemCommonProps","SourceValue","ProductRefinerSource","Rating","hideRating","KeyName","Collapse","timeout","_renderChildItems","isRangeType","_renderRange","_renderSingleMultiSelect","isDisabled","selectedRefinerValues","productCountAriaLabel","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","RefinerTypeValue","RefinerType","SingleSelect","refinerValuesList","Values","listItems","child","RecordId","selectedRefinementCriterion","findMatchingRefinementCriterion","RefineItem","parentProductRefinerHierarchy","productRefinerValue","selectedValue","RefinerRecordId","onToggle","urlBuilder","moduleId","moduleTypeName","isMobileView","_getRangeType","DisplayTemplateValue","DisplayTemplate","Range","Slider","SliderWithBars","minValueSliderThumbAriaLabel","maxValueSliderThumbAriaLabel","rangeType","LeftValueBoundString","RightValueBoundString","RangeRefineItem","sliderKey","itemToggleNotification","onUpdateRefiners","OrderSummaryLine","label","toBeCalculatedText","freeText","cssLabel","_buildOrderSummarySection","arguments","_computedLoyaltyAmount","loyaltyAmount","getDeliveryMode","_channelDeliveryOptio","featureSate","pickupDeliveryMode","dM","OrderSummary","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmountWithoutTax","TotalAmount","OtherChargeAmount","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","channelConfiguration","isTaxIncludedInPrice","isShowTaxBreakup","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","some","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","reactNodes","subtotal","subTotalLabel","tax","taxLabel","orderTotal","orderTotalLabel","otherCharge","otherChargeLabel","shipping","shippingLabel","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","reduce","giftCardCounter","giftCard","Balance","amount","Math","min","totalAmountAfterGiftCard","loyalty","loyaltyLabel","giftcardLabel","totalDiscounts","totalDiscountsLabel","StudentDetailsClass","ValidateStudent","isStudValid","itemID","selectedIndex","compare","a","b","bandA","band","toUpperCase","bandB","comparison","_studentsArr$students","studentsCollection","forEach","ID","ReactAutocomplete","inputProps","shouldItemRender","_item$label","toLowerCase","indexOf","getItemValue","renderItem","highlighted","backgroundColor","onSelect","_value","console","log","ChoiceSummary","closeButtonGlyph","_onClick","preventDefault","stopPropagation","getAttribute","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","_this$props$context","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","choice","parent","hierarchy","isMatchingRefinementCriterion","_getKeyForRefinerValue","clearAllText","classNames","choiceAriaLabel","closeAriaLabel","selectedRefinersMap","clearAllAttributes","attribute","LeftValueBoundLocalizedString","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","_formatPrice","UnitText","filterValue","r","trace","cultureFormatter","formatCurrency","Number","selected","WrappedComponent","_super","ModuleState","_this","call","initializeState","_b","states","getModuleStates","updateModuleStates","__assign","_a","hasInitialized","isRequired","isCancellable","isSubmitContainer","childIds","getModuleStateManager","validate","isPending","isSkipped","isCancelAllowed","shouldSubmitContainer","hasModuleState","setIsRequired","update","setIsSubmitContainer","onSkip","onDisable","getModule","getModuleByTypeName","getModuleStateManagerByTypeName","options","moduleStates","values","_moduleState","modules","_validateLeaf","source","module","isMatch","_validateContainer","allMatched","skipSkippableItem","shouldEnableSinglePaymentAuthorizationCheckout","childId","_isPaymentSectionContainer","enableControl","__extends","prototype","ProductComparisonPreviewViewFunctionalComponent","_props$isExpanded","_props$productsMainIn","_props$productsMainIn2","Module","Node","productComparisonPreviewHeaderText","info","Separator","separator","CheckoutState","_giftCards","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_isTermsAndConditionAccepted","_customerAccountAmount","defineProperty","_tokenizedPaymentCard","_tenderLine","_billingAddress","_shippingAddress","_cardPrefix","_loyaltyCardNumber","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","updateShippingAddress","newShippingAddress","updateBillingAddress","newBillingAddress","updateCardPrefix","newCardPrefix","removeGiftCard","giftCardNumber","removeGiftCardExtend","addGiftCard","__spreadArrays","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","newAmount","updateGuestCheckoutEmail","newGuestCheckoutEmail","updateTermsAndConditionsAcceptance","newIsTermsAndConditionAccepted","updateCustomerAccountAmount","getInventoryLabel","AttributeValues","inventoryAttribute","ProductSearchResultItems","moduleType","allowBackNavigation","quickviewSlot","productComparisonButton","isPriceMinMaxEnabled","productsDimensionAvailabilities","storeSelectorStateManager","orgUnitNumber","setAddToCartLoader","productQuantity","setProductQuantyty","priceResources","priceRangeSeparator","quantity","orgUnit","searchOrgUnitLocationsAsync","OrgUnitNumber","orgUnitLocation","PostalAddressId","OrgUnitName","Address","Street","StreetNumber","City","DistrictName","BuildingCompliment","Postbox","Country","Zip","County","CountyName","State","StateName","getOrgUnitLocation","addProductToCart","substatus","pickupInStoreOnClick","ProductComponent","originalPriceText","currentPriceText","ratingAriaLabel","allowBack","quickViewButton","inventoryLabel","swatchItemAriaLabel","dimensionAvailabilities","dimensionAvailability","masterProductId","MasterProductId","findInStoreLinkText","Link","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_ref2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","Map","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","currencyCode","ariaValueText","_onRangeUpdate","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","initialMin","initialMax","String","minValue","maxValue","labels","sliderKeyString","sliderThumbs","validationErrorMin","validationErrorMax","touchedMin","touchedMax","previousProps","updateSliderProps","_renderInputFields","_renderSlider","_ref3","_this$props$selectedR5","_this$props$selectedR6","_ref4","_this$props$selectedR7","_this$props$selectedR8","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","minLabel","onFocus","onBlur","maxLabel","placeholderTextMax","ariaAttributes","inForm","max","step","orientation","showLabels","showTooltip","onChangeEnd","debounce","handleTooltipText","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","maxNum","isNaN","validationErrorNaN","_focus","_validateRange","isSelecting","rangeStart","rangeEnd","selectedMaxValue","maxTouched","minNum","setTimeout","current","focus","touched","validationError","validationErrorRange","inputAsNum","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","element","getElementById","tooltip","ErrorMessage","AddCheckoutLoyalty","heading","cardNumber","drawer","rewardPoints","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","loyaltyAmountInput","loyaltyAmountApplyButton","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","rewardPoint","checkoutLoyaltyRewardPoint","availablePointsText","activePoints","expiringPointsText","expiringPoints","ShowCheckoutLoyalty","coveredAmountText","CheckoutLoyaltyView","checkoutLoyalty","showLoyalty","addLoyalty","isShowLoyalty","isShowAddLoyalty","FeatureSearchResultItem","recommendation","productName","productRecordId","getProductPageUrlSync","fallbackImage","featureSimilarDescriptionTitle","featureSimilarLooksTitle","onTelemetryClick","imageUrl","altText","img","imageProps","renderProductPlacementImage","expandRefinersCount","SearchResultContainer","SearchResultContainer_1","_props$context$reques","_props$context$reques2","sortByDropdownOptions","sortOptions","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","urlTokens","pageType","_viewport","expandrefinerCount","defaultPageNumber","isListPageStateUpdated","_updateListPageState","listPageState","_this$props$context$r","_this$props$config$it","_this$props$config$it2","_this$props$context$r2","querySorting","query","sorting","decodeURIComponent","currentPageNumber","skip","itemsPerPage","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","activeFilters","hydrateRefinersFromUrl","productId","featureProduct","_getProductsDimensionsAvailabilities","_this$props$data$list","_this$props$data$list2","productsList","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","_getActivePrice","_this$props$data$list3","_this$props$data$list4","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSearchResultModal","modalIsOpen","_modalToggleRef","_toggleModal","_getCollectionTitle","collectionTitle","_this$props$context$r3","category","getFriendlyName","locale","NameTranslations","productCountNumber","productCountText","format","numberOfProducts","oneProduct","TitleContainer","titlePrefix","Title","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","labelText","sortByDropdownLabel","dropdownId","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","getCurrentUrl","skipCount","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","refiners","refiner","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","_this$props$data$prod2","inventoryAwareSortableAttributeId","_getChoiceSummary","_this$props$data$refi","_this$props$data$prod3","selectedRefiners","n","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$slots$qui","_this$props$data$prod4","shouldAllowBackNavigation","breadCrumbType","breadcrumbType","shouldAllowBack","quickview","isPriceMinMaxFeatureState","orgUnitNumberCustom","addToCartLoader","notification","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","option","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","validValues","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","_this$props$data$list6","updatedRefinementCriteria","getUpdatedRefinementCriteria","newRefinementCriteria","currentRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","selectedCriterion","isClearAll","refinerCount","all","one","two","three","four","paginationPreviousText","paginationNextText","device","Type","_updateViewport","productPrices","pending","validationErrorNotNumber","validationErrorNotRange","nameTranslations","_nameTranslation","nameTranslation","Language","Text","_this$props$context$a3","_this$props$context$a4","MsDyn365","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r4","_this$props$context$r5","_this$props$context$r6","_this$props","_this$props$config","_this$props$context$a2","newListPageState","GetFullProductsByCollectionInput","Paging","Top","Skip","Sorting","recordId","ProductId","Recommendation","includeAttributes","productResults","getCollectionProducts","enableAffiliationBasedPricing","isAuthenticated","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r7","_this$props$context$r8","refinerInput","RefinersByCollectionInput","getCollectionRefinersAction","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","DimensionTypes","_listPageState$result","_listPageState$result2","_this$props$context$r9","_this$props$data$list7","_this$props$data$list8","productCollection","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","searchResultModal","FeatureSearchContainer","similarLookProduct","_getViewport","Viewport","renderDynamicHeaderCells","headerName","productMainInfo","tableHeaderProps","tabindex","cellContainerProps","renderDynamicCells","hoveringCellItemId","tableCellProps","node","ProductComparisonViewFunctionalComponent","_props$productsMainIn5","_props$dimensionsProp","_props$specifications","_props$productsMainIn8","_props$productsMainIn9","ProductComparison","isEmptyContent","loading","emptyComparison","actionBarContainerProps","tableReference","tableHeaderClassName","tableHeaderReference","shouldShowPreviousClicker","previousClicker","isFromCurrentCatalog","actionsClassName","productRowClassName","productPrice","quickView","goToProductDetailsButton","shouldShowNextClicker","nextClicker","tableBodyClassName","onScroll","handleScroll","tableBodyReference","rating","_props$productsMainIn3","_props$productsMainIn4","productRating","tableRowContentClassName","productComparisonProductItemRating","tableRowContentInformationClassName","_props$productsMainIn6","_props$productsMainIn7","productDescription","productComparisonProductItemDescription","dimensionsProps","dimensionProps","dimensionsRowClassName","dimensionClassName","productDimensionValues","specificationsProps","specificationProps","isNullOrEmpty","specificationsRowClassName","specificationClassName","specificationValues","productComparisonProductItemSku","productInfo","ModuleStatesCacheKey","getCacheKey","getCacheObjectType","dataCacheType","ctx","cacheKey","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","dataTypeValue","AttributeDataType","Currency","Decimal","Integer","refinementCriteria","refinementCriterion","RefinerSourceValue","toggledItemFound","next","TrueFalse","matchingIndex","findIndex","criterion","splice","SelectionType","ProductClickerDirections","_clearAllProductsFromComparison","_configureBoxShadowOnScroll","_this$_tableReference","_tableReference","comparisonProductCardHeader","getElementsByClassName","Array","from","documentElement","scrollTop","classList","add","tableHeaderLockedClassName","remove","_handleScroll","_this$_tableHeaderRef","_this$_tableHeaderRef2","_tableHeaderReference","scrollTo","top","scrollLeft","_checkClickersState","_handleScrollClick","direction","_this$_tableBodyRefer","_this$_tableCellRefer","_this$_tableCellRefer2","_this$_tableCellRefer3","_document$body$parent","tableBody","_tableBodyReference","defaultCellWidth","_getCellWidth","cellWidth","_tableCellReference","clientWidth","newLeftPosition","scrollPosition","ceil","minLeftPosition","maxScroll","scrollWidth","parentElement","_handlePreviousClick","_document$body$parent2","right","_handleNextClick","_document$body$parent3","_this$_tableBodyRefer2","_this$_tableBodyRefer3","_document$body$parent4","_shouldShowNextClicker","forceUpdate","_shouldShowPreviousClicker","_handleHoverIn","_hoveringCellItemId","hoverStateLastUpdate","Date","now","_handleHoverOut","_goBack","backToShoppingUrl","referrer","back","createRef","specifications","_product$specificatio","specificationsList","allSpecifications","flatten","specificationNames","AttributeValueId","uniqueSpecificationNames","unique","dimensions","allDimensions","dimensionIds","actionBarClassName","clearAllProductsFromComparison","_renderHeading","_renderLoading","_getActionBarContainerProps","_renderPreviousClicker","_renderNextClicker","_renderBackToShoppingButton","emptyComparisonContentSlots","cookies","isConsentGiven","productComparisonCountText","productsMainInfoData","allUniqueDimensionIds","getProductsDimensionsIds","updatedDimensionProps","getUpdatedDimensionsProps","tableCellReference","handlePreviousClick","handleNextClick","handleHoverIn","handleHoverOut","uniqueDimensionIds","_getProductsDimensions","uniqueSpecifications","_getProductsSpecifications","_getSpecificationProps","GetProductsInProductComparisonInput","getProductsInProductComparisonAction","_renderQuickView","_product$productInfo$","quickViewSlot","quickViews","selectedDimensions","cloneElement","selectedProductId","_getTableHeaderProps","isHoverModeEnabled","tableHeaderCellClassName","onMouseEnter","onMouseLeave","_getTableCellProps","cellClassName","tableCellClassName","_renderProductRating","_ratingValue$reviewsC","averageRating","ratingValue","RatingComponent","avgRating","readOnly","productComparisonProductItemRatingAriaLabel","ratingCount","reviewsCount","shouldShowFullRatingDescription","backToShoppingLabel","_getDimensionName","dimensionId","ProductDimensionType","Color","productComparisonProductItemColorDimension","Size","productComparisonProductItemSizeDimension","Style","productComparisonProductItemStyleDimension","dimensionDescription","dimensionSelectionType","dimensionsAsSwatchConfiguration","swatch","renderSwatch","textValue","productsDimension","_productsDimension$di","_productsDimension$di2","dimensionItems","dimensionItem","_dimensionItem$map","currentDimensionId","swatches","swatchItem","_productMainInfo$prod","_swatchItem$Dimension2","_swatchItem$Dimension3","_swatchItem$Dimension4","_swatchItem$Dimension5","_swatchItem$Dimension6","_swatchItem$Dimension7","_swatchItem$Dimension8","_swatchItem$Dimension9","isDefaultDimension","selectedDimension","_swatchItem$Dimension","DimensionId","dimensionType","colorHexCode","ColorHexCode","ImageUrl","isDefault","SwatchComponent","isSelectionEnabled","_dimensionItem$Dimens","_dimensionItem$Dimens2","productDimensionSeperatorValue","productDimensionSeparator","_productMainInfo$prod2","productSpecification","productSpecifications","Heading","productComparisonTitle","productComparisonLoadingText","productComparisonClearAllButtonAriaLabel","productComparisonClearAllButtonText","tableClickerClassName","onKeyUp","productComparisonPreviousProduct","productComparisonNextProduct","_renderRemoveFromComparisonButton","currentCatalogId","productUrlLink","_product$productInfo$2","_dimension$DimensionV2","productPriceClassName","cellNewWidth","minWidth","maxWidth","productComparisonProductItemFreePrice","productComparisonProductItemOriginalPrice","productComparisonProductItemCurrentPrice","productComparisonGoToProductDetailsButtonText","_renderProductDescription","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","children","attrs","_objectWithoutProperties","_excluded","isSingleSelect","itemTypeClassName","_renderRating","productText","productCount","Count","refineMenuItemAriaLabel","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","parseInt","ratingRefiner","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","hideCount","CheckoutAlert","getLineItems","_getLineItemComponent","_product","quantityDisplayString","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","configString","inputQuantityAriaLabel","discountStringText","shippingCharges","CartLineItemComponent","sizeString","colorString","styleString","shippingChargesText","isQuantityEditable","primaryImageUrl","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","PickUpAtStore","_getLineItemsComponents","orgUnitLocations","FulfillmentStoreId","locationMatch","_getDeliveryLocation","isPickUp","LineId","LineItem","pickUpAtStore","_getLineItemsByDeliveryType","_filterItemsByDiliveryType","_getGroupTitleComponent","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","suffix","Quantity","_countItems","LineItemDeliveryGroup","LineItemList","lineItems","_getLineItems","lineItemsHeading","editCartText","LineItems","editLink","itemsForPickup","itemsForShip","getOrderSummary","_context$request$app$","orderSummaryHeading","otherCharges","showLineItems","txtCharge","chargeMessage","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","orderSummaryProps","lines","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","hasControlGroup","resource","saveAndContinueBtnLabel","canSubmit","canCancel","focusOnFirstFocusableElement","ReactDOM","findDOMNode","querySelector","focusOnEditButton","scrollToTitle","formCard","scrollIntoView","getTitle","headingTag","Tag","prevProps","isActive","onNext","changeBtnLabel","canEdit","paymentMsg","active","closed","visted","hidden","initialized","ready","updating","CheckoutGuidedForm","currentStep","getEnabledModules","getStep","getId","getHeading","isEditor","GuidedCard","disableGuidedCheckoutFlow","textDecoration","termsOfUse","privacyPolicy","CheckoutPlaceOrderButton","placeOrder","selectedStudentVal","showBtn","isSlotSelected","setLoading","isBusy","setIsBusy","useState","OPERATIONS","findCreditCardType","cardTypes","cardPrefix","cardType","CardTypeValue","maskNumFrom","NumberFrom","maskNumTo","NumberTo","maskLength","cardSubStr","substr","findTenderIdTypeByOperationId","tenderTypes","operationId","matchedTenderType","tenderType","OperationId","TenderTypeId","roundNumber","toFixed","getCheckoutState","keys","Error","giftCards","tokenizedPaymentCard","guestCheckoutEmail","billingAddress","cartTenderLines","amountDue","AmountDue","getTenderLinePromises","loyaltyCardNumber","LoyaltyCardId","chargedAmount","loyaltyTenderLinePromise","Amount","getTenderTypesAsync","getLoyaltyTenderLine","creditCardTenderLinePromise","GiftCardId","getGiftCardTenderLine","getCardTypesAsync","cartTypeId","TypeId","cardTenderLine","CardTypeId","TokenizedPaymentCard","House","CardTokenInfo","Phone","ThreeLetterISORegionName","Address1","ZipCode","getCreditCardTenderLine","Promise","updatedObj","updateAsync","newCart","GetCheckoutCartInput","updatedCart","updatedContext","_updateCart","salesOrder","checkoutAsync","bypassCache","Version","emptyActiveCart","lineItemIdsToRemove","getCartState","activeCart","activeCartLine","checkoutCartLine","removeCartLines","cartLineIds","removeAllPromoCodes","orderedProducts","redirect","selectedSlot","pickUpDate","studentId","memberNAmeEndpoint","finalSlotID","finalSlotTimings","arrstud","objStudent","AttributeName","attributeValue","TransactionNumber","ChannelId","requestStuOptions","arrslotID","objSlot","arrslotTimings","objSlotTimings","orderConfirmationUrl","clear","updateSalesOrder","newSalesOrder","newOrderedProducts","additionalProperties","GetTimeSlots","_slots$timeslots","slotSelection","checkBoxNA","isNotApplicableChecked","chkboxLbl","timeslots","slot","ColorCode","Enabled","Timings","Checkout","selectedSlotID","selectedTime","isPlaceOrderStateLoading","getSlotItems","onPlaceOrder","orderConfirmation","hasOrderConfirmation","finalSlotId","finalSlottimings","errorMsg","updateTimeSlot","eventCategory","_this$props$context$a5","isMaxDefined","checkoutEmail","emailAddress","sellingPeriod","sellingPeriodDescription","maxQtydefined","maxOrderQtyDefined","CurrenttotalItem","TotalItems","arrQty","objQty","EmailId","SellingPeriod","channelName","qty","orderQtyBasedonemailEndPoint","qtyResult","totalQtybeingPlaced","maxQtyValue","_this$props$context$a6","pickupDate","mapStudenttoD365Endpoint","exception","RemainingItems","_this$props$context$a7","selectTimeSlot","selectedTimeSlot","innerHTML","i","clsName","_addOrUpdateCartExtension","selectCheckBoxNA","studename","extensionPropertyKey","extensionPropertyValue","isEditorialMode","cartStatus","isEmpty","isEmptyCart","editCartLink","checkoutHeading","cookieConsentRequiredMessage","checkoutClass","checkoutInformation","defaultDropDownOption","studentDropdownDefaultText","isSlotSelectionRequired","selectedLocalStorageStudName","selectedLocalStorageStudID","hasSalesOrder","checkoutProps","headerProps","bodyProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","isSlotSeletionRequired","studentValue","postStudent","timeSlots","GetTimeSlotsComponent","enabled","isSelected","timeSlotNAChkbox","AlertComponent","canShow","guidedForm","GuidedFormComponent","orderSummary","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","_this$props$context$a8","slotID","_this$props$context$a9","updateSlot","timeSlotAPIURL","timeSlotAPIKey","PickUpAtStoreComponent","LineItemComponent","LineItemGroupComponent","lineItem","LineItemsComponent","OrderSummaryComponent","_ref5","CheckoutView","margin","_renderAddToCart","addToCart","ContainerProps","errorBlock","button","createSearchResultModal","modalProps","isRecoSearchPage","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","SearchResultContainerView","_props$context$action","AdressInput","ariaValueMax","ariaValueMin","ariaValueNow","CheckoutLoyaltyLabel","htmlFor","CheckoutLoyaltyText","CheckoutLoyalty","moduleClassName","_defaultLoyaltyPoints","isEnabled","loyaltyCard","CardNumber","updateLoyaltyCardId","debug","handleCancelOrSubmit","shouldPayLoyalty","_setErrorMessage","_clearError","_dialogToggleRef","_applyLoyaltyPoints","_removeLoyaltyPoints","_onInputChange","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","loyaltyHeadingText","TextComponent","loyaltyCoveredAmountText","Drawer","toggleButtonText","_drawerHeader","openGlyph","closeGlyph","glyphPlacement","RewardPoints","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","LabelComponent","payWithLoyaltyAmountLabel","InputComponent","applyCheckoutLoyaltyPaymentText","removeCheckoutLoyaltyPaymentText","point","RewardPointId","ActivePoints","PointsExpiringSoon","parseFloat","num","card","channelConfig","loyalPointsRequest","createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput","_query","callActionOrExecute","_points$MaxCurrencyVa","GetLoyaltyTransactionEstimationInput","newMaxPoints","DeliveryOptionList","DeliveryOptionSelected","CheckoutDeliveryOptionsView","_renderReactFragment","headerView","shoppingURL","_renderDesktopAccountBlock","CheckoutStateInput","buildCacheKey","createObservableDataAction","inputData"],"mappings":"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","file":"static/js/12.d1c3ee05508883fb760f.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.description\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description }) => {\n if (!description) {\n return null;\n }\n\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

{message}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorTitleProps {\n title?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.title\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorTitle: React.FC = ({ title }) => {\n if (!title) {\n return null;\n }\n\n return

{title}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\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 * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelDeliveryOptionConfiguration, FilterDeliveryModeOption } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Address, CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { action, computed, observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ErrorComponent } from '../../common/error';\nimport { ICheckoutDeliveryOptionsData } from './checkout-delivery-options.data';\nimport {\n filterDeliveryModeOption,\n ICheckoutDeliveryOptionsProps,\n useDefaultDeliveryOption\n} from './checkout-delivery-options.props.autogenerated';\nimport DescriptionComponent from './components/checkout-delivery-options.description';\nimport ErrorMessageComponent from './components/checkout-delivery-options.error-message';\nimport ErrorTitleComponent from './components/checkout-delivery-options.error-title';\nimport RadioButtonComponent from './components/checkout-delivery-options.radio-button';\n\nexport interface ICheckoutDeliveryOptionsModuleProps\n extends ICheckoutDeliveryOptionsProps,\n IModuleStateProps {}\n\nexport interface ICheckoutDeliveryOption {\n DeliveryOption: INodeProps;\n description?: React.ReactNode;\n price?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\n code: string;\n radioButton?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsList {\n DeliveryOptionsList: INodeProps;\n list: ICheckoutDeliveryOptionEdit[];\n}\n\nexport interface ICheckoutDeliveryOptionsError {\n Error: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsViewState {\n isLoading: boolean;\n isError: boolean;\n isShowList: boolean;\n isShowSelected: boolean;\n isShowSaveButton: boolean;\n isShowEditButton: boolean;\n isShowCancelButton: boolean;\n}\n\nexport interface ICheckoutDeliveryOptionsViewProps extends ICheckoutDeliveryOptionsProps<{}> {\n CheckoutDeliveryOptions: IModuleProps;\n selectedItemId: string;\n deliveryOptionsData: DeliveryOption[];\n isLoading: boolean;\n errorMessageData: string;\n viewState: ICheckoutDeliveryOptionsViewState;\n deliveryOptions?: ICheckoutDeliveryOptionsList;\n deliveryOptionSelected?: ICheckoutDeliveryOption;\n errorMessage?: ICheckoutDeliveryOptionsError;\n waiting?: React.ReactNode;\n saveButton?: React.ReactNode;\n editButton?: React.ReactNode;\n cancelButton?: React.ReactNode;\n alert?: React.ReactNode;\n onDeliveryOptionChange(event: React.ChangeEvent): void;\n onSave(): void;\n onEdit(): void;\n onCancel(): void;\n}\n\n/**\n *\n * CheckoutDeliveryOptions component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutDeliveryOptions extends React.Component {\n @observable private selectedItemId: string = '';\n\n @observable private deliveryOptions: DeliveryOption[] = [];\n\n @observable private isLoading: boolean = false;\n\n @observable private errorMessage?: string;\n\n @computed private get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n public get expressPaymentDetailsFromCartPage() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties =\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\n ?.StringValue ?? '';\n\n return properties ? JSON.parse(properties) : null;\n }\n\n public get isExpressPaymentAppliedInCartPage(): boolean {\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\n }\n\n private cartDeliveryMode?: string;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly isSelectDefaultOptionEnabled?: boolean;\n\n public constructor(props: ICheckoutDeliveryOptionsModuleProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isSelectDefaultOptionEnabled =\n this.props.config.useDefaultDeliveryOption && this.props.config.useDefaultDeliveryOption !== useDefaultDeliveryOption.none;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.shippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isExpressCheckoutApplied,\n async isExpressCheckoutApplied => {\n if (isExpressCheckoutApplied && this.canShip() && !this.isExpressPaymentAppliedInCartPage) {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\n checkoutError.errorMessage\n ) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutDeliveryOptionsModuleProps, nextState: ICheckoutDeliveryOptionsViewState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n if (!this.canShip()) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const {\n moduleState: { isReady, isUpdating, hasError }\n } = this.props;\n const isError = !this.isLoading && hasError;\n const isShowList = !this.isLoading && !hasError && isUpdating && !this.isSelectDefaultOptionEnabled;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n const { errorMessageTitle, deliveryOptionAriaLabel } = this.props.resources;\n\n const viewProps = {\n ...this.props,\n onDeliveryOptionChange: this.onDeliveryOptionChange,\n selectedItemId: this.selectedItemId,\n deliveryOptionsData: this.deliveryOptions,\n isLoading: this.isLoading,\n alert: this.errorMessage && ,\n errorMessageData: this.errorMessage,\n viewState: {\n isLoading: this.isLoading,\n isError,\n isShowList,\n isShowSelected,\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\n },\n CheckoutDeliveryOptions: {\n moduleProps: this.props,\n className: classname('ms-checkout-delivery-options', this.props.config.className)\n },\n deliveryOptions: {\n DeliveryOptionsList: {\n className: 'ms-checkout-delivery-options__list',\n role: 'list',\n 'aria-label': deliveryOptionAriaLabel\n },\n list: this.getDeliveryOptionList()\n },\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\n errorMessage: this.getErrorMessage(),\n waiting: ,\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSave,\n onEdit: this.onEdit,\n onCancel: this.onCancel\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.isSelectDefaultOptionEnabled ? undefined : this.onEdit,\n onCancel: this.isSelectDefaultOptionEnabled ? undefined : this.onCancel,\n onSubmit: this.isSelectDefaultOptionEnabled ? undefined : this.onSubmit,\n status:\n !(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption) &&\n this.canShip()\n ? 'updating'\n : 'disabled'\n });\n\n this.cartDeliveryMode = this.getSavedDeliveryOption();\n await this.loadDeliveryOptions();\n };\n\n private readonly canShip = (): boolean => {\n const hasInvoice = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n return !hasInvoice && this.getCartLinesForShipping().length > 0;\n };\n\n private readonly isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\n if (deliveryMode) {\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\n return true;\n }\n }\n return false;\n };\n\n private readonly getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\n if (!selectedItem) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const { id, typeName, context } = this.props;\n const { priceFree } = this.props.resources;\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\n\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option-selected' },\n description: ,\n price: (\n \n )\n };\n };\n\n private readonly getErrorMessage = (): ICheckoutDeliveryOptionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n // @ts-expect-error\n CheckoutDeliveryOptionsError: { tag: 'span', className: 'ms-address-form__error', role: 'alert', 'aria-live': 'assertive' },\n title: ,\n message: \n };\n };\n\n private readonly getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\n const count = this.deliveryOptions.length;\n const { priceFree } = this.props.resources;\n const { id, typeName, context } = this.props;\n\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option', role: 'listitem' },\n code: deliveryOption.Code || '',\n radioButton: (\n \n ),\n description: (\n \n ),\n price: (\n \n )\n };\n });\n };\n\n private readonly getSaveButton = (): React.ReactNode => {\n const { saveBtnLabel = 'Save' } = this.props.resources;\n return (\n \n {saveBtnLabel}\n \n );\n };\n\n private readonly getEditButton = (): React.ReactNode => {\n const { editBtnLabel = 'Change' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.errorMessage = errorMessage;\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.errorMessage = undefined;\n };\n\n private readonly onSave = async (): Promise => {\n await this.onSubmit();\n };\n\n private readonly onEdit = async (): Promise => {\n this.props.telemetry.information('Delivery options onEdit is called.');\n\n this.onUpdating();\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n };\n\n private readonly onSubmit = async (): Promise => {\n this.props.telemetry.information('Delivery options onSubmit is called.');\n\n await this.updateCartDeliverySpecification(this.selectedItemId);\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n };\n\n private readonly onCancel = async (): Promise => {\n this.props.telemetry.information('Delivery options onCancel is called.');\n\n // Reset to the saved value\n const savedDeliveryOption = this.getSavedDeliveryOption();\n if (savedDeliveryOption) {\n this.selectedItemId = savedDeliveryOption;\n this.onReady();\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n } else {\n this.onUpdating();\n }\n };\n\n private readonly getSavedDeliveryOption = (): string | undefined => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\n };\n\n private readonly updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\n if (deliveryModeId.trim() === '') {\n return;\n }\n\n const { resources } = this.props;\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const updateCartDeliverySpecificationInput = {\n deliveryModeId,\n shippingAddress: checkoutState.shippingAddress,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined\n };\n\n this.clearError();\n this.onPending();\n\n await checkoutState.checkoutCart\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\n .then(response => {\n if (response.status === 'FAILED') {\n this.setError(resources.genericErrorMessage);\n } else {\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n }\n })\n .catch(() => {\n this.setError(resources.genericErrorMessage);\n });\n };\n\n private readonly getCartLinesForShipping = (): CartLine[] => {\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n\n return this.retailMultiplePickUpOptionEnabled\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n this.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n };\n\n private readonly getDeliveryOptions = async (shippingAddress: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n const cartId = (cartState.cart as Cart).Id;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n const response = await getDeliveryOptionsAsync(\n {\n callerContext: context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\n },\n cartId,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n );\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n\n if (response && response.length > 0) {\n this.deliveryOptions = response;\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n\n if (this.deliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartDeliveryMode && this.isDeliveryModeExists(this.cartDeliveryMode)) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n } else {\n this.onUpdating();\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: !!this.isSelectDefaultOptionEnabled });\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly getStoredDeliveryOptions = async (): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context } = this.props;\n const cartState = this.props.data.checkout.result.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n }\n\n if (this.cartDeliveryMode) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly loadDeliveryOptions = async (): Promise => {\n const shippingAddress = this.props.data.checkout.result?.shippingAddress;\n\n if (this.canShip() && shippingAddress) {\n if (\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied\n ) {\n await this.getDeliveryOptions(shippingAddress);\n }\n\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n }\n\n if (\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n this.onSubmit();\n }\n }\n };\n\n private readonly onDeliveryOptionChange = (event: React.ChangeEvent) => {\n const deliveryModeId = event.currentTarget.value;\n this.selectedItemId = deliveryModeId;\n };\n\n private readonly onReady = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onReady();\n }\n };\n\n private readonly onUpdating = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onUpdating();\n }\n };\n\n private readonly onPending = () => {\n if (!this.isSelectDefaultOptionEnabled) {\n this.props.moduleState.onPending();\n }\n };\n}\n\nexport default CheckoutDeliveryOptions;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport getCollectionProducts, {\n GetFullProductsByCollectionInput,\n ProductListInventoryFilteringOptions\n} from './get-full-products-by-collection';\nimport type {\n IFullProductsSearchResultsWithCount\n} from './get-full-products-by-collection';\nimport getMappedSearchConfiguration, { MappedSearchInput, sortOptions } from './get-mapped-search-configuration';\nimport type { MappedSearchConfiguration } from './get-mapped-search-configuration';\nimport getCollectionRefinersAction, { RefinersByCollectionInput } from './get-refiners-for-collection';\n\nexport * from './base-collection-action';\nexport * from './url-utils';\n\nexport {\n getCollectionProducts,\n getCollectionRefinersAction,\n GetFullProductsByCollectionInput,\n getMappedSearchConfiguration,\n IFullProductsSearchResultsWithCount,\n MappedSearchConfiguration,\n MappedSearchInput,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ISearchResultModalViewProps {\n modal: React.ReactElement;\n modalHeader: React.ReactElement;\n modalFooter: React.ReactElement;\n modalBody: React.ReactElement;\n}\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n onClick(): void;\n}\n\nexport interface ISearchResultModalResources {\n modalTitle: string;\n modalCloseButtonText: string;\n}\n\nexport interface ISearchResultModalProps {\n resources: ISearchResultModalResources;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n onModalToggle(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, id } = props;\n return (\n \n );\n};\n\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\n return {\n modal: modalNode(props),\n modalHeader: modalHeaderNode(props),\n modalFooter: modalFooterNode(props),\n modalBody: \n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n \n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return {props.resources.modalTitle};\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\n \n \n \n );\n};\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\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport interface ILogoProps {\r\n image: Msdyn365.IImageData;\r\n gridSettings?: Msdyn365.IGridSettings;\r\n link?: ILinkData;\r\n className?: string;\r\n}\r\n\r\nexport interface ILinkData {\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n linkText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * Logo component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class Logo extends React.PureComponent {\r\n public render():JSX.Element {\r\n return(\r\n
\r\n {this._renderLogo(this.props)}\r\n
\r\n );\r\n }\r\n\r\n private _renderLogo(config: ILogoProps):JSX.Element {\r\n if(config.link && config.link.linkUrl.destinationUrl) {\r\n return(\r\n \r\n {this._renderImage(config)}\r\n \r\n );\r\n }\r\n return(\r\n this._renderImage(config)\r\n );\r\n }\r\n\r\n private _renderImage(config: ILogoProps): JSX.Element {\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=132&h=28&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=160&h=48&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Logo;","/*---------------------------------------------------------------------------------------------\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\nimport * as React from 'react';\r\n\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport { observer } from 'mobx-react';\r\nimport { ICcbcuheaderResources } from '../ccbcuheader.props.autogenerated';\r\n\r\nexport interface INavIconProps {\r\n resources: ICcbcuheaderResources;\r\n isExpanded: boolean;\r\n targetId: string;\r\n toggleNavBar(): void;\r\n}\r\n\r\n/**\r\n *\r\n * NavIcon component\r\n * @extends {React.PureComponent}\r\n */\r\n\r\n@observer\r\nexport class NavIcon extends React.Component {\r\n public render():JSX.Element {\r\n return (\r\n \r\n );\r\n }\r\n}","/* eslint-disable react/jsx-no-duplicate-props */\r\n/* eslint-disable @typescript-eslint/no-floating-promises */\r\n/* eslint-disable eqeqeq */\r\n/* eslint-disable react/jsx-no-undef */\r\n/* eslint-disable no-empty */\r\n/* eslint-disable @typescript-eslint/semi */\r\n/* eslint-disable no-irregular-whitespace */\r\n/* eslint-disable react/jsx-no-comment-textnodes */\r\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\r\n//import classnames from 'classnames';\r\nimport React from 'react';\r\nimport styled from 'styled-components';\r\nimport GetStudentDetailsComponent from '../../ccbcucheckout/components/getStudentDetails';\r\nimport PostStudentDetailsComponent from '../../ccbcucheckout/components/postStudentDetails';\r\nimport { IUpdateStudentDetailsProps } from '../../ccbcucheckout';\r\n//import { Alert, AlertTitle } from '@material-ui/lab';\r\n\r\n//import { ErrorMessage } from '../../search-result-container/components';\r\n//import { ICcbcuheaderData } from '../ccbcuheader.data';\r\n//import { ICcbcuheaderProps, ICcbcuheaderResources, IMyAccountLinksData } from '../ccbcuheader.props.autogenerated';\r\n//import { Button, IModuleProps, INodeProps, KeyCodes, Modal, ModalBody, ModalHeader, Popover } from '@msdyn365-commerce-modules/utilities';\r\n//import { IHeaderState } from '../ccbcuheader';\r\nexport interface IBots {\r\n toggleBot(): Promise;\r\n isVisible: boolean;\r\n srcURL: string;\r\n botID: string;\r\n isStudentFeature: boolean;\r\n isSlotFeature: boolean;\r\n id: string;\r\n typeName: string;\r\n studProd:any;\r\n channelId:any;\r\n studAPiKey:any;\r\n studApiendpoint:any;\r\n homePageUrl:string;\r\n ConfigValues :any;\r\n mainProps:any;\r\n //alert?:React.ReactNode;\r\n}\r\n interface IbotState{\r\n isStudentSelected : boolean;\r\n showPopUp: boolean;\r\n selectedMediaIcon : string;\r\n selectedStudent :string;\r\n selectedStudentName :string;\r\n event_ID: string;\r\n postStudentObj:any;\r\n}\r\nexport const ClickButton = styled.div`\r\n background: red;\r\n color: white;\r\n font-weight: 500;\r\n padding: 10px;\r\n float: left;\r\n margin-left: 0px;\r\n margin-right: 20px;\r\n margin-top: 12px;\r\n margin-bottom: -20px;\r\n cursor: pointer;\r\n width: 90px;\r\n text-align: center;\r\n`\r\nconst PopupCard = styled.div`\r\nwidth: 300px;\r\nposition: absolute;\r\nleft: 50%;\r\ntop: 50%;\r\nmargin-left: -150px;\r\nbackground-color: white;\r\npadding: 40px;\r\ntransform: translateY(-50%);\r\n`\r\nconst Overlay = styled.div`\r\nposition: fixed;\r\ntop: 0;\r\nleft: 0;\r\nz-index: 999;\r\nwidth: 100vw;\r\nheight: 100vh;\r\nbackground-color: black;\r\nbackground-color: rgba(0, 0, 0, 0.75);\r\n`;\r\n\r\n/* type Popup = {\r\n togglePopup: (event: React.MouseEvent) => void;\r\n} */\r\n\r\nexport class Bots extends React.Component {\r\n studentValid: Boolean | undefined;\r\n\r\n constructor(props: IBots) {\r\n super(props);\r\n }\r\n componentDidMount() {\r\n\r\n }\r\n getStudentValue = () => {\r\n try {\r\n return localStorage.getItem('studentID')\r\n }catch (e) {\r\n return null\r\n }\r\n }\r\n public state:IbotState= {\r\n  isStudentSelected:true,\r\n showPopUp: false,\r\n selectedMediaIcon: \"\",\r\n selectedStudent: \"\",//this.getStudentValue() || '',\r\n selectedStudentName:\"\",\r\n event_ID:\"\",\r\n   postStudentObj:\"\"\r\n }\r\n  private selectStudent = async(val:string, event_guid: string,name:string, studValid:Boolean): Promise =>{\r\n // eslint-disable-next-line eqeqeq\r\n this.studentValid = studValid;\r\n         if(val != \"\" && val != \"Other\" && studValid){\r\n             this.setState({\r\n                 selectedStudent: val,\r\n                 isStudentSelected: true,\r\n selectedStudentName:name\r\n             });\r\n            // this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"EventStudentName\", val);\r\n         } else {\r\n             this.setState({\r\n                 selectedStudent: val,\r\n                 isStudentSelected: false,\r\n selectedStudentName:name,\r\n                 event_ID: event_guid\r\n             });\r\n         }\r\n\r\n }\r\n // outputs: true\r\n  async getStudentDetailsForPost(obj: IUpdateStudentDetailsProps): Promise {\r\n         this.setState({\r\n             postStudentObj: obj,\r\n             isStudentSelected: true\r\n         });\r\n     }\r\n  async updateStudentDetailsToCDS(obj: IUpdateStudentDetailsProps): Promise{\r\n     const channelID = this.props.channelId;//actionContext.requestContext.channel?.ChannelNaturalId;\r\n         var arr: string[] = [];\r\n obj.RETAIL_CHANNEL_ID = channelID? channelID: \"\";\r\n         arr.push(JSON.stringify(obj));\r\n         const requestOptions = {\r\n             method: 'POST',\r\n             headers: { 'Content-Type': 'application/json' },\r\n             body: arr.toString()\r\n         };\r\n\r\n         const updateStu = await fetch(`${this.props.studApiendpoint}?code=${this.props.studAPiKey}&RetailChannelId=${channelID}`, requestOptions);\r\n         const data = await updateStu.json();\r\n\r\n         return data;\r\n     }\r\n componentDidUpdate(_ : any, prevState :any) {\r\n if (prevState.selectedMediaIcon !== this.state.selectedMediaIcon && this.state.selectedMediaIcon != \"\" && !this.state.showPopUp) {\r\n // Now fetch the new data here.\r\n this.handleShare();\r\n }\r\n }\r\n\r\n handleShare = async () => {\r\n//<>\r\n const socialMedia = this.state.selectedMediaIcon;\r\n var studName = this.state.selectedStudentName;//.replace(/ /g,\"_\");\r\n // let encodedStudname = studName.replace(/ /g,\"%20\");\r\n localStorage.setItem(\"studentID\", this.state.selectedStudent);\r\n localStorage.setItem(\"studentName\",studName);\r\n // localStorage.getItem(\"lastname\");\r\n let pageUrl: string | undefined;\r\n if(document !== undefined && this.props.isStudentFeature){\r\n // var studentID = this.state.selectedStudent;\r\n // eslint-disable-next-line eqeqeq\r\n if(this.state.selectedStudent == \"Other\"){\r\n studName = this.state.postStudentObj.NAME;//.replace(/ /g,\"_\");\r\n // encodedStudname = studName.replace(/ /g,\"%20\");\r\n this.setState({\r\n //selectedStudent : studentIDlocalStorage,\r\n selectedStudentName : studName\r\n\r\n });\r\n localStorage.setItem(\"studentName\",this.state.selectedStudentName);\r\n var studentID :any;\r\n studentID = await this.updateStudentDetailsToCDS(this.state.postStudentObj);\r\n this.setState({\r\n selectedStudent : studentID\r\n //selectedStudentName : studName\r\n });\r\n localStorage.setItem(\"studentID\",this.state.selectedStudent);\r\n // eslint-disable-next-line react/no-direct-mutation-state\r\n // this.state.selectedStudentName = studentID;\r\n }\r\n studName = studName.replace(/ /g,\"_\");\r\n pageUrl = `${this.props.homePageUrl.split(\"/all\")[0]}?studentName=${studName},studValue=${this.state.selectedStudent}`;\r\n// if(socialMedia == \"CopyLink\")\r\n// {\r\n// pageUrl = `${this.props.homePageUrl.split(\"/all\")[0]}?studentName=${studName}`;\r\n// }\r\n // eslint-disable-next-line react/no-direct-mutation-state\r\n  //this.state.showPopUp= false;\r\n }\r\n else\r\n {\r\n pageUrl = this.props.homePageUrl.split(\"/all\")[0];\r\n }\r\n\r\n const event_Name = this.props.ConfigValues.eventTitle;\r\n //let event_desc = this.props.ConfigValocallues.eventDescription;\r\n const mailBody :string = `Please use the link to place orders for the event '${event_Name}' : ${pageUrl}`\r\n //const errorMessage = \"Url copied succesfully\";\r\n //const facebookBody : string= `Please follow the link to support '${event_Name}', a Coca-Cola United Fundraiser!`\r\n let url: string | undefined;\r\n switch (socialMedia) {\r\n case \"twitter\":\r\n url = `https://twitter.com/share?url=${pageUrl}`;\r\n break;\r\n case \"facebook\":\r\n url = `https://www.facebook.com/sharer.php?u=${pageUrl}`;\r\n break;\r\n case \"mail\":\r\n url =`mailto:?subject=Please Support ${event_Name} &body=${mailBody}`;// `mailto:?body=Please%20Support%20-%20${event_Name}%20 \\n %20: ${pageUrl}%20\\n%20${event_desc}`;\r\n break;\r\n case \"linkedIn\":\r\n url = `https://www.linkedin.com/shareArticle?mini=true&url=${pageUrl}`;\r\n break;\r\n case \"whatsapp\":\r\n url = `whatsapp://send?text=${pageUrl}`;//${this.props.homePageUrl.split(\"/all\")[0]}?studentName=${studName.replace(\" \",\"-\")},studValue=${this.state.selectedStudent}`;\r\n break;\r\n case \"CopyLink\":\r\n navigator.clipboard.writeText(`${pageUrl}`);\r\n //new Notification('Hello World');\r\n alert(\"Site URL Copied succesfully\");\r\n break;\r\n default:\r\n break;\r\n }\r\n if(url != null || url != \"\")\r\n {\r\n url && openWindow(url);\r\n // eslint-disable-next-line react/no-direct-mutation-state\r\n this.setState({\r\n                showPopUp: false,\r\n selectedStudent : \"\",\r\n selectedMediaIcon:\"\"\r\n             });\r\n }\r\n };\r\n public render(): JSX.Element | null {\r\n    const {\r\n\r\n                 students: {\r\n                     result\r\n                 }\r\n\r\n\r\n         } = this.props.studProd;\r\n const isVisible = this.props.isVisible;\r\n const toggleBot = this.props.toggleBot;\r\n //const srcURL = this.props.srcURL;\r\n // const pageUrl = document.URL\r\n var botID = this.props.botID;\r\n const studentfeature = this.props.isStudentFeature ? 'Yes' : 'No';\r\n const timeslotfeature = this.props.isSlotFeature ? 'Yes' : 'No';\r\n const defaultDropDownOption = \"select dropdown\";//this.props.studProd.studentDropdownDefaultText;\r\n //const isStudentFeatureRequired = this.props.context.app.config.isStudentFeatureRequired;\r\n\r\n // const URL = window.location.href;\r\n // const SocialMedia = this.props.config.socialMedia;\r\n const handleCancel = () =>{\r\n this.setState({\r\n                showPopUp: false,\r\n selectedStudent : \"\",\r\n selectedMediaIcon:\"\"\r\n             });\r\n };\r\n const handleShareIcons = (socialMedia:String) => {\r\n var studentIDlocalStorage : any;\r\n var studentNamelocalstorage :any;\r\n if(socialMedia == \"CopyLink\")\r\n {\r\n // navigator.clipboard.writeText(this.props.homePageUrl.split(\"/all\")[0]);\r\n }\r\n if(this.props.isStudentFeature)\r\n {\r\n const urlParams = new URLSearchParams(document.URL);\r\n if(urlParams != null || urlParams != undefined || urlParams != \"\")\r\n {\r\n // const paramsBlock = document.URL.slice(document.URL.indexOf('?') + 1).split(',');\r\n /* studentNamelocalstorage = paramsBlock[0].split('=')[1];\r\n\r\n localStorage.setItem(\"studentName\",studentNamelocalstorage);\r\n studentIDlocalStorage = paramsBlock[1].split('=')[1];\r\n localStorage.setItem(\"studentID\", studentIDlocalStorage); */\r\n for(const[key,value] of urlParams)\r\n {\r\n if(key.includes(\"studentName\"))\r\n {\r\n //value.slice(document.URL.indexOf('?') + 1).split(',');\r\n var querystring = value;\r\n var splitted = querystring.split(\",\", 1);\r\n var studValuesplit = querystring.split(\",\",2)[1].split(\"=\",2)[1];\r\n studentNamelocalstorage = splitted[0];//.replace(\"_\\g\", \" \");\r\n //const studReplaced = studentNamelocalstorage;\r\n studentNamelocalstorage = studentNamelocalstorage.split('_').join(' ');\r\n\r\n //value.split(',')[0];\r\n studentIDlocalStorage = studValuesplit;\r\n localStorage.setItem(\"studentName\",studentNamelocalstorage);\r\n localStorage.setItem(\"studentID\", studentIDlocalStorage);\r\n }\r\n // if(key.includes(\"studValue\"))\r\n //{\r\n\r\n\r\n //}\r\n // //console.log(`${key}:${value}`);\r\n }\r\n }\r\n if(localStorage.getItem(\"studentName\") && localStorage.getItem(\"studentID\"))\r\n {\r\n\r\n studentIDlocalStorage = localStorage.getItem(\"studentID\") || \"\";\r\n studentNamelocalstorage = localStorage.getItem(\"studentName\") || \"\";\r\n\r\n this.setState({\r\n selectedStudent : studentIDlocalStorage,\r\n selectedStudentName : studentNamelocalstorage\r\n\r\n });\r\n }\r\n this.setState({\r\n  showPopUp: true,\r\n selectedMediaIcon : socialMedia\r\n             });\r\n }\r\n else\r\n {\r\n this.setState({\r\n\r\n selectedMediaIcon : socialMedia\r\n\r\n             });\r\n //this.handleShare();\r\n }\r\n //\r\n\r\n };\r\n\r\n return (\r\n\r\n
\r\n {\r\n this.state.showPopUp && (\r\n \r\n \r\n
\r\n {\r\n                            var newObj = obj;\r\n                            newObj[\"EVENT_GUID\"] = this.state.event_ID;\r\n                             this.setState({\r\n                                 postStudentObj: newObj,\r\n                                 isStudentSelected: true\r\n                             });\r\n                        }\r\n                    }}\r\n                />
\r\n Proceed\r\n Cancel\r\n {/* \r\n Proceednew\r\n */}\r\n
\r\n
\r\n )\r\n }\r\n
\r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n
\r\n\r\n
\r\n {/* \r\n \r\n Demo\r\n \r\n \r\n */}\r\n\r\n toggleBot()} >\r\n \r\n Chat\r\n \r\n \r\n \r\n {/* toggleBot()}>\r\n \r\n */}\r\n\r\n
\r\n\r\n
\r\n Ask Me\r\n toggleBot()}>\r\n
\r\n
toggleBot()}>\r\n \r\n \r\n \r\n \r\n Need Help?\r\n \r\n
\r\n
\r\n {/* */}\r\n
\r\n
\r\n

Ask Me

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nfunction openWindow(url: string): void {\r\n const left = (screen.width - 570) / 2;\r\n const top = (screen.height - 570) / 2;\r\n const params = `menubar=no,toolbar=no,status=no,width=570,height=570,top='${top}',left='${left}`;\r\n\r\n // Setting 'params' to an empty string will launch\r\n // content in a new tab or window rather than a pop-up.\r\n // params = \"\";\r\n window.open(url, 'NewWindow', params);\r\n}\r\nexport default Bots;\r\n\r\n","/* eslint-disable @typescript-eslint/semi */\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\nimport { Button, IModuleProps, INodeProps, KeyCodes, Modal, ModalBody, ModalHeader, Popover } from '@msdyn365-commerce-modules/utilities';\r\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\r\nimport { IRequestContextUser } from '@msdyn365-commerce/core';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { Logo, NavIcon } from './components';\r\nimport { ICcbcuheaderData } from './ccbcuheader.data';\r\nimport { ICcbcuheaderProps, ICcbcuheaderResources, IMyAccountLinksData } from './ccbcuheader.props.autogenerated';\r\nimport GetBotComponent from './components/bot';\r\n\r\nexport interface IHeaderState {\r\n mobileMenuCollapsed: boolean;\r\n signinPopoverOpen: boolean;\r\n isBotVisible: boolean;\r\n}\r\n\r\nexport interface IHeaderViewProps extends ICcbcuheaderProps, IHeaderState {\r\n logo: React.ReactNode;\r\n wishListIconDesktop: React.ReactNode;\r\n wishListIconMobile: React.ReactNode;\r\n cartIcon: React.ReactNode;\r\n navIcon: React.ReactNode;\r\n className: string;\r\n menuBar: React.ReactNode[];\r\n search: React.ReactNode[];\r\n HeaderTag: IModuleProps;\r\n HeaderContainer: INodeProps;\r\n MobileMenuContainer: INodeProps;\r\n MobileMenuHeader: React.ReactNode;\r\n MobileMenuBodyContainer: INodeProps;\r\n MobileMenuLinksContainer: INodeProps;\r\n HeaderTopBarContainer: INodeProps;\r\n Divider: INodeProps;\r\n\r\n AccountInfoDropdownParentContainer?: INodeProps;\r\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\r\n accountInfoDropdownButton?: React.ReactNode;\r\n\r\n signOutLink?: React.ReactNode;\r\n signInLink?: React.ReactNode;\r\n accountLinks?: React.ReactNode[];\r\n backToShopping: string;\r\n bots: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * Header component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass Header extends React.PureComponent, IHeaderState> {\r\n private popOverRef: React.RefObject;\r\n\r\n constructor(props: ICcbcuheaderProps) {\r\n super(props);\r\n this.popOverRef = React.createRef();\r\n this._toggleNavbar = this._toggleNavbar.bind(this);\r\n this._togglePopover = this._togglePopover.bind(this);\r\n this._keydown = this._keydown.bind(this);\r\n this.state = {\r\n mobileMenuCollapsed: true,\r\n signinPopoverOpen: false,\r\n isBotVisible: false\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n window && window.addEventListener('keydown', this._keydown);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener('keydown', this._keydown, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n id,\r\n slots,\r\n typeName,\r\n data: { accountInformation,\r\n cart: { result: cart }\r\n },\r\n context: {\r\n request: {\r\n user\r\n }\r\n },\r\n context,\r\n resources: {\r\n cartLabel,\r\n cartQtyLabel\r\n }\r\n } = this.props;\r\n const {logoLink, logoImage} = this.props.config;\r\n const headerClassName = classnames('ms-header', this.props.config.className);\r\n const navbarKey = 'header-nav-mobile';\r\n const srcVideoURL = this.props.context.app.config.srcVideoURL;\r\n\r\n const customer = accountInformation && accountInformation.result;\r\n\r\n const viewProps: IHeaderViewProps = {\r\n ...(this.props as ICcbcuheaderProps),\r\n ...(this.state),\r\n logo: ,\r\n wishListIconDesktop: ,\r\n wishListIconMobile: ,\r\n cartIcon: cart && ,\r\n navIcon: ,\r\n menuBar: slots && slots.menuBar && slots.menuBar.length && slots.menuBar || [],\r\n search: slots && slots.search && slots.search.length && slots.search || [],\r\n className: headerClassName,\r\n HeaderTag: {\r\n moduleProps: this.props,\r\n className: classnames(headerClassName),\r\n tag:'header'\r\n },\r\n HeaderContainer: {\r\n className: classnames('ms-header__container')\r\n },\r\n HeaderTopBarContainer: {\r\n className: classnames('ms-header__topbar')\r\n },\r\n Divider: {\r\n className: classnames('ms-header__divider')\r\n },\r\n MobileMenuContainer: {\r\n tag: Modal,\r\n id: navbarKey,\r\n className: 'ms-header__mobile-hamburger',\r\n isOpen: !this.state.mobileMenuCollapsed,\r\n wrapClassName: 'ms-header__modal'\r\n },\r\n MobileMenuHeader: (\r\n \r\n ),\r\n MobileMenuBodyContainer: {\r\n tag: ModalBody,\r\n className: 'ms-header__mobile-hamburger-menu-body',\r\n },\r\n MobileMenuLinksContainer: {\r\n className: 'ms-header__mobile-hamburger-menu-links',\r\n },\r\n AccountInfoDropdownParentContainer: {\r\n className: 'ms-header__account-info'\r\n },\r\n AccountInfoDropdownPopoverConentContainer: customer && customer.FirstName && {\r\n tag: Popover,\r\n id: 'myprofilePopover',\r\n className: 'ms-header__account-info-content',\r\n placement: 'bottom',\r\n isOpen: this.state.signinPopoverOpen,\r\n target: this.popOverRef,\r\n toggle: this._togglePopover,\r\n } || undefined,\r\n signInLink: this._getSigninButton(customer, user, this.props.resources),\r\n signOutLink: this._getSignOutButton(customer, user, this.props.resources),\r\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(customer),\r\n accountLinks: this._getAccountLinks(customer),\r\n backToShopping: this.props.app.config.backToShoppingCustomURL,\r\n bots:(\r\n )\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private _getSigninButton(customer: Customer | undefined, user: IRequestContextUser | undefined, resources: ICcbcuheaderResources): React.ReactNode | undefined {\r\n return !customer && (\r\n \r\n {resources.signInLinkText}\r\n \r\n );\r\n }\r\n\r\n private _getSignOutButton(customer: Customer | undefined, user: IRequestContextUser | undefined, resources: ICcbcuheaderResources): React.ReactNode | undefined {\r\n return customer && customer.FirstName && (\r\n \r\n {resources.signOutLinkText}\r\n \r\n );\r\n }\r\n\r\n private _getAccountInfoDropdownButton(customer: Customer | undefined): React.ReactNode | undefined {\r\n return customer && customer.FirstName && (\r\n \r\n {customer.FirstName}\r\n \r\n );\r\n }\r\n\r\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\r\n const { myAccountLinks } = this.props.config;\r\n\r\n return customer && customer.FirstName && myAccountLinks && myAccountLinks.length ?\r\n myAccountLinks.map((cta: IMyAccountLinksData, index: number) => (\r\n \r\n {cta.linkText || ''}\r\n \r\n ))\r\n : undefined;\r\n }\r\n\r\n private _toggleNavbar(): void {\r\n this.setState({\r\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\r\n });\r\n }\r\n\r\n private _togglePopover(): void {\r\n this.setState({\r\n signinPopoverOpen: !this.state.signinPopoverOpen\r\n });\r\n }\r\n\r\n private _keydown(e: KeyboardEvent): void {\r\n if (e.keyCode === KeyCodes.Escape) {\r\n this.setState({ mobileMenuCollapsed: true });\r\n }\r\n }\r\n\r\n private toggleBotDisplay = async():Promise => {\r\n const botState = this.state.isBotVisible;\r\n this.setState({\r\n isBotVisible: !botState\r\n });\r\n }\r\n}\r\n\r\nexport default Header;\r\n\r\n\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './get-products-in-product-comparison';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getRichTextHtml, ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\n/**\n * Represents resources for the component.\n */\nexport interface IProductSpecificationResources {\n productComparisonProductItemSpecificationTrue: string;\n productComparisonProductItemSpecificationFalse: string;\n}\n\n/**\n * Represent configuration of the component.\n */\nexport interface IProductSpecificationProps {\n telemetry: ITelemetry;\n specification?: AttributeValue;\n context: ICoreContext;\n\n resources: IProductSpecificationResources;\n}\n\n/**\n * Represents the product specification values that comes from the server.\n */\nexport enum SpecificationDataTypeValues {\n none = 0,\n currency = 1,\n dateTime = 2,\n decimal = 3,\n integer = 4,\n text = 5,\n boolean = 6,\n video = 40,\n image = 41\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductSpecification extends React.PureComponent {\n private static _renderCurrencyCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.CurrencyValue)) {\n return null;\n }\n\n return (\n \n {product.CurrencyCode}\n {product.CurrencyValue}\n \n );\n }\n\n private static _renderDateTimeCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isFunction(product.DateTimeOffsetValue?.toUTCString)) {\n return null;\n }\n\n return {product.DateTimeOffsetValue!.toUTCString()};\n }\n\n private static _renderIntegerCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.IntegerValue)) {\n return null;\n }\n\n return {product.IntegerValue};\n }\n\n private static _renderDecimalCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.FloatValue)) {\n return null;\n }\n\n return {product.FloatValue};\n }\n\n private static _renderTextCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.TextValue)) {\n return null;\n }\n\n // eslint-disable-next-line react/no-danger -- Implementation is a copy.\n return ;\n }\n\n public constructor(props: IProductSpecificationProps) {\n super(props);\n }\n\n public render(): React.ReactNode | null {\n const specification = this.props.specification;\n if (ObjectExtensions.isNullOrUndefined(specification)) {\n return null;\n }\n\n switch (specification.DataTypeValue) {\n case SpecificationDataTypeValues.none:\n // Return span here instead of null so the row still shows\n return ;\n case SpecificationDataTypeValues.currency:\n return ProductSpecification._renderCurrencyCell(specification);\n case SpecificationDataTypeValues.dateTime:\n return ProductSpecification._renderDateTimeCell(specification);\n case SpecificationDataTypeValues.decimal:\n return ProductSpecification._renderDecimalCell(specification);\n case SpecificationDataTypeValues.integer:\n return ProductSpecification._renderIntegerCell(specification);\n case SpecificationDataTypeValues.text:\n return ProductSpecification._renderTextCell(specification);\n case SpecificationDataTypeValues.boolean:\n return this._renderTrueFalseCell(specification);\n case SpecificationDataTypeValues.video:\n this.props.telemetry.warning('Got video specification type, not supported yet so skipping line');\n return null;\n case SpecificationDataTypeValues.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 ${specification.DataTypeValue ?? 'null'} so skipping line`);\n return null;\n }\n }\n\n private _renderTrueFalseCell(product: AttributeValue): React.ReactNode | null {\n if (product.BooleanValue) {\n return {this.props.resources.productComparisonProductItemSpecificationTrue};\n }\n return {this.props.resources.productComparisonProductItemSpecificationFalse};\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport React, { useCallback } from 'react';\n\n/**\n * Resources for the remove from comparison button component.\n */\nexport interface IRemoveFromComparisonButtonResources {\n productComparisonRemoveProductFromListAriaLabel: string;\n}\n\n/**\n * The configuration of the remove from comparison button component.\n */\nexport interface IRemoveFromComparisonButtonComponentProps extends IComponentProps {\n className: string;\n itemId: string;\n\n resources: IRemoveFromComparisonButtonResources;\n\n onClickHandler(itemId: string): void;\n}\n\n/**\n * Represents a button which handles adding to product comparison.\n * @param props - Configuration of the component.\n * @returns React functional component.\n */\nconst RemoveFromComparisonButtonFunctionalComponent: React.FC = (\n props: IRemoveFromComparisonButtonComponentProps\n) => {\n const onClick = useCallback(() => {\n props.onClickHandler(props.itemId);\n }, [props]);\n\n const { className } = props;\n\n return \r\n \r\n
\r\n Please enter a valid name\r\n
\r\n
\r\n {\r\n if(this.validateName(e.target.value)){\r\n this.setState({NAME: e.target.value});\r\n }\r\n }} placeholder=\"Name*\" className={`msc-address-form__input msc-address-form__input-text first_Name`} type=\"text\" disabled={!this.state.displayBtn? true: false}>\r\n
\r\n
\r\n Please enter a valid email\r\n
\r\n
\r\n {\r\n this.setState({EMAIL: e.target.value});\r\n }} placeholder=\"Email Address*\" className={`msc-address-form__input msc-address-form__input-text`} type=\"text\" disabled={!this.state.displayBtn? true: false}>\r\n
\r\n
\r\n \r\n
\r\n ) :\r\n <>\r\n );\r\n }\r\n}\r\n\r\nexport default PostStudentDetails;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport msdyn365Commerce, { getCatalogId, getUrlSync, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n convertProductDimensionTypeToDimensionTypes,\n getFallbackImageUrl,\n getProductUrlSync,\n ObjectExtensions,\n Random,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, isMobile, VariantType, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { RemoveFromComparisonButtonComponent } from '../product-comparison';\nimport { ProductComparisonState } from '../product-comparison-state';\nimport {\n getProductsInPreviewProductComparisonAction,\n GetProductsInPreviewProductComparisonInput,\n IProductComparisonProductData\n} from './actions';\nimport { IProductComparisonPreviewData } from './product-comparison-preview.data';\nimport { IProductComparisonPreviewProps } from './product-comparison-preview.props.autogenerated';\n\n/**\n * Represents product comparison view props for main product info.\n */\nexport interface IProductComparisonPreviewProductMainInfo {\n productData: IProductComparisonProductData;\n productNameLink?: string;\n\n removeFromComparisonButton: React.ReactNode;\n productImage: React.ReactNode;\n productLink: React.ReactNode;\n}\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonPreviewViewProps extends IProductComparisonPreviewProps<{}> {\n moduleProps: IModuleProps;\n collapseButton: INodeProps;\n isMainContentReady: boolean;\n\n hasUserInteractedWithComparison?: boolean;\n isExpanded?: boolean;\n subheaderText?: string;\n productsMainInfo?: IProductComparisonPreviewProductMainInfo[];\n previewGreyPlaceHolders?: React.ReactNode;\n\n productComparisonLink?: string;\n goToComparisonButton?: React.ReactNode;\n clearAllButton?: React.ReactNode;\n\n handleCollapseClick?(): void;\n clearAllProductsFromTheComparison?(): void;\n removeProductFromList?(itemId: string): void;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonPreviewState {\n isExpanded?: boolean;\n productsData?: IProductComparisonProductData[];\n greyPlaceHoldersCount?: number;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonPreviewFullProps extends IProductComparisonPreviewProps {}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparisonPreview extends React.PureComponent {\n public static readonly className = 'ms-product-comparison-preview';\n\n public static readonly containerClassName = `${ProductComparisonPreview.className}__container`;\n\n public static readonly mainContainerClassName = `${ProductComparisonPreview.containerClassName}__main-container`;\n\n public static readonly headerClassName = `${ProductComparisonPreview.mainContainerClassName}__header`;\n\n public static readonly headerLabelClassName = `${ProductComparisonPreview.headerClassName}__label`;\n\n public static readonly tableClassName = `${ProductComparisonPreview.mainContainerClassName}__table`;\n\n public static readonly tableRowClassName = `${ProductComparisonPreview.tableClassName}__product-row`;\n\n public static readonly footerClassName = `${ProductComparisonPreview.mainContainerClassName}__footer`;\n\n public static readonly collapseButtonClassName = `${ProductComparisonPreview.headerClassName}__collapse`;\n\n public static _displayedInstanceId?: string;\n\n private readonly _instanceId: string;\n\n private _hasUserInteractedWithComparison: boolean;\n\n public constructor(props: IProductComparisonPreviewFullProps) {\n super(props);\n\n this.state = {};\n\n this._instanceId = `${ProductComparisonPreview.className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n ProductComparisonPreview._displayedInstanceId = this._instanceId;\n\n this._hasUserInteractedWithComparison = false;\n }\n\n public componentDidMount(): void {\n if (this._instanceId !== ProductComparisonPreview._displayedInstanceId) {\n return;\n }\n\n this._loadProducts();\n ProductComparisonState.instance(this.props.context.request).listModifiedEvent.subscribe({\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n this._hasUserInteractedWithComparison = true;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data downloading.\n this._loadProducts();\n }\n });\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(this.props.context.request).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public render(): React.ReactNode {\n if (this._instanceId !== ProductComparisonPreview._displayedInstanceId) {\n return null;\n }\n\n const viewProps: IProductComparisonPreviewViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: ProductComparisonPreview.className,\n id: this._instanceId\n },\n collapseButton: this._renderCollapseButton(),\n isMainContentReady: false,\n hasUserInteractedWithComparison: this._hasUserInteractedWithComparison\n };\n\n const productData = this._getProdutComparisonDataByCatalogId(this.state.productsData ?? this.props.data.productsData?.result);\n\n if (!ArrayExtensions.hasElements(productData)) {\n return this.props.renderView(viewProps);\n }\n\n viewProps.isMainContentReady = true;\n\n const productsLimit = this._getProductsLimit();\n if (!ObjectExtensions.isNullOrUndefined(productsLimit)) {\n viewProps.subheaderText = this.props.resources.productComparisonPreviewHeaderTextWithLimit\n .replace('{0}', productData.length.toString())\n .replace('{1}', productsLimit.toString());\n }\n\n viewProps.isExpanded = this.state.isExpanded;\n viewProps.handleCollapseClick = this._handleCollapseClick;\n viewProps.productsMainInfo = this._getProductsMainInfo(productData);\n viewProps.previewGreyPlaceHolders = this._renderGreyPlaceHolders(productData);\n viewProps.productComparisonLink = getUrlSync('product-comparison', this.props.context.actionContext);\n viewProps.clearAllProductsFromTheComparison = this._clearAllProductsFromTheComparison;\n viewProps.removeProductFromList = this._removeProductFromList;\n viewProps.goToComparisonButton = this._renderGoToComparisonButton(viewProps.productComparisonLink);\n viewProps.clearAllButton = this._renderClearAllButton();\n\n return this.props.renderView(viewProps);\n }\n private _getProdutComparisonDataByCatalogId(productData: IProductComparisonProductData[] | undefined): IProductComparisonProductData[] {\n const catalogId = getCatalogId(this.props.context.request);\n const productByCatalogId = productData?.filter(product => product.catalogId === catalogId) ?? [];\n return productByCatalogId;\n }\n private async _loadProducts(): Promise {\n const items = ProductComparisonState.instance(this.props.context.request).items;\n const input = new GetProductsInPreviewProductComparisonInput(items);\n const productData = await getProductsInPreviewProductComparisonAction(input, this.props.context.actionContext);\n const productDataByCatalogId = this._getProdutComparisonDataByCatalogId(productData);\n this.setState({ productsData: productDataByCatalogId });\n this._getGreyPlaceHoldersCount(productDataByCatalogId);\n }\n\n private _getGreyPlaceHoldersCount(productData: IProductComparisonProductData[]): number | undefined {\n if (productData && ArrayExtensions.hasElements(productData)) {\n const limit = this._getProductsLimit();\n if (limit && this.props.context.app.config.displayGreyPlaceHolders) {\n const placeHolder = limit - productData.length;\n this.setState({ greyPlaceHoldersCount: placeHolder });\n return placeHolder;\n }\n }\n return;\n }\n\n private _getProductsMainInfo(products: IProductComparisonProductData[]): IProductComparisonPreviewProductMainInfo[] {\n const productImageContainerClassName = `${ProductComparisonPreview.tableRowClassName}__product-image-container`;\n const productImageClassName = `${productImageContainerClassName}__product-image`;\n const productNameClassName = `${ProductComparisonPreview.tableRowClassName}__product-name`;\n\n return products.map(productData => {\n const product = productData.product;\n\n let productNameLink: string | undefined;\n if (msdyn365Commerce.isBrowser) {\n const productUrl = getProductUrlSync(product, this.props.context.actionContext);\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${productData.catalogId}`);\n product.Dimensions?.map(dimension => {\n const dimensionValue = dimension.DimensionValue?.Value;\n if (!StringExtensions.isNullOrWhitespace(dimensionValue)) {\n const dimensionName = convertProductDimensionTypeToDimensionTypes(dimension.DimensionTypeValue);\n fullUrl.searchParams.set(dimensionName, dimensionValue!);\n }\n });\n productNameLink = fullUrl.href;\n }\n\n return {\n productNameLink,\n productData,\n removeFromComparisonButton: (\n \n ),\n productImage: (\n \n {this._renderProductImage(productImageClassName, productData.product)}\n \n ),\n productLink: (\n \n {productData.product.Name}\n \n )\n };\n });\n }\n\n /**\n * Represents product comparison preview view.\n * @returns Elements.\n */\n private _renderGreyPlaceHolders = (productData: IProductComparisonProductData[]): React.ReactNode[] | undefined => {\n const counts = this.state.greyPlaceHoldersCount;\n if (this.props.context.app.config.displayGreyPlaceHolders && counts! > 0) {\n const elements = [];\n for (let index = 0; index < counts!; index++) {\n elements.push(\n \n
\n \n );\n }\n return elements;\n }\n return;\n };\n\n /**\n * Removes the product from a list.\n * @param itemId - The id of a product to remove.\n */\n private readonly _removeProductFromList = (itemId: string): void => {\n ProductComparisonState.instance(this.props.context.request).removeItemById(itemId);\n this.setState(previousState => {\n return {\n productsData: previousState.productsData?.filter(item => item.itemId !== itemId)\n };\n });\n };\n\n /**\n * Toggle collapsing.\n */\n private readonly _handleCollapseClick: () => void = () => {\n this.setState(previousState => {\n return {\n isExpanded: !(previousState.isExpanded ?? this._hasUserInteractedWithComparison)\n };\n });\n };\n\n /**\n * Removes all products from the comparison.\n */\n private readonly _clearAllProductsFromTheComparison = () => {\n ProductComparisonState.instance(this.props.context.request).clearAll();\n this.setState({ productsData: [] });\n };\n\n private _getProductsLimit(): number | undefined {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n if (viewport === 'xs' || viewport === 'sm') {\n return this.props.context.app.config.productComparisonMobileProductsLimit;\n }\n return this.props.context.app.config.productComparisonDesktopProductsLimit;\n }\n\n /**\n * Retrieves product image react node.\n * @param className - Class name to use.\n * @param product - Product info.\n * @returns React node.\n */\n private _renderProductImage(className: string, product?: SimpleProduct): React.ReactNode | undefined {\n if (ObjectExtensions.isNullOrUndefined(product)) {\n return undefined;\n }\n\n const defaultImageSettingQ = 'w=140&h=140&m=6';\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: defaultImageSettingQ, w: 0, h: 0 },\n lg: { q: defaultImageSettingQ, w: 0, h: 0 },\n xl: { q: defaultImageSettingQ, w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n\n private _renderCollapseButton(): INodeProps {\n const shouldBeExpanded = this.state.isExpanded ?? this._hasUserInteractedWithComparison;\n const headerContainerClassName = `${ProductComparisonPreview.mainContainerClassName}__header_button`;\n let collapseClassName = `${ProductComparisonPreview.collapseButtonClassName}__expanded`;\n if (!shouldBeExpanded) {\n collapseClassName = `${ProductComparisonPreview.collapseButtonClassName}__collapsed`;\n }\n\n return {\n className: classnames(headerContainerClassName, ProductComparisonPreview.collapseButtonClassName, collapseClassName),\n onClick: this._handleCollapseClick,\n role: 'button',\n tabIndex: 0\n };\n }\n\n private _renderGoToComparisonButton(productComparisonLink: string | undefined): React.ReactNode {\n return (\n \n {this.props.resources.productComparisonCompareProductsButtonText}\n \n );\n }\n\n private _renderClearAllButton(): React.ReactNode {\n return (\n \n {this.props.resources.productComparisonClearAllProductsButtonText}\n \n );\n }\n}\n\nexport default ProductComparisonPreview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { DisplayTemplate, ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\nimport RefineItem from './refine-item';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { findMatchingRefinementCriterion, isRangeType } from './utilities';\n\n/**\n * Properties associated with the RefineSubmenu component.\n */\nexport interface IRefineSubmenuProps {\n tempRangeTypeTODO: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n productRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinerValues: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n isExpandedOnInitialLoad: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobile?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onUpdateRefiners(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine submenu state.\n */\nexport interface IRefineSubmenuState extends React.ComponentState {\n expanded: boolean;\n}\n\n/**\n *\n * The RefineSubmenu component renders the submenu category and child items.\n * This computed observes the stateful category hierarchy object.\n * @extends {React.PureComponent}\n */\nclass RefineSubmenu extends React.Component {\n constructor(props: IRefineSubmenuProps) {\n super(props);\n\n this._onToggleItem = this._onToggleItem.bind(this);\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\n\n const isExpanded = this.props.isExpandedOnInitialLoad;\n\n // If (this.props.productRefinerHierarchy.DataTypeValue === ProductRefinerValueDataTypeValue.Range) {\n // isExpanded = true;\n // }\n\n this.state = {\n expanded: isExpanded\n };\n }\n\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerHierarchy) {\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\n }\n\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\n return null;\n }\n\n const className = classnames(\n 'ms-refine-submenu',\n 'list-group',\n productRefinerHierarchy.KeyName // Deprecated because of the localization issues. Leaving for backward compatibility reasons.\n );\n\n return (\n
\n \n {productRefinerHierarchy.KeyName}\n \n \n {this._renderChildItems(productRefinerHierarchy)}\n \n
\n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (isRangeType(productRefinerHierarchy.DataTypeValue)) {\n return this._renderRange(productRefinerHierarchy);\n }\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n isMobile\n } = this.props;\n const isSingleSelect =\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n return (\n \n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\n )}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n key={index}\n index={index}\n context={context}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n telemetryContent={this.props.telemetryContent}\n productCountAriaLabel={productCountAriaLabel}\n refineItemAriaLabel={refineItemAriaLabel}\n refineItemsAriaLabel={refineItemsAriaLabel}\n singleProductCountAriaLabel={singleProductCountAriaLabel}\n isMobileView={isMobile}\n />\n );\n });\n return (\n \n {listItems}\n \n );\n }\n\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\n if (\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\n ) {\n return 'slider';\n }\n return 'input';\n }\n\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n minValueSliderThumbAriaLabel,\n maxValueSliderThumbAriaLabel\n } = this.props;\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n const rangeType = this._getRangeType(productRefinerHierarchy);\n const key = selectedRefinementCriterion\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\n : `not-selected-${index}`;\n return (\n
  • \n \n
  • \n );\n });\n return
      {listItems}
    ;\n }\n\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\n this.props.onUpdateRefiners(itemToggleNotification);\n }\n\n private _onToggleSubmenu(): void {\n this.setState(prevState => ({\n expanded: !prevState.expanded\n }));\n }\n}\n\nexport default RefineSubmenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\nexport interface IOrderSummaryProps {\n subTotalLabel: string;\n shippingLabel: string;\n taxLabel: string;\n orderTotalLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n totalDiscountsLabel: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n id: string;\n typeName: string;\n otherChargeLabel?: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isTaxIncludedInPrice?: boolean;\n isShowTaxBreakup?: boolean;\n}\n\nexport interface IOrderSummaryLines {\n subtotal: React.ReactNode;\n shipping?: React.ReactNode;\n otherCharge?: React.ReactNode;\n tax: React.ReactNode;\n orderTotal: React.ReactNode;\n totalDiscounts?: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IOrderSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\ninterface IShippingOrderLine {\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n canShip?: boolean;\n hasDeliveryMethod?: boolean;\n hasShippingMethod?: boolean;\n freightFee?: number;\n}\n\nconst OrderSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

    \n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

    \n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n const freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmountWithoutTax = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n const reactNodes: IOrderSummaryLines = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmountWithoutTax > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(\n props,\n -DiscountAmountWithoutTax,\n 'total-discounts',\n props.totalDiscountsLabel\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport checkoutStateDataAction from './checkout-state-data-action';\n\nexport * from './checkout-state';\nexport * from './checkout-state-data-action';\nexport * from './module-state-manager';\n\nexport { checkoutStateDataAction };\n","/* eslint-disable @typescript-eslint/no-floating-promises */\r\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\r\nimport React from 'react';\r\nimport ReactAutocomplete from 'react-autocomplete';\r\n//import AddressAlertComponent from './address-alert';\r\nexport interface IPostButtonProps {\r\n placeOrderText: string;\r\n selectStudent(e: string, event_guid: string,studName:string, studentValid:boolean): Promise;\r\n studentsArr?: IGetStudentDetailsData;\r\n isStudentSelected: boolean;\r\n canPlaceOrder: boolean;\r\n selectedStudent :string;\r\n selectedStudentName :string;\r\n}\r\n\r\nexport interface IGetStudentDetailsData {\r\n studentsCollection?: IStudentDetails[];\r\n}\r\n\r\nexport interface IStudentDetails {\r\n EMAIL: string;\r\n NAME: string;\r\n DEFAULT: boolean;\r\n ID: string;\r\n EVENT_GUID: string;\r\n}\r\n\r\ntype IDropdownState = {\r\n /**\r\n * @friendlyName selectedIndex\r\n * @description selected index\r\n */\r\n selectedIndex: string;\r\n value: string;\r\n event_guid: string;\r\n itemID: string;\r\n isStudValid : any;\r\n};\r\n\r\n\r\nexport class StudentDetailsClass extends React.Component{\r\n //studValidation: boolean = false;\r\n // studValidation = false;\r\n constructor(props: IPostButtonProps) {\r\n super(props);\r\n this.state = {\r\n selectedIndex: \"\",\r\n value: props.selectedStudentName ||\"\",\r\n event_guid: \"\",\r\n itemID: props.selectedStudent || \"\",\r\n isStudValid:true\r\n };\r\n }\r\n\r\n componentDidMount(){\r\n\r\n }\r\n\r\n compare(a: any, b: any) {\r\n // Use toUpperCase() to ignore character casing\r\n const bandA = a.band.toUpperCase();\r\n const bandB = b.band.toUpperCase();\r\n\r\n let comparison = 0;\r\n if (bandA > bandB) {\r\n comparison = 1;\r\n } else if (bandA < bandB) {\r\n comparison = -1;\r\n }\r\n return comparison;\r\n }\r\n // eslint-disable-next-line no-irregular-whitespace\r\n private ValidateStudent = async(val :string, arr:any[]) : Promise =>{\r\n\r\n // eslint-disable-next-line eqeqeq\r\n if(arr.some(obj => obj.label === val) || val == \"\")\r\n {\r\n //this.studValidation = true;\r\n this.setState({isStudValid : true});\r\n localStorage.setItem(\"studentName\",this.state.value);\r\n localStorage.setItem(\"studentID\", this.state.itemID);\r\n localStorage.setItem(\"ValidStudent\",\"true\");\r\n //this.setState({itemID:val});\r\n //alert(\"select valid stud\");\r\n }\r\n else\r\n {\r\n this.setState({isStudValid : false});\r\n localStorage.setItem(\"ValidStudent\",\"false\");\r\n }\r\n };\r\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\r\n render(): JSX.Element{\r\n const {placeOrderText, selectStudent, studentsArr, isStudentSelected, canPlaceOrder} = this.props;\r\n var validationCheck = (canPlaceOrder && !isStudentSelected);\r\n\r\n var arr: any = [];\r\n /* var obj = new Object();\r\n var obj1 = new Object();\r\n // // const objs = [{\"id\" : \"121\",\"label\" : \"gana\"},{\"id\" : \"122\",\"label\" : \"sushma\"}];\r\n obj[\"id\"] = \"123\";//item.ID;\r\n obj[\"label\"] =\"gana test space\"; //item.NAME;//\r\n obj1[\"id\"] = \"124\";//item.ID;\r\n obj1[\"label\"] =\"sushma\";\r\n arr.push(obj1);\r\n arr.push(obj);\r\n */\r\n\r\n //uncomment\r\n studentsArr?.studentsCollection?.forEach(item => {\r\n var obj = new Object();\r\n obj[\"id\"] = item.ID;\r\n obj[\"label\"] =item.NAME;//\r\n arr.push(obj);\r\n // eslint-disable-next-line eqeqeq\r\n if(this.state.event_guid == \"\"){\r\n this.setState({\r\n event_guid: item.EVENT_GUID\r\n });\r\n }\r\n });\r\n return(\r\n
    \r\n Please Select Student\r\n \r\n\r\n Please enter a valid student\r\n\r\n item?.label?.toLowerCase().indexOf(value.toLowerCase()) > -1}\r\n getItemValue={(item: any) => item.label}\r\n renderItem={(item: any, highlighted: any) =>\r\n (\r\n {item.label}\r\n
    )\r\n }\r\n value={this.state.value}\r\n onChange={(e: any) => { this.setState({ value: e.target.value });\r\n this.ValidateStudent(e.target.value, arr);\r\n selectStudent(this.state.itemID, this.state.event_guid,this.state.value,this.state.isStudValid);\r\n // eslint-disable-next-line react/jsx-no-undef\r\n // alert: \r\n }}\r\n onSelect={( _value: string, item: any) => {\r\n console.log(item); this.setState({ value: item.label, itemID: item.id}, () => {\r\n this.ValidateStudent(_value,arr);\r\n // eslint-disable-next-line eqeqeq\r\n selectStudent(this.state.itemID, this.state.event_guid,this.state.value,this.state.isStudValid);\r\n });\r\n }}\r\n />\r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default StudentDetailsClass;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ProductListInventoryFilteringOptions } from '../actions';\nimport { IChoiceSummaryProps } from './choice-summary.props';\nimport { isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n}\n\n/**\n * ChoiceSummary component.\n */\n@observer\nexport default class ChoiceSummary extends React.PureComponent {\n private readonly closeButtonGlyph: string = 'msi-close-btn';\n\n private readonly payLoad: IPayLoad;\n\n @computed get selectedRefinersMap(): IRefinerMap[] {\n let { selectedChoices } = this.props;\n const { channelInventoryConfigurationId, refinerHierarchy } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (this.props.context?.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n selectedChoices = selectedChoices.filter(choice => {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, choice))\n );\n return parent && parent.RecordId !== channelInventoryConfigurationId;\n });\n }\n return selectedChoices.map((selectedRefiner: ProductRefinerValue) => {\n return {\n key: this._getKeyForRefinerValue(selectedRefiner),\n value: selectedRefiner\n } as IRefinerMap;\n });\n }\n\n constructor(props: Readonly) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\n const items = this.selectedRefinersMap;\n this.payLoad.contentAction.etext = clearAllText;\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n
    \n {items.length > 0 && label && {label}}\n
      \n {items.map((item: IRefinerMap) => {\n this.payLoad.contentAction.etext = item.key;\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
    • \n \n {item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString ||\n item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString}\n \n \n
    • \n );\n })}\n
    \n {items.length > 0 && clearAllText && (\n \n {clearAllText}\n \n )}\n
    \n );\n }\n\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue): string {\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry, refinerValues } = this.props;\n const overallFormat = choiceFormat || '{1}';\n const rangeFormat = choiceRangeValueFormat;\n let refinerName = '';\n if (refinerHierarchy && refinerHierarchy.find) {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\n );\n\n if (!parent) {\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\n } else {\n refinerName = parent.KeyName || '';\n }\n }\n\n let refinerValueName: string;\n if (isRangeType(productRefinerValue.DataTypeValue)) {\n refinerValueName = rangeFormat\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\n } else if (productRefinerValue.RefinerRecordId === 0) {\n const filterValue = refinerValues?.Values.find(r => r.LeftValueBoundString === productRefinerValue.LeftValueBoundString);\n refinerValueName = (filterValue ? filterValue.LeftValueBoundLocalizedString : productRefinerValue.LeftValueBoundString) || '';\n } else {\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n }\n\n if (refinerName === 'Rating' || refinerName === 'Price') {\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n }\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}_${refinerName}`);\n }\n\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\n if (!amount || !currency) {\n this.props.telemetry.trace('[choice-summary] could not format price');\n return amount || '';\n }\n let result = amount;\n\n try {\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\n } catch (error) {\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const target = e.currentTarget as HTMLElement;\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\n\n if (this.props.onChoiceClicked) {\n this.props.onChoiceClicked({\n clearAll,\n itemClicked: target,\n choiceClicked: selectedRefiner,\n nextItemToFocus: target.nextSibling as HTMLElement\n });\n }\n };\n\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\n const result = this.selectedRefinersMap.find(selected => itemClicked.id === selected.key);\n return (result && result.value) || undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModule } from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport isMatch from 'lodash/isMatch';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { getModuleStates, updateModuleStates } from './module-state';\nimport { IModuleState, IModuleStateManager, IModuleStateProps, IModuleStates } from './module-state.data';\n\nexport interface IProps extends IModule, IModuleStateProps {\n enableControl?: boolean;\n}\n\nconst sectionContainerModuleId = 'section-container';\nconst paymentInstrumentModuleId = 'payment-instrument';\n\nconst withModuleState =

    (WrappedComponent: React.ComponentType

    ): React.ComponentType

    => {\n /**\n *\n * ModuleState component.\n * @extends {React.Component

    }\n */\n @observer\n class ModuleState extends React.Component

    {\n constructor(props: P) {\n super(props);\n this.initializeState();\n }\n\n public shouldComponentUpdate(nextProps: IModuleStateProps): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { id } = this.props;\n return ;\n }\n\n private readonly initializeState = (): void => {\n const { id, typeName, context } = this.props;\n const states = getModuleStates(context.actionContext);\n if (!states) {\n this.props.telemetry.error('withModuleState initializeState() - states not found');\n return;\n }\n\n if (states[id]) {\n // State has been initialized\n return;\n }\n\n updateModuleStates(\n {\n ...states,\n [id]: {\n id,\n typeName,\n hasInitialized: false,\n hasError: false,\n isRequired: true,\n isCancellable: true,\n isSubmitContainer: false,\n status: undefined,\n childIds: []\n }\n },\n context.actionContext\n );\n };\n\n /**\n * GetModuleStateManager\n * Get module state manager by id.\n * @param id\n */\n private readonly getModuleStateManager = (id: string): IModuleStateManager => {\n const moduleState = this.get()[id];\n return {\n ...moduleState!,\n hasInitialized: this.validate(id, { hasInitialized: true }, true), // All has initialized is initialized\n hasError: this.validate(id, { hasError: true }), // Partial has error is error\n isReady: this.validate(id, { status: 'ready' }, true, true), // All ready is ready (exclued disabled and skipped)\n isUpdating: this.validate(id, { status: 'updating' }), // Partial updating is updating\n isPending: this.validate(id, { status: 'pending' }), // Partial pending is pending\n isSkipped: this.validate(id, { status: 'skipped' }, true, true), // All skipped is skipped (exclued disabled)\n isDisabled: this.validate(id, { status: 'disabled' }, true), // All disabled is disabled\n isCancelAllowed: this.validate(id, { isCancellable: true }, true, true), // Partial not allowed is not allowed\n shouldSubmitContainer: this.validate(id, { isSubmitContainer: true }), // Partial submit is submit.\n hasExternalSubmitGroup: this.hasExternalSubmitGroup(),\n hasModuleState: this.hasModuleState(id),\n setIsRequired: (value: boolean): void => {\n this.update(id, { isRequired: value });\n },\n setIsCancellable: (value: boolean): void => {\n this.update(id, { isCancellable: value });\n },\n setIsSubmitContainer: (value: boolean): void => {\n this.update(id, { isSubmitContainer: value });\n },\n setHasError: (value: boolean): void => {\n this.update(id, { hasError: value });\n },\n onReady: (): void => {\n this.update(id, { status: 'ready' });\n },\n onUpdating: (): void => {\n this.update(id, { status: 'updating' });\n },\n onPending: (): void => {\n this.update(id, { status: 'pending' });\n },\n onSkip: (): void => {\n this.update(id, { status: 'skipped' });\n },\n onDisable: (): void => {\n this.update(id, { status: 'disabled' });\n },\n getModule: (moduleId: string): IModuleStateManager => this.getModuleStateManager(moduleId),\n getModuleByTypeName: (typeName: string): IModuleStateManager => this.getModuleStateManagerByTypeName(typeName),\n init: (options?: Partial): void => {\n if (moduleState?.hasInitialized) {\n // State has been initialized\n return;\n }\n this.update(id, {\n hasInitialized: true,\n ...options\n });\n }\n };\n };\n\n /**\n * GetModuleStateManagerByTypeName\n * Get module state manager by type name.\n * @param typeName\n */\n private readonly getModuleStateManagerByTypeName = (typeName: string): IModuleStateManager => {\n const moduleStates = getModuleStates(this.props.context.actionContext);\n const moduleState = Object.values(moduleStates).find(_moduleState => _moduleState?.typeName === typeName);\n return this.getModuleStateManager((moduleState && moduleState.id) || '');\n };\n\n /**\n * Get\n * Get all module states.\n */\n private readonly get = (): IModuleStates => {\n return getModuleStates(this.props.context.actionContext);\n };\n\n /**\n * Update\n * Update module state.\n * @param id\n * @param value\n */\n private readonly update = (id: string, value: Partial): void => {\n // Console.log('withModuleState - update', id, value);\n const modules = this.get();\n if (!modules[id]) {\n this.props.telemetry.error(`withModuleState update() - Module state with id ${id} is not found.`);\n return;\n }\n modules[id] = {\n ...modules[id]!,\n ...value\n };\n };\n\n private readonly _validateLeaf = (id: string, source: Partial): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n return isMatch(module, source);\n };\n\n private readonly _validateContainer = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n // Module doesn't has module state\n return !!allMatched;\n }\n\n if (skipSkippableItem && (module.status === 'disabled' || module.status === 'skipped')) {\n // Skip disabled or skipped modules\n return !!allMatched;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n let childIds = module.childIds;\n\n if (this.props.context.app.config.shouldEnableSinglePaymentAuthorizationCheckout) {\n // For new checkout flow, we bypass the isReady check for payment section container to enable the place order button.\n childIds = childIds.filter(childId => !this._isPaymentSectionContainer(childId));\n }\n\n // It is container module\n const method = allMatched ? 'every' : 'some';\n return childIds[method](childId => this._validateContainer(childId, source, allMatched, skipSkippableItem));\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n if (!moduleId.includes(sectionContainerModuleId)) {\n return false;\n }\n\n const modules = this.get();\n const module = modules[moduleId];\n\n if (module && ArrayExtensions.hasElements(module.childIds.filter(childId => childId.includes(paymentInstrumentModuleId)))) {\n return true;\n }\n\n return false;\n };\n\n /**\n * Validate\n * Validate current module and all its child module match the provided condition.\n * @param id\n * @param source\n * @param allMatched\n * @param skipSkippableItem\n */\n private readonly validate = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n // It is container module\n return this._validateContainer(id, source, allMatched, skipSkippableItem);\n };\n\n /**\n * HasExternalSubmitGroup\n * Module will use external submit group.\n */\n private readonly hasExternalSubmitGroup = (): boolean => {\n return !!this.props.enableControl;\n };\n\n /**\n * HasModuleState\n * Module is using module state manager.\n * @param id\n */\n private readonly hasModuleState = (id: string): boolean => {\n const modules = this.get();\n const module = modules[id];\n return !!module;\n };\n }\n\n return ModuleState;\n};\n\nexport default withModuleState;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport msdyn365Commerce from '@msdyn365-commerce/core';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductComparisonPreviewViewProps, ProductComparisonPreview } from './product-comparison-preview';\n\n/**\n * Represents product comparison preview view.\n * @param props - View props for product comparison preview.\n * @returns Functional component of product comparison preview.\n */\nexport const ProductComparisonPreviewViewFunctionalComponent: React.FC = props => {\n if (!props.isMainContentReady) {\n return null;\n }\n\n const shouldBeExpanded = props.isExpanded ?? props.hasUserInteractedWithComparison;\n\n const containerClassName = classnames(\n ProductComparisonPreview.mainContainerClassName,\n shouldBeExpanded ? '' : `${ProductComparisonPreview.mainContainerClassName}__collapsed`\n );\n\n return (\n \n \n \n \n \n \n \n \n \n {props.resources.productComparisonPreviewHeaderText}\n \n \n {props.subheaderText}\n \n \n \n \n \n \n \n {props.productsMainInfo?.map(info => {\n return (\n \n {info.removeFromComparisonButton}\n {info.productImage}\n \n );\n })}\n {props.previewGreyPlaceHolders}\n \n \n {props.productsMainInfo?.map(info => {\n return (\n \n {msdyn365Commerce.isBrowser ? info.productLink : undefined}\n \n );\n })}\n \n \n \n \n \n {props.clearAllButton}\n {props.goToComparisonButton}\n \n \n \n \n );\n};\n\nexport default ProductComparisonPreviewViewFunctionalComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n {` `}\n {separator}\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 { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Address, GiftCard, TenderLine, TokenizedPaymentCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { action, computed, observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a checkout.\n */\nexport class CheckoutState {\n @observable private _tokenizedPaymentCard: TokenizedPaymentCard | undefined;\n\n @computed public get tokenizedPaymentCard(): Readonly | undefined {\n return this._tokenizedPaymentCard;\n }\n\n @observable private _tenderLine: TenderLine | undefined;\n\n @computed public get tenderLine(): Readonly | undefined {\n return this._tenderLine;\n }\n\n @observable private _billingAddress: Address | undefined;\n\n @computed public get billingAddress(): Readonly

    | undefined {\n return this._billingAddress;\n }\n\n @observable private _shippingAddress: Address | undefined;\n\n @computed public get shippingAddress(): Readonly
    | undefined {\n return this._shippingAddress;\n }\n\n @observable private _cardPrefix: string | undefined;\n\n @computed public get cardPrefix(): Readonly | undefined {\n return this._cardPrefix;\n }\n\n @observable private _giftCards: GiftCard[] = [];\n\n @computed public get giftCards(): readonly GiftCard[] {\n return this._giftCards;\n }\n\n @observable private _giftCardExtends: IGiftCardExtend[] = [];\n\n @computed public get giftCardExtends(): readonly IGiftCardExtend[] {\n return this._giftCardExtends;\n }\n\n @observable private _loyaltyCardNumber?: string;\n\n @computed public get loyaltyCardNumber(): Readonly | undefined {\n return this._loyaltyCardNumber;\n }\n\n @observable private _loyaltyAmount: number = 0;\n\n @computed public get loyaltyAmount(): Readonly | number {\n return this._loyaltyAmount;\n }\n\n @observable private _guestCheckoutEmail: string = '';\n\n @computed public get guestCheckoutEmail(): Readonly | string {\n return this._guestCheckoutEmail;\n }\n\n @observable private _isTermsAndConditionAccepted: boolean = false;\n\n @computed public get isTermsAndConditionAccepted(): Readonly | boolean {\n return this._isTermsAndConditionAccepted;\n }\n\n @observable private _customerAccountAmount: number = 0;\n\n @computed public get customerAccountAmount(): Readonly | number {\n return this._customerAccountAmount;\n }\n\n @action\n public updateTokenizedPaymentCard(newTokenizedPaymentCard: TokenizedPaymentCard): void {\n this._tokenizedPaymentCard = newTokenizedPaymentCard;\n }\n\n @action\n public updateTenderLine(newTenderLine: TenderLine | undefined): void {\n this._tenderLine = newTenderLine;\n }\n\n @action\n public updateShippingAddress(newShippingAddress: Address): void {\n this._shippingAddress = newShippingAddress;\n }\n\n @action\n public updateBillingAddress(newBillingAddress: Address): void {\n this._billingAddress = newBillingAddress;\n }\n\n @action\n public updateCardPrefix(newCardPrefix: string): void {\n this._cardPrefix = newCardPrefix;\n }\n\n @action\n public removeGiftCard(giftCardNumber: string): void {\n this._giftCards = this._giftCards.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public removeGiftCardExtend(giftCardNumber: string): void {\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public addGiftCard(giftCard: GiftCard): void {\n this._giftCards = [giftCard, ...this._giftCards];\n }\n\n @action\n public addGiftCardExtend(giftCard: IGiftCardExtend): void {\n this._giftCardExtends = [giftCard, ...this._giftCards];\n }\n\n @action\n public updateLoyaltyCardNumber(newLoyaltyCardNumber: string): void {\n this._loyaltyCardNumber = newLoyaltyCardNumber;\n }\n\n @action\n public updateLoyaltyAmount(newAmount: number): void {\n this._loyaltyAmount = newAmount;\n }\n\n @action\n public updateGuestCheckoutEmail(newGuestCheckoutEmail: string): void {\n this._guestCheckoutEmail = newGuestCheckoutEmail;\n }\n\n @action\n public updateTermsAndConditionsAcceptance(newIsTermsAndConditionAccepted: boolean): void {\n this._isTermsAndConditionAccepted = newIsTermsAndConditionAccepted;\n }\n\n @action\n public updateCustomerAccountAmount(newAmount: number): void {\n this._customerAccountAmount = newAmount;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductSearchResult, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { searchOrgUnitLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\ninterface IProductSearchResultItems {\n storeSelectorStateManager:any;\n cart:any;\n orgUnitNumber:string;\n products: ProductSearchResult[];\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n allowBackNavigation?: boolean;\n telemetryContent: ITelemetryContent;\n quickviewSlot?: {} | null | undefined;\n productComparisonButton?: {} | null | undefined;\n channelInventoryConfigurationId?: number;\n isPriceMinMaxEnabled?: boolean;\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n setAddToCartLoader:any;\n}\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\nasync function pickupInStoreOnClick(context:any,orgUnitNumber:any,cart:any,product:any, quantity:number,setAddToCartLoader:any): Promise {\n setAddToCartLoader(true);\n const orgUnit = await searchOrgUnitLocationsAsync({ callerContext: context.actionContext }, { OrgUnitNumber: orgUnitNumber });\n const orgUnitLocation = getOrgUnitLocation(orgUnit && orgUnit[0]);\n return cart && cart.addProductToCart({ product: product, count: quantity, location: orgUnitLocation })\n .then((result:any) => {\n setAddToCartLoader(false);\n if (result.status === 'FAILED' && result.substatus === 'MAXQUANTITY') {\n // props.telemetry.debug('Unable to add product to cart');\n console.log('Unable to add product to cart');\n } else {\n console.log('Succesfully Added Product');\n // if ((behavior === undefined || behavior === 'goToCart')) {\n // const navigationUrl = getUrlSync('cart', context.actionContext);\n\n // if (result.status === 'SUCCESS' && navigationUrl) {\n // window.location.assign(navigationUrl);\n // }\n // } else if (behavior === 'showModal') {\n // callbacks.updateErrorState({\n // configureErrors: {}\n // });\n // }\n }\n }).catch((error: Error) => {\n console.log('Unable to add product to cart');\n // if (props.telemetry) {\n // props.telemetry.exception(error);\n // props.telemetry.debug('Unable to add product to cart');\n // }\n return;\n });\n}\n\nexport const ProductSearchResultItems: React.FC = ({\n products,\n context,\n imageSettings,\n resources,\n moduleType,\n moduleId,\n allowBackNavigation,\n telemetryContent,\n quickviewSlot,\n productComparisonButton,\n channelInventoryConfigurationId,\n isPriceMinMaxEnabled,\n productsDimensionAvailabilities,\n cart,\n storeSelectorStateManager,\n orgUnitNumber,\n setAddToCartLoader,\n}) => {\n const [productQuantity, setProductQuantyty] = React.useState({});\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n const onClick = (product:any, quantity:number) => pickupInStoreOnClick(context,orgUnitNumber,cart,product,quantity,setAddToCartLoader);\n return (\n
      \n {products.map((product: ProductSearchResult, index: number) => (\n
    • \n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n
      \n
      \n
      \n
      \n setProductQuantyty(\n {...productQuantity,[index]:productQuantity?.[index] ? productQuantity?.[index] - 1 : 1}\n )}\n >-\n setProductQuantyty({...productQuantity,[index]:Number(e.target.value)})}\n />\n setProductQuantyty(\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands, security/detect-object-injection\n {...productQuantity,[index]:productQuantity?.[index] ? productQuantity?.[index] + 1 : 2}\n )}>+\n
      \n {/*
      \n setProductQuantyty({...productQuantity,[index]:newQuantity})}\n inputQuantityAriaLabel={resources.productQuantityHeading}\n />\n
      */}\n onClick(product, productQuantity?.[index] || 1)}\n color='secondary'\n aria-label={resources.findInStoreLinkText}\n disabled={cart === undefined}\n >\n \n \n \n \n {resources.findInStoreLinkText}\n \n \n
      \n
      \n
      \n
    • \n ))}\n
    \n );\n};\n\nexport function getOrgUnitLocation(orgUnitLocation?: OrgUnitLocation): OrgUnitLocation {\n return {\n OrgUnitNumber: orgUnitLocation && orgUnitLocation.OrgUnitNumber,\n PostalAddressId: orgUnitLocation && orgUnitLocation.PostalAddressId,\n OrgUnitName: orgUnitLocation && orgUnitLocation.OrgUnitName,\n Address: orgUnitLocation && orgUnitLocation.Address,\n Street: orgUnitLocation && orgUnitLocation.Street,\n StreetNumber: orgUnitLocation && orgUnitLocation.StreetNumber,\n City: orgUnitLocation && orgUnitLocation.City,\n DistrictName: orgUnitLocation && orgUnitLocation.DistrictName,\n BuildingCompliment: orgUnitLocation && orgUnitLocation.BuildingCompliment,\n Postbox: orgUnitLocation && orgUnitLocation.Postbox,\n Country: orgUnitLocation && orgUnitLocation.Country,\n Zip: orgUnitLocation && orgUnitLocation.Zip,\n County: orgUnitLocation && orgUnitLocation.County,\n CountyName: orgUnitLocation && orgUnitLocation.CountyName,\n State: orgUnitLocation && orgUnitLocation.State,\n StateName: orgUnitLocation && orgUnitLocation.StateName\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 React from 'react';\n\ninterface ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\n \n {' '}\n {text}{' '}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\nimport debounce from 'lodash/debounce';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\n\ntype InputType = 'Min' | 'Max';\n\nexport type RangeRefineItemType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemProps extends IRefineItemProps {\n rangeType: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n sliderKey?: string;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n touchedMin: boolean;\n touchedMax: boolean;\n sliderId: string;\n minValue: string | undefined;\n maxValue: string | undefined;\n labels: ISliderLabel[];\n sliderThumbs: ISliderThumbProps[];\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItem extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n @computed get currencyCode(): string {\n return this.props.productRefinerValue.UnitText || '';\n }\n\n public constructor(props: IRangeRefineItemProps) {\n super(props);\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\n this._changeMin = this._changeMin.bind(this);\n this._changeMax = this._changeMax.bind(this);\n this._finishChangeMin = this._finishChangeMin.bind(this);\n this._finishChangeMax = this._finishChangeMax.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n\n const { selectedRefinementCriterion } = this.props;\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.state = {\n isChecked: false,\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n touchedMin: false,\n touchedMax: false,\n sliderId,\n minValue,\n maxValue,\n labels,\n sliderThumbs\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\n if (previousProps !== this.props) {\n this.updateSliderProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\n refineItemCommonProps.telemetry.error(\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\n );\n return undefined;\n }\n\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n\n return this._renderSlider();\n }\n\n /**\n * Function to update slider props.\n */\n private updateSliderProps(): void {\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\n }\n\n /**\n * Function to create the labels for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param minPrice - Slider min value.\n * @param maxPrice - Slider max value.\n * @returns Array labels.\n */\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\n return [\n {\n labelId: `${sliderId}_start`,\n labelString: `${minPrice}`,\n labelPositioning: 'start'\n },\n {\n labelId: `${sliderId}_end`,\n labelString: `${maxPrice}`,\n labelPositioning: 'end'\n }\n ];\n };\n\n /**\n * Function to create the slider thumbs for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param sliderKey - Unique key for slider.\n * @param selectedMin - Slider selected min value.\n * @param selectedMinPrice - Slider selected min price.\n * @param selectedMax - Slider selected max value.\n * @param selectedMaxPrice - Slider selected max price..\n * @param maxPrice - Slider max price..\n * @returns Slider Thumb Props.\n */\n private readonly getSliderThumbs = (\n sliderId: string,\n sliderKey: string,\n selectedMin: string,\n selectedMinPrice: string,\n selectedMax: string | undefined,\n selectedMaxPrice: string,\n maxPrice: string\n ): ISliderThumbProps[] => {\n const sliderThumbDefaultValue = 0;\n return [\n {\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMinPrice}`\n },\n {\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\n value: Number(selectedMax) || Number(maxPrice),\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMaxPrice}`\n }\n ];\n };\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n // To enable price formatting of selected fields, this is the approach:\n // initial value: min=0 formatted as price, max=undefined\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\n // onBlur: validate and format entered value as price\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\n return (\n
    \n \n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n
    \n );\n }\n\n private _renderSlider(): JSX.Element | undefined {\n const { isDisabled, sliderKey } = this.props;\n const ariaAttributes = {\n 'aria-disabled': isDisabled\n };\n\n return (\n \n );\n }\n\n private _changeMin(event: React.FocusEvent): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\n const selectedKey = `selected${inputType}`;\n const touchedKey = `touched${inputType}`;\n this.setState({\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\n [touchedKey]: true\n });\n }\n\n private _finishChangeMin(event: React.FocusEvent): boolean {\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\n\n const maxNum = max ? Number(max) : undefined;\n\n if (isNaN(minInput)) {\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\n this._focus('Min');\n return false;\n }\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minInput,\n rangeEnd: maxNum\n });\n return true;\n }\n this._focus('Min');\n\n return false;\n }\n\n private _finishChangeMax(event: React.FocusEvent): boolean {\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMax: selectedMaxValue,\n maxTouched: false\n });\n const maxInput = Number(selectedMaxValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\n\n const minNum = Number(min);\n\n if (isNaN(maxInput)) {\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\n this._focus('Max');\n return false;\n }\n\n if (this._validateRange(minNum, maxInput)) {\n if (productRefinerValue) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minNum,\n rangeEnd: maxInput\n });\n } else {\n this._focus('Max');\n }\n return true;\n }\n\n return false;\n }\n\n private _focus(inputType: InputType): void {\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\n\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.focus();\n }\n }, 50);\n }\n\n private _getFormattedSelectedValue(\n selected: string | undefined,\n touched: boolean,\n validationError: string | undefined\n ): string | undefined {\n if (touched || validationError || selected === undefined) {\n return selected;\n }\n return this._formatPrice(selected);\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _formatPrice(amount: string | undefined): string {\n if (this.props.productRefinerValue.RefinerRecordId === 0) {\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\n return result;\n }\n return amount || '';\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n\n // NOTE: Fix types once Shared Components build pipeline bug fixed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdate(sliderChangeNotification: any): void {\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\n if (sliderChangeNotification.eventType !== 'mousemove') {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\n if (sliderChangeNotification.id) {\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\n if (element) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n }\n\n private _handleRangeTooltipText(tooltip: number): string {\n return this._formatPrice(`${tooltip}`);\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 React from 'react';\n\ninterface IErrorMessage {\n text?: string;\n}\n\nexport const ErrorMessage: React.FC = ({ text }) => {\n return (\n \n
    \n {` `}\n {text}\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyAdd, ICheckoutLoyaltyRewardPoint, ICheckoutLoyaltyShow, ICheckoutLoyaltyViewProps } from './checkout-loyalty';\n\nconst AddCheckoutLoyalty: React.FC = ({\n heading,\n cardNumber,\n drawer,\n rewardPoints,\n loyaltyAmountContainer,\n appliedLoyaltyAmountContainer,\n loyaltyAmountLabel,\n loyaltyAmountInput,\n loyaltyAmountApplyButton,\n showAppliedAmount,\n loyaltyAmountAppliedText,\n loyaltyAmountAppliedPrice,\n loyaltyAmountRemoveButton\n}) => {\n return (\n <>\n {heading}\n {cardNumber}\n \n {rewardPoints.map((rewardPoint: ICheckoutLoyaltyRewardPoint) => {\n return (\n \n {rewardPoint.title}\n {rewardPoint.availablePointsText}\n {rewardPoint.activePoints}\n {rewardPoint.expiringPointsText}\n {rewardPoint.expiringPoints}\n \n );\n })}\n \n \n {loyaltyAmountLabel}\n {loyaltyAmountInput}\n {loyaltyAmountApplyButton}\n {showAppliedAmount && (\n \n {loyaltyAmountAppliedText}\n {loyaltyAmountAppliedPrice}\n {loyaltyAmountRemoveButton}\n \n )}\n \n \n );\n};\n\nconst ShowCheckoutLoyalty: React.FC = ({ heading, coveredAmountText, amount }) => {\n return (\n <>\n {heading}\n {coveredAmountText}\n {amount}\n \n );\n};\n\nconst CheckoutLoyaltyView: React.FC = props => {\n const { checkoutLoyalty, alert, viewState, showLoyalty, addLoyalty } = props;\n\n return (\n \n {alert}\n {viewState.isShowLoyalty && }\n {viewState.isShowAddLoyalty && }\n \n );\n};\n\nexport default CheckoutLoyaltyView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\n/**\n * The payment error.\n */\nexport interface IPaymentError {\n title: string;\n message: string;\n className?: string;\n}\n\n/**\n * The payment error.\n * @param param0 - First param.\n * @param param0.title - Title.\n * @param param0.message - Message.\n * @param param0.className - ClassName.\n * @returns React node.\n */\nexport const ErrorComponent: React.FC = ({ title, message, className = 'ms-checkout-payment-instrument' }) => (\n
    \n

    {title}

    \n

    {message}

    \n
    \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\n\ninterface IFeatureSearchResultItem {\n product: SimpleProduct | null;\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n recommendation?: string;\n}\n\nexport const FeatureSearchResultItem: React.FC = ({\n product,\n context,\n imageSettings,\n resources,\n telemetryContent,\n recommendation\n}) => {\n if (product === null) {\n return null;\n }\n\n const productName = product.Name;\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\n const fallbackImage = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\n const heading =\n recommendation && recommendation === 'descriptions' ? resources.featureSimilarDescriptionTitle : resources.featureSimilarLooksTitle;\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n
    \n \n
    \n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name,\n fallbackImage,\n context.actionContext.requestContext\n )}\n
    \n \n
    \n

    {heading}

    \n {renderProductTitle(product?.Name)}\n
    \n
    \n \n
    \n
    \n );\n};\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string,\n fallbackImage?: string,\n context?: IRequestContext\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings,\n fallBackSrc: fallbackImage\n };\n return ;\n}\n\nfunction renderProductTitle(title?: string): JSX.Element | null {\n return

    {title}

    ;\n}\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ISearchResultContainer containerModule 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\nimport * as React from 'react';\r\n\r\nexport const enum expandRefinersCount {\r\n all = 'all',\r\n one = 'one',\r\n two = 'two',\r\n three = 'three',\r\n four = 'four'\r\n}\r\n\r\nexport interface ISearchResultContainerConfig extends Msdyn365.IModuleConfig {\r\n itemsPerPage?: number;\r\n allowBackNavigation?: boolean;\r\n imageSettings?: Msdyn365.IImageSettings;\r\n expandRefinersCount?: expandRefinersCount;\r\n disableHierarchy?: boolean;\r\n includeAttributes?: boolean;\r\n enableAffiliationBasedPricing?: boolean;\r\n updateRefinerPanel?: boolean;\r\n className?: string;\r\n clientRender?: boolean;\r\n orgUnitNumber?: string;\r\n}\r\n\r\nexport interface ISearchResultContainerResources {\r\n noResultsForRefinersText: string;\r\n resultCategoryNotFoundText: string;\r\n resultSearchNotFoundText: string;\r\n paginationAriaLabel: string;\r\n priceFree: string;\r\n priceRangeSeparator: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n ratingAriaLabel: string;\r\n flipperNext: string;\r\n flipperPrevious: string;\r\n searchTextPrefix: string;\r\n numberOfProducts: string;\r\n oneProduct: string;\r\n categoryLinkAriaLabel: string;\r\n sortByDropdownLabel: string;\r\n sortByOptionNameAsc: string;\r\n sortByOptionNameDesc: string;\r\n sortByOptionPriceAsc: string;\r\n sortByOptionPriceDesc: string;\r\n sortByOptionRatingDesc: string;\r\n sortByOptionBestSelling: string;\r\n sortByOptionNewScore: string;\r\n sortByOptionTrendingScore: string;\r\n sortByOptionRelevanceDesc: string;\r\n placeholderTextMax: string;\r\n minLabel: string;\r\n maxLabel: string;\r\n rangeNameFormat: string;\r\n validationErrorNotNumber: string;\r\n validationErrorNotRange: string;\r\n clearAllText: string;\r\n choiceSummaryLabel: string;\r\n choiceFormat: string;\r\n choiceRangeValueFormat: string;\r\n choiceAriaLabel: string;\r\n closeAriaLabel: string;\r\n modalTitle: string;\r\n modalCloseButtonText: string;\r\n minValueSliderThumbAriaLabel: string;\r\n maxValueSliderThumbAriaLabel: string;\r\n featureSimilarLooksTitle: string;\r\n featureSimilarDescriptionTitle: string;\r\n productCountAriaLabel: string;\r\n singleProductCountAriaLabel: string;\r\n swatchItemAriaLabel: string;\r\n refineItemsAriaLabel: string;\r\n refineItemAriaLabel: string;\r\n findInStoreLinkText: string;\r\n productQuantityHeading: string;\r\n}\r\n\r\nexport interface ISearchResultContainerProps extends Msdyn365.IModule {\r\n resources: ISearchResultContainerResources;\r\n config: ISearchResultContainerConfig;\r\n slots: {\r\n quickview: React.ReactNode[];\r\n productComparisonButton: React.ReactNode[];\r\n };\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CategoryHierarchy as CategoryHierarchyData,\n IProductRefinerHierarchy,\n IProductsDimensionsAvailabilities\n} from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\nimport { format, ProductPrice, ProductRefinerValue, SortColumn, TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n PriceForProductSearchResultInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n LabeledDropdown,\n UncontrolledPagination,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable, reaction, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n buildListPageUrl,\n getCollectionProducts,\n getCollectionRefinersAction,\n getCurrentUrl,\n GetFullProductsByCollectionInput,\n IFullProductsSearchResultsWithCount,\n parseQueryParam,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n} from './actions';\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\nimport {\n ErrorMessage,\n FeatureSearchResultItem,\n getUpdatedRefinementCriteria,\n IChoiceSummaryClickNotification,\n IRefineItemCommonProps,\n IRefineItemToggleNotification,\n ISearchResultModalViewProps,\n isMatchingRefinementCriterion,\n Link,\n ModalToggle,\n ProductSearchResultItems,\n SearchResultModal,\n Separator,\n Title\n} from './components';\nimport ChoiceSummary from './components/choice-summary';\nimport RefineSubmenu from './components/refine-submenu';\nimport { ListPageState } from './list-page-state';\nimport { ISearchResultContainerData } from './search-result-container.data';\nimport { expandRefinersCount, ISearchResultContainerProps } from './search-result-container.props.autogenerated';\nimport { IBuyboxAddToCartViewProps } from '../ccbcubuybox/components/ccbcubuybox-small-components';\n\nexport interface ISearchResultCallbacks {\n\n}\n\nexport interface ISearchResultContainerViewProps extends ISearchResultContainerProps {\n products?: React.ReactNode;\n className?: string;\n SearchResultContainer: IModuleProps;\n TitleViewProps: ITitleViewProps;\n categoryHierarchy: ICategoryHierarchyViewProps;\n pagination?: React.ReactNode;\n ProductsContainer: INodeProps;\n ProductSectionContainer: INodeProps;\n refineMenu: IRefineMenuViewProps;\n sortByOptions: ISortByViewProps;\n choiceSummary?: React.ReactNode;\n modalToggle: React.ReactNode;\n searchResultModal: ISearchResultModalViewProps;\n isMobile: boolean;\n CategoryNavContainer: INodeProps;\n RefineAndProductSectionContainer: INodeProps;\n errorMessage: React.ReactNode;\n FeatureSearchContainer: INodeProps;\n similarLookProduct?: React.ReactNode;\n productPrices?: ProductPrice[];\n addToCart: IBuyboxAddToCartViewProps;\n callbacks: ISearchResultCallbacks;\n addToCartLoader:boolean;\n}\n\nexport interface ITitleViewProps {\n TitleContainer: INodeProps;\n title: ISearchResultTitle;\n}\n\nexport interface IRefineMenuViewProps {\n RefineMenuContainer: INodeProps;\n RefinerSectionContainer: INodeProps;\n refiners?: React.ReactNode[];\n}\n\nexport interface ICategoryHierarchyViewProps {\n categoryHierarchyList?: React.ReactNode[];\n categoryHierarchySeparator?: React.ReactNode;\n CategoryHierarchyContainer: INodeProps;\n}\n\nexport interface ISortByViewProps {\n SortingContainer: INodeProps;\n sortByDropDown?: React.ReactNode;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Title component for search result container.\n */\nexport interface ISearchResultTitle {\n titlePrefix?: React.ReactNode;\n titleText?: React.ReactNode;\n titleCount?: React.ReactNode;\n}\n\nexport interface ISearchResultContainerState {\n sortingState: ISortByCollectionState;\n modalIsOpen: boolean;\n refiners: IProductRefinerHierarchy[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n addToCartLoader:boolean;\n}\n\ninterface ISortByCollectionState {\n selectedSortByOption: ILabeledDropdownOption;\n pending: boolean;\n}\n\n/**\n *\n * SearchResultContainer component.\n * @extends {React.PureComponent>}\n */\n@observer\nexport default class SearchResultContainer extends React.PureComponent<\n ISearchResultContainerProps,\n ISearchResultContainerState\n> {\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\n ];\n\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\n\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n @observable\n private _viewport: GridSize = 'lg';\n\n private readonly _modalToggleRef: React.RefObject;\n\n private readonly _sortAndFilterContainerRef: React.RefObject;\n\n private expandrefinerCount: number | undefined = 0;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n private readonly defaultPageNumber = 0;\n\n private readonly catalogId = getCatalogId(this.props.context.request);\n\n private isListPageStateUpdated: boolean = false;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation?.Text;\n }\n\n public constructor(props: ISearchResultContainerProps, state: ISearchResultContainerState) {\n super(props);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n this._modalToggleRef = React.createRef();\n this._sortAndFilterContainerRef = React.createRef();\n this._toggleModal = this._toggleModal.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.productPrices = [];\n this.state = {\n sortingState: {\n pending: false,\n selectedSortByOption: this.sortByDropdownOptions[0]\n },\n modalIsOpen: false,\n refiners: [],\n addToCartLoader:false\n };\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\n\n const locale = this.props.context.request.locale;\n const telemetry = this.props.telemetry;\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\n const validationErrorRange = this.props.resources.validationErrorNotRange;\n this._refineItemCommonProps = {\n telemetry,\n locale,\n placeholderTextMax,\n minLabel,\n maxLabel,\n rangeNameFormat,\n validationErrorNaN,\n validationErrorRange\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n public async componentDidMount(): Promise {\n if (MsDyn365.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n const listPageState = await this.props.data.listPageState;\n const products = await this.props.data.products;\n\n this._updateListPageState(listPageState, products);\n\n // Initialize reaction based on listPageState properties\n reaction(\n () => {\n return [\n listPageState.activeFilters?.length,\n listPageState.currentPageNumber,\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\n ];\n },\n async () => {\n const newListPageState = await this.props.data.listPageState;\n const input = new GetFullProductsByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n\n // eslint-disable-next-line max-len -- existing code\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : JSON.stringify({\n ProductId: this.props.context.request.query?.productId,\n Recommendation: this.props.context.request.query?.recommendation\n }),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\n !!this.props?.config?.includeAttributes,\n this.props.config.updateRefinerPanel,\n this.props.context.request.locale,\n this.catalogId\n );\n\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\n newListPageState.totalProductCount = productResults.count;\n newListPageState.activeProducts = productResults.products;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\n if (\n this.props.config.enableAffiliationBasedPricing &&\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n if (this.props.config.updateRefinerPanel) {\n const refinerInput = new RefinersByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\n this.defaultPageNumber\n )\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : this.props.context.request.query?.productId,\n false,\n this.props.config.updateRefinerPanel,\n undefined,\n this.catalogId\n );\n\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\n this.setState({ refiners });\n }\n }\n );\n\n if (\n this.props.config.enableAffiliationBasedPricing &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n this.props.config.includeAttributes\n ) {\n await this._getProductsDimensionsAvailabilities();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public render(): JSX.Element {\n const {\n config: { imageSettings, className },\n resources,\n data: { listPageState, products: productCollection, featureProduct }\n } = this.props;\n\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\n this._updateListPageState(listPageState.result, productCollection.result);\n this.isListPageStateUpdated = true;\n }\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\n let errorText = '';\n if (!ArrayExtensions.hasElements(products)) {\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\n }\n const productsComponent = this._getProducts();\n const featureComponent = (\n \n );\n\n const searchResultContainerViewProps = {\n ...this.props,\n products: productsComponent,\n TitleViewProps: this._getCollectionTitle(),\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\n refineMenu: this._getRefineMenu(),\n className: classnames('ms-search-result-container', className),\n SearchResultContainer: {\n moduleProps: this.props,\n className: classnames('ms-search-result-container', className)\n },\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\n pagination: this._getPagination(),\n ProductsContainer: { className: 'ms-search-result-container__Products' },\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\n choiceSummary: this._getChoiceSummary(),\n modalToggle:\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\n \n ) : null,\n searchResultModal: this._getSearchResultModal(),\n isMobile: this.isMobile,\n errorMessage: errorText && ,\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\n similarLookProduct: searchProduct ? featureComponent : null,\n productPrices: this.productPrices,\n addToCartLoader: this.state.addToCartLoader\n };\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\n }\n\n /**\n * Update the list page state with initial data.\n * @param listPageState -- List page State.\n * @param products -- Products.\n */\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\n let querySorting: SortColumn[] = [];\n const defaultPageNumber: number = 10;\n\n if (this._pageType === 'Category') {\n listPageState.pageType = 'Category';\n } else {\n listPageState.pageType = 'Search';\n }\n\n if (this.props.context.request.query?.sorting) {\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\n }\n\n listPageState.currentPageNumber =\n (this.props.context.request.query &&\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\n 0;\n listPageState.sortingCritera = { Columns: querySorting };\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\n listPageState.activeProducts = products.products;\n listPageState.totalProductCount = products.count;\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request);\n if (this.props.context.request.query?.productId) {\n const featureProduct = this.props.data.featureProduct.result;\n if (featureProduct) {\n listPageState.featureProduct = featureProduct;\n }\n }\n };\n\n /**\n * Get products dimension availabilities.\n * @returns Void.\n */\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n productsList,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n };\n\n /**\n * Get the active price for the products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n\n const listPageState = await this.props.data.listPageState;\n listPageState.activeProducts = products;\n };\n\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\n const { resources } = this.props;\n return SearchResultModal({\n resources: {\n modalCloseButtonText: resources.modalCloseButtonText,\n modalTitle: resources.modalTitle\n },\n isOpen: this.state.modalIsOpen,\n returnRef: this._modalToggleRef,\n onModalToggle: this._toggleModal\n });\n };\n\n private readonly _getCollectionTitle = (): ITitleViewProps => {\n const { data, context, resources } = this.props;\n\n let collectionTitle: string | undefined = '';\n if (context && context.request && context.request.query && context.request.query.q) {\n collectionTitle = `\"${context.request.query.q}\"`;\n } else {\n collectionTitle =\n (data.category.result &&\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\n (data.category.result && data.category.result.Name) ||\n this.props.context.request.query?.title ||\n '';\n }\n let productCountText = '';\n let productCountNumber: number | undefined;\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\n productCountNumber = data.listPageState.result.totalProductCount;\n } else if (data.products && data.products.result) {\n productCountNumber = data.products.result.count;\n }\n\n if (productCountNumber && productCountNumber !== 0) {\n productCountText =\n productCountNumber !== 1\n ? format(this.props.resources.numberOfProducts, productCountNumber)\n : this.props.resources.oneProduct;\n } else {\n productCountText = format(this.props.resources.numberOfProducts, 0);\n }\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\n const titlePrefix = ;\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\n\n return {\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\n title: {\n titlePrefix,\n titleText,\n titleCount\n }\n };\n };\n\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n const categoryLinks =\n categoryHierarchy &&\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\n return (\n <Link\n key={index}\n text={value.Name}\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\n href={value.Url}\n />\n );\n });\n const categoryLinkSeparator = <Separator separator='/' />;\n\n return {\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\n categoryHierarchyList: categoryLinks,\n categoryHierarchySeparator: categoryLinkSeparator\n };\n };\n\n private readonly _getSortingDropDown = (): ISortByViewProps => {\n const { resources } = this.props;\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\n let dropdownOptions = this._getAllSortByOptions();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\n if (this.props.context.app.config.hideRating) {\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\n }\n\n const dropdown = (\n <LabeledDropdown\n labelClassname='reviews-list-sort-by'\n labelText={resources.sortByDropdownLabel}\n dropdownId='categorySortByDropdown'\n dropdownClassname='reviews-list-dropdown'\n toggleColor='link'\n dropdownOptions={dropdownOptions}\n selectedOption={activeDropdown}\n onSelectOption={this._updateSortByDropdown}\n ref={this._sortAndFilterContainerRef}\n />\n );\n return {\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\n sortByDropDown: dropdown\n };\n };\n\n private readonly _getPagination = (): React.ReactNode => {\n const { config, context, data, resources } = this.props;\n const listPageState = data.listPageState.result;\n const fullUrl = getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 10;\n // eslint-disable-next-line max-len -- existing code\n const skipCount = listPageState?.currentPageNumber\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\n const totalItems = listPageState?.totalProductCount || 0;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n return (\n <UncontrolledPagination\n className='ms-search-result-container__pagination'\n role='navigation'\n aria-label={resources.paginationAriaLabel}\n url={fullUrl.href}\n qsp='skip'\n items={totalItems}\n itemsPerPage={itemsPerPage}\n startingItem={skipCount}\n previousText={this._renderPrev(previousText)}\n nextText={this._renderNext(nextText)}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n telemetryContent={this.telemetryContent}\n />\n );\n };\n\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\n const { data, context, config } = this.props;\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\n const validRefiners =\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\n ? this.state.refiners.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n })\n : data.refiners.result &&\n data.refiners.result.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n });\n\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\n const expandedRefiners = this.expandrefinerCount;\n const subMenus =\n validRefiners &&\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n });\n\n return {\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\n refiners: subMenus\n };\n };\n\n /**\n * Should hide from refiners.\n * @param refiner - The refiner.\n * @returns ShouldHideFromRefiners.\n */\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\n return (\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId ||\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId)\n );\n };\n\n private readonly _getChoiceSummary = (): React.ReactNode => {\n const { resources, data, telemetry } = this.props;\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n const refinerValueName = this.props.data.refiners.result?.find(n => n.KeyName === 'Rating');\n return (\n <ChoiceSummary\n classNames='ms-choice-summary-by-category'\n clearAllText={resources.clearAllText}\n label={resources.choiceSummaryLabel}\n closeAriaLabel={resources.closeAriaLabel}\n selectedChoices={selectedRefiners}\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\n refinerHierarchy={data.refiners.result}\n choiceFormat={resources.choiceFormat}\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\n telemetry={telemetry}\n onChoiceClicked={this._onChoiceClicked}\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\n choiceAriaLabel={resources.choiceAriaLabel}\n telemetryContent={this.telemetryContent}\n context={this.props.context}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n refinerValues={refinerValueName}\n />\n );\n };\n\n /**\n * Get Active products.\n * @returns - JSX Elements.\n */\n private readonly _getProducts = (): JSX.Element => {\n const {\n config: { imageSettings, allowBackNavigation: shouldAllowBackNavigation }\n } = this.props;\n const { resources } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\n const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\n const shouldAllowBack = shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const quickviewSlot = this.props.slots?.quickview?.[0];\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager },\n cart: { result: cart }\n },\n } = this.props;\n return (\n <ProductSearchResultItems\n products={products}\n context={this.props.context}\n imageSettings={imageSettings}\n resources={resources}\n moduleType={this.props.typeName}\n moduleId={this.props.id}\n allowBackNavigation={shouldAllowBack}\n telemetryContent={this.telemetryContent}\n quickviewSlot={quickviewSlot}\n productComparisonButton={productComparisonButton}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\n storeSelectorStateManager={storeSelectorStateManager}\n cart={cart}\n orgUnitNumber={this.props.app.config.orgUnitNumberCustom || ''}\n setAddToCartLoader={(e:boolean) => this.setState({addToCartLoader:e})}\n />\n );\n };\n\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n // eslint-disable-next-line max-len -- existing code\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''\n } could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n window.history.pushState(\n {},\n '',\n buildListPageUrl(\n getCurrentUrl(this.props.context.request),\n undefined,\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\n undefined\n )\n );\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.sortingCritera = {\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\n };\n });\n };\n\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\n const { data } = this.props;\n\n if (!data.searchConfiguration.result) {\n return {};\n }\n\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\n return searchConfiguration.key === option.key;\n });\n\n if (mappedConfiguration) {\n return mappedConfiguration.sortColumn;\n }\n\n return {};\n };\n\n /**\n * Retrieves current sort criteria.\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\n */\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\n return sortCriteria!.Columns[0];\n }\n\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\n if (ArrayExtensions.hasElements(queryColumns)) {\n return queryColumns[0];\n }\n\n return undefined;\n };\n\n /**\n * Retrieves dropdown options.\n * @returns All dropdown options.\n */\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!searchConfiguration) {\n return [];\n }\n\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\n );\n\n return ArrayExtensions.validValues(mappedSearchConfiguration);\n };\n\n /**\n * Retrieves current selected dropdown option based on the sort criteria.\n * @returns Current dropdown option.\n */\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\n const activeSortColumn = this._getSortCriteriaColumn();\n\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!activeSortColumn || !searchConfiguration) {\n return undefined;\n }\n\n const activeMappedConfig = searchConfiguration.find(\n mappedSearchConfig =>\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\n );\n if (!activeMappedConfig) {\n return undefined;\n }\n\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\n };\n\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n const error = `Refine menu cannot refine search criteria: \n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result?.activeFilters || []\n );\n\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\n });\n };\n\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\n if (this.props.data.listPageState.result) {\n const newRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result.activeFilters || []\n );\n\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\n }\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\n return '';\n };\n\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\n const { data, telemetry } = this.props;\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\n return;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!notification.clearAll) {\n const selectedChoice = notification.choiceClicked;\n if (!selectedChoice) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n\n // Set focus to sort and filter\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\n setTimeout(() => {\n dropdownElement && dropdownElement.focus();\n }, 50);\n }\n\n const fullUrl = getCurrentUrl(this.props.context.request);\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\n data.listPageState.result.currentPageNumber = 0;\n data.listPageState.result.activeFilters = currentRefinementCriteria;\n };\n\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\n const { data, telemetry } = this.props;\n const fullUrl = getCurrentUrl(this.props.context.request);\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\n return fullUrl.href;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!isClearAll) {\n if (!selectedRefiner) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\n return fullUrl.href;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\n };\n\n private _getViewport(): GridSize {\n if (MsDyn365.isBrowser) {\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n }\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n }\n\n private _toggleModal(): void {\n this.setState({\n modalIsOpen: !this.state.modalIsOpen\n });\n }\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this.state.modalIsOpen && !this.isMobile) {\n this._toggleModal();\n }\n }\n\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\n switch (refinerCount) {\n case expandRefinersCount.all:\n this.expandrefinerCount = validRefiners;\n break;\n case expandRefinersCount.one:\n this.expandrefinerCount = 1;\n break;\n case expandRefinersCount.two:\n this.expandrefinerCount = 2;\n break;\n case expandRefinersCount.three:\n this.expandrefinerCount = 3;\n break;\n case expandRefinersCount.four:\n this.expandrefinerCount = 4;\n break;\n default:\n this.expandrefinerCount = 0;\n }\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n <div className='msc-pagination__prev'>\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\n <span className='prev-text'>{paginationPreviousText}</span>\n </div>\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n <div className='msc-pagination__next'>\n <span className='next-text'>{paginationNextText}</span>\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\n </div>\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 msdyn365Commerce from '@msdyn365-commerce/core';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { IProductComparisonProductMainInfo, IProductComparisonViewProps, ProductComparison } from './product-comparison';\n\n/**\n * Renders dynamic header values.\n * @param values - cd..info.\n * @param headerName - Header Name.\n * @returns List of react nodes.\n */\nconst renderDynamicHeaderCells = (\n values: {\n productMainInfo: IProductComparisonProductMainInfo;\n node: React.ReactNode;\n }[],\n headerName: string\n) => {\n return values.map((value, index) => {\n if (index === 0) {\n return (\n <Node\n {...value.productMainInfo.tableHeaderProps}\n role='menuitem'\n tabindex='0'\n style={value.productMainInfo.cellContainerProps.style}\n >\n {headerName}\n </Node>\n );\n }\n return <Node key={index} {...value.productMainInfo.tableHeaderProps} style={value.productMainInfo.cellContainerProps.style}></Node>;\n });\n};\n\n/**\n * Renders dynamic cell values.\n * @param values - Cells info.\n * @param hoveringCellItemId - Currently hovered cell.\n * @returns List of react nodes.\n */\nconst renderDynamicCells = (\n values: {\n productMainInfo: IProductComparisonProductMainInfo;\n node: React.ReactNode;\n }[],\n hoveringCellItemId: string\n) => {\n return values.map(value => {\n return (\n <Node\n {...value.productMainInfo.tableCellProps}\n key={`${value.productMainInfo.product.itemId}-${hoveringCellItemId}`}\n style={value.productMainInfo.cellContainerProps.style}\n >\n {value.node}\n </Node>\n );\n });\n};\n/**\n * Represents product comparison view.\n * @param props - View props for product comparison.\n * @returns Functional component of product comparison.\n */\nexport const ProductComparisonViewFunctionalComponent: React.FC<IProductComparisonViewProps> = props => {\n return (\n <Module {...props.moduleProps}>\n {props.backToShopping}\n {props.heading}\n <Node className={`${ProductComparison.className}__product_count_text`}>{props.productCountText}</Node>\n {props.isEmptyContent || props.isMainContentReady ? undefined : props.loading}\n {props.isEmptyContent ? props.emptyComparison : undefined}\n <Node {...props.actionBarContainerProps}>\n {!props.isEmptyContent && props.isMainContentReady ? props.clearAllButton : undefined}\n </Node>\n {props.isMainContentReady ? (\n <Node className={ProductComparison.mainContainerClassName}>\n <Node className={ProductComparison.containerClassName}>\n <Node className={ProductComparison.tableClassName} ref={props.tableReference}>\n <Node className={`${ProductComparison.tableHeaderClassName}`}>\n <Node\n className={`${ProductComparison.tableHeaderClassName}__header__container`}\n ref={props.tableHeaderReference}\n >\n {props.shouldShowPreviousClicker && props.previousClicker}\n <Node\n className={classnames(\n ProductComparison.tableRowClassName,\n `${ProductComparison.tableHeaderClassName}__product-row`\n )}\n role='menu'\n >\n {props.productsMainInfo?.map(productMainInfo => {\n const isFromCurrentCatalog = productMainInfo.isFromCurrentCatalog;\n const actionsClassName = `${ProductComparison.productRowClassName}__actions`;\n return (\n <Node\n {...productMainInfo.cellContainerProps}\n key={productMainInfo.cellContainerProps.key as string}\n style={productMainInfo.cellContainerProps.style}\n >\n {productMainInfo.removeFromComparisonButton}\n {productMainInfo.productImage}\n {msdyn365Commerce.isBrowser ? productMainInfo.productLink : undefined}\n {productMainInfo.productPrice}\n <Node className={actionsClassName} key={productMainInfo.product.itemId}>\n {isFromCurrentCatalog\n ? productMainInfo.quickView\n : productMainInfo.goToProductDetailsButton}\n </Node>\n </Node>\n );\n })}\n </Node>\n {props.shouldShowNextClicker && props.nextClicker}\n </Node>\n </Node>\n <Node\n className={ProductComparison.tableBodyClassName}\n onScroll={props.handleScroll}\n ref={props.tableBodyReference}\n >\n {props.productsMainInfo?.map((rating, key) => {\n return rating.productRating !== undefined && key === 0 ? (\n <Node\n className={classnames(\n `${ProductComparison.tableBodyClassName}__rating-row`,\n ProductComparison.tableRowClassName\n )}\n >\n <Node className={ProductComparison.tableRowContentClassName} key='rating' role='menu'>\n {props.productsMainInfo?.map((productMainInfo, index) => {\n if (index === 0) {\n return (\n <Node\n {...productMainInfo.tableHeaderProps}\n role='menuitem'\n tabindex='0'\n style={productMainInfo.cellContainerProps.style}\n >\n {props.resources.productComparisonProductItemRating}\n </Node>\n );\n }\n return (\n <Node\n key={index}\n {...productMainInfo.tableHeaderProps}\n role='none'\n tabindex='-1'\n style={productMainInfo.cellContainerProps.style}\n ></Node>\n );\n })}\n </Node>\n <Node\n className={`${ProductComparison.tableRowContentClassName} ${ProductComparison.tableRowContentInformationClassName}`}\n role='menu'\n >\n {props.productsMainInfo?.map(productMainInfo => {\n return (\n <Node\n {...productMainInfo.tableCellProps}\n key={`${productMainInfo.product.itemId}-${props.hoveringCellItemId!}`}\n style={productMainInfo.cellContainerProps.style}\n >\n {productMainInfo.productRating}\n </Node>\n );\n })}\n </Node>\n </Node>\n ) : (\n undefined\n );\n })}\n {props.productsMainInfo?.map((description, key) => {\n return description.productDescription !== undefined && key === 0 ? (\n <Node\n className={classnames(\n `${ProductComparison.tableBodyClassName}__description-row`,\n ProductComparison.tableRowClassName\n )}\n >\n <Node className={ProductComparison.tableRowContentClassName} key='description' role='menu'>\n {props.productsMainInfo?.map((productMainInfo, index) => {\n if (index === 0) {\n return (\n <Node\n {...productMainInfo.tableHeaderProps}\n role='menuitem'\n tabindex='0'\n style={productMainInfo.cellContainerProps.style}\n >\n {props.resources.productComparisonProductItemDescription}\n </Node>\n );\n }\n return (\n <Node\n key={index}\n {...productMainInfo.tableHeaderProps}\n role='none'\n tabindex='-1'\n style={productMainInfo.cellContainerProps.style}\n ></Node>\n );\n })}\n </Node>\n <Node\n className={`${ProductComparison.tableRowContentClassName} ${ProductComparison.tableRowContentInformationClassName}`}\n role='menu'\n >\n {props.productsMainInfo?.map(productMainInfo => {\n return (\n <Node\n {...productMainInfo.tableCellProps}\n key={`${productMainInfo.product.itemId}-${props.hoveringCellItemId!}`}\n style={productMainInfo.cellContainerProps.style}\n >\n {productMainInfo.productDescription}\n </Node>\n );\n })}\n </Node>\n </Node>\n ) : (\n undefined\n );\n })}\n {props.dimensionsProps?.map(dimensionProps => {\n return (\n dimensionProps?.dimensionName && (\n <Node\n className={classnames(\n ProductComparison.dimensionsRowClassName,\n ProductComparison.tableRowClassName,\n dimensionProps.dimensionClassName\n )}\n key={dimensionProps.dimensionClassName}\n >\n <Node\n className={ProductComparison.tableRowContentClassName}\n key={dimensionProps.dimensionName}\n role='menu'\n >\n {renderDynamicHeaderCells(\n dimensionProps.productDimensionValues,\n dimensionProps.dimensionName\n )}\n </Node>\n\n <Node\n className={`${ProductComparison.tableRowContentClassName} ${ProductComparison.tableRowContentInformationClassName}`}\n role='menu'\n >\n {renderDynamicCells(dimensionProps.productDimensionValues, props.hoveringCellItemId!)}\n </Node>\n </Node>\n )\n );\n })}\n {props.specificationsProps?.map(specificationProps => {\n return StringExtensions.isNullOrEmpty(specificationProps.specification.TextValue) === false ? (\n <Node\n className={classnames(\n ProductComparison.specificationsRowClassName,\n ProductComparison.tableRowClassName,\n specificationProps.specificationClassName\n )}\n key={specificationProps.specificationClassName}\n >\n <Node\n className={ProductComparison.tableRowContentClassName}\n key={specificationProps.specification.Name}\n role='menu'\n >\n {renderDynamicHeaderCells(\n specificationProps.specificationValues,\n specificationProps.specification.Name!\n )}\n </Node>\n <Node\n className={`${ProductComparison.tableRowContentClassName} ${ProductComparison.tableRowContentInformationClassName}`}\n role='menu'\n >\n {renderDynamicCells(specificationProps.specificationValues, props.hoveringCellItemId!)}\n </Node>\n </Node>\n ) : (\n undefined\n );\n })}\n <Node\n className={classnames(\n `${ProductComparison.tableBodyClassName}__sku-row`,\n ProductComparison.tableRowClassName\n )}\n >\n <Node className={ProductComparison.tableRowContentClassName} key='sku' role='menu'>\n {props.productsMainInfo?.map((productMainInfo, index) => {\n if (index === 0) {\n return (\n <Node\n {...productMainInfo.tableHeaderProps}\n role='menuitem'\n tabindex='0'\n style={productMainInfo.cellContainerProps.style}\n >\n {props.resources.productComparisonProductItemSku}\n </Node>\n );\n }\n return (\n <Node\n key={index}\n {...productMainInfo.tableHeaderProps}\n style={productMainInfo.cellContainerProps.style}\n ></Node>\n );\n })}\n </Node>\n <Node\n className={`${ProductComparison.tableRowContentClassName} ${ProductComparison.tableRowContentInformationClassName}`}\n role='menu'\n >\n {props.productsMainInfo?.map(productMainInfo => {\n return (\n <Node\n {...productMainInfo.tableCellProps}\n key={`${productMainInfo.product.itemId}-${props.hoveringCellItemId!}`}\n style={productMainInfo.cellContainerProps.style}\n >\n {productMainInfo.product.productInfo.ItemId}\n </Node>\n );\n })}\n </Node>\n </Node>\n </Node>\n </Node>\n </Node>\n </Node>\n ) : (\n undefined\n )}\n </Module>\n );\n};\n\nexport default ProductComparisonViewFunctionalComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionContext, IActionInput } from '@msdyn365-commerce/core';\n\nimport { IModuleStates } from './module-state.data';\n\n/**\n * GetModulesInput.\n */\nexport class ModuleStatesCacheKey implements IActionInput {\n public getCacheKey = () => 'ModuleState';\n\n public getCacheObjectType = () => 'ModuleState';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport function getModuleStates(ctx: IActionContext): IModuleStates {\n const cacheKey = new ModuleStatesCacheKey();\n\n let moduleStates = <IModuleStates>ctx.get<IModuleStates>(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n if (moduleStates) {\n return moduleStates;\n }\n ctx.update(cacheKey, {});\n moduleStates = <IModuleStates>ctx.get<IModuleStates>(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n return moduleStates;\n}\n\nexport function updateModuleStates(value: IModuleStates, ctx: IActionContext): void {\n const cacheKey = new ModuleStatesCacheKey();\n ctx.update(cacheKey, value);\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * Types of product refiner values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerValueDataTypeValue {\n /**\n * Range slider is used for selections like price.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Range = 1,\n\n /**\n * Range input is a different way to specify ranges and can be expressed with input boxes\n * as well as a set of discrete single-select type values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n RangeInput = 4,\n\n /**\n * This is a discrete list item, either multi-select or single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n List = 5,\n\n /**\n * Boolean types allows only single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Boolean = 6\n}\n\n/**\n * Types of product refiners.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerTypeValue {\n /**\n * Refiner values are single-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Single = 0,\n\n /**\n * Refiner values are multi-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Multi = 1\n}\n\n/**\n * ProductRefinerSource enum type.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerSource {\n /**\n * The None member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n None = 0,\n\n /**\n * The Attribute member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Attribute = 1,\n\n /**\n * The Category member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Category = 2,\n\n /**\n * The Price member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Price = 3,\n\n /**\n * The Rating member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Rating = 4\n}\n\n/**\n * Checks if the data type value corresponds to a slider.\n * @param dataTypeValue\n */\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\n return (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n */\nexport function findMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue | undefined {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n * @param refinementCriterion\n */\nexport function isMatchingRefinementCriterion(productRefinerValue: ProductRefinerValue, refinementCriterion: ProductRefinerValue): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n (isRangeType(refinementCriterion.DataTypeValue) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (isMatchingRefinementCriterion(itemToggleNotification.productRefinerValue, selectedCriterion)) {\n toggledItemFound = true;\n if (itemToggleNotification.isSelecting) {\n const next = {\n ...selectedCriterion,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n selectedCriterion.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n selectedCriterion.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n } // Else the item is being de-selected, so omit it from the refinement criteria\n } else {\n // Keep existing criterion because it is not in the item toggle notification\n updatedRefinementCriteria.push(selectedCriterion);\n }\n });\n\n if (!toggledItemFound) {\n const next = {\n ...itemToggleNotification.productRefinerValue,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n itemToggleNotification.productRefinerValue.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n\n // If single select, then deselect any others in the parent refiner group\n if (\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\n ) {\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\n // Do nothing\n } else {\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(child, criterion)\n );\n if (matchingIndex > -1) {\n updatedRefinementCriteria.splice(matchingIndex, 1);\n }\n }\n });\n }\n }\n\n return updatedRefinementCriteria;\n}\n\nexport function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string | undefined,\n telemetry: ITelemetry\n): string {\n if (!amount || !currency) {\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\n return amount || '';\n }\n const priceAmount = (amount && Number(amount)) || 0;\n let result: string;\n\n try {\n result = new Intl.NumberFormat(locale, {\n style: 'currency',\n currencyDisplay: 'symbol',\n currency,\n minimumFractionDigits: 0\n }).format(priceAmount);\n } catch (error) {\n result = `${priceAmount} ${currency}`;\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\nimport { ISwatchItem, PriceComponent, RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, IImageSettings, Image, msdyn365Commerce, getUrlSync } from '@msdyn365-commerce/core';\nimport { AttributeValue, ProductDimension, ProductDimensionType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n getFallbackImageUrl,\n getProductUrlSync,\n ObjectExtensions,\n Random,\n StringExtensions,\n convertProductDimensionTypeToDimensionTypes,\n DimensionTypes\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, format, Heading, IModuleProps, INodeProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\nimport { ProductComparisonState } from '../product-comparison-state';\nimport {\n getProductsInProductComparisonAction,\n GetProductsInProductComparisonInput,\n IDimensionResult,\n IProductComparisonItemData\n} from './actions';\nimport { ProductSpecification, RemoveFromComparisonButtonComponent } from './base';\nimport { IProductComparisonData } from './product-comparison.data';\nimport { IProductComparisonProps } from './product-comparison.props.autogenerated';\n\n/**\n * Represents product comparison view props for main product info.\n */\nexport interface IProductComparisonProductMainInfo {\n cellContainerProps: INodeProps;\n tableCellProps: INodeProps;\n tableHeaderProps: INodeProps;\n\n product: IProductComparisonItemData;\n productUrl?: string;\n\n isFromCurrentCatalog: boolean;\n\n removeFromComparisonButton: React.ReactNode;\n productImage: React.ReactNode;\n productLink: React.ReactNode;\n productPrice: React.ReactNode;\n quickView: React.ReactNode;\n goToProductDetailsButton: React.ReactNode;\n productRating: React.ReactNode;\n productDescription: React.ReactNode;\n}\n\n/**\n * Specifies the type of selection.\n */\nexport enum SelectionType {\n text = 'text',\n swatch = 'swatch'\n}\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonViewProps extends IProductComparisonProps<{}> {\n moduleProps: IModuleProps;\n\n isMainContentReady: boolean;\n isEmptyContent: boolean;\n productCountText?: string;\n\n actionBarContainerProps: INodeProps;\n\n heading: React.ReactNode;\n loading: React.ReactNode;\n emptyComparison: React.ReactNode;\n clearAllButton: React.ReactNode;\n previousClicker: React.ReactNode;\n nextClicker: React.ReactNode;\n backToShopping: React.ReactNode;\n\n productsMainInfo?: IProductComparisonProductMainInfo[];\n\n tableReference?: React.RefObject<HTMLDivElement>;\n\n tableHeaderReference?: React.RefObject<HTMLDivElement>;\n\n tableBodyReference?: React.RefObject<HTMLDivElement>;\n\n tableCellReference?: React.RefObject<HTMLDivElement>;\n\n shouldShowPreviousClicker?: boolean;\n\n shouldShowNextClicker?: boolean;\n\n hoveringCellItemId?: string;\n hoverStateLastUpdate?: number;\n\n uniqueSpecifications?: AttributeValue[];\n uniqueDimensionIds?: number[];\n\n dimensionsProps?: (\n | {\n dimensionId: number;\n dimensionName: string | undefined;\n dimensionClassName: string;\n productDimensionValues: {\n dimensionProps: { RecordId: number; Value: string; DimensionId: number; ImageUrl: string | undefined };\n productMainInfo: IProductComparisonProductMainInfo;\n node: JSX.Element;\n }[];\n }\n | undefined\n )[];\n\n specificationsProps?: {\n specification: AttributeValue;\n specificationClassName: string;\n specificationValues: {\n productSpecification: AttributeValue | undefined;\n productMainInfo: IProductComparisonProductMainInfo;\n node: React.ReactNode;\n }[];\n }[];\n\n clearAllProductsFromComparison(): void;\n removeProductFromList?(itemId: string): void;\n handleScroll?(event: React.UIEvent<HTMLDivElement>): void;\n handleHoverIn?(itemId: string): () => void;\n handleHoverOut?(itemId: string): () => void;\n handlePreviousClick?(): void;\n handleNextClick?(): void;\n}\n\n/**\n * Represents the state of the product comparison component.\n */\nexport interface IProductComparisonState {\n productsData?: IProductComparisonItemData[];\n hoverStateLastUpdate: number;\n}\n\n/**\n * Represents the direction of product clicker.\n */\nexport enum ProductClickerDirections {\n left = 0,\n right = 1\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparison extends React.Component<IProductComparisonProps<IProductComparisonData>, IProductComparisonState> {\n public static readonly className: string = 'msc-product-comparison';\n\n public static readonly mainContainerClassName = `${ProductComparison.className}__main-container`;\n\n public static readonly containerClassName = `${ProductComparison.mainContainerClassName}__container`;\n\n public static readonly tableClassName = `${ProductComparison.containerClassName}__table`;\n\n public static readonly tableHeaderClassName = `${ProductComparison.tableClassName}__header`;\n\n public static readonly productRowClassName = `${ProductComparison.tableHeaderClassName}__product-row`;\n\n public static readonly tableClickerClassName = `${ProductComparison.tableClassName}__clicker`;\n\n public static readonly tableBodyClassName = `${ProductComparison.tableClassName}__body`;\n\n public static readonly tableRowClassName = `${ProductComparison.tableClassName}__row`;\n\n public static readonly dimensionsRowClassName = `${ProductComparison.tableBodyClassName}__dimensions-row`;\n\n public static readonly specificationsRowClassName = `${ProductComparison.tableBodyClassName}__specifications-row`;\n\n public static readonly tableRowContentClassName = `${ProductComparison.tableClassName}__row-content`;\n\n public static readonly tableHeaderCellClassName = `${ProductComparison.tableRowClassName}__header-cell`;\n\n public static readonly tableCellClassName = `${ProductComparison.tableRowClassName}__cell`;\n\n public static readonly actionBarClassName = `${ProductComparison.className}__action-bar`;\n\n public static readonly tableHeaderLockedClassName = `${ProductComparison.tableHeaderClassName}__locked`;\n\n public static readonly tableRowContentInformationClassName = `${ProductComparison.tableRowContentClassName}__information`;\n\n private readonly _tableReference?: React.RefObject<HTMLDivElement>;\n\n private readonly _tableHeaderReference?: React.RefObject<HTMLDivElement>;\n\n private readonly _tableBodyReference?: React.RefObject<HTMLDivElement>;\n\n private readonly _tableCellReference?: React.RefObject<HTMLDivElement>;\n\n private _shouldShowPreviousClicker?: boolean;\n\n private _shouldShowNextClicker?: boolean;\n\n private _hoveringCellItemId?: string;\n\n private readonly _instanceId: string;\n\n private static _getProductsSpecifications(products: IProductComparisonItemData[]): AttributeValue[] {\n const specifications = products.map(product => product.specifications?.specificationsList);\n const allSpecifications: AttributeValue[] = ArrayExtensions.flatten(specifications);\n\n const emptyAttributeValue = 0;\n const specificationNames = ArrayExtensions.validValues(\n allSpecifications\n .filter(specification => specification.AttributeValueId !== emptyAttributeValue)\n .map(specification => specification.Name)\n );\n const uniqueSpecificationNames = ArrayExtensions.unique(specificationNames);\n const uniqueSpecifications = ArrayExtensions.validValues(\n uniqueSpecificationNames.map(name => allSpecifications.find(specification => specification.Name === name))\n );\n\n return uniqueSpecifications;\n }\n\n private static _getProductsDimensions(products: IProductComparisonItemData[]): number[] {\n const dimensions = products.map(product => product.productInfo.Dimensions);\n const allDimensions: ProductDimension[] = ArrayExtensions.flatten(dimensions).filter(\n dimension => !ObjectExtensions.isNullOrUndefined(dimension.DimensionValue)\n );\n\n const dimensionIds = ArrayExtensions.validValues(allDimensions.map(dimension => dimension.DimensionTypeValue));\n const uniqueDimensionIds = ArrayExtensions.unique(dimensionIds);\n\n return uniqueDimensionIds;\n }\n\n private static _renderProductDescription(product?: SimpleProduct): React.ReactNode {\n if (StringExtensions.isNullOrWhitespace(product?.Description)) {\n return null;\n }\n return <p className={`${ProductComparison.className}__description`}>{product!.Description}</p>;\n }\n\n private static _getActionBarContainerProps(): INodeProps {\n return {\n className: ProductComparison.actionBarClassName\n };\n }\n\n public constructor(props: IProductComparisonProps<IProductComparisonData>) {\n super(props);\n\n this._instanceId = `${ProductComparison.className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n\n this.state = {\n productsData: undefined,\n hoverStateLastUpdate: Date.now()\n };\n\n this._tableReference = React.createRef<HTMLDivElement>();\n this._tableHeaderReference = React.createRef<HTMLDivElement>();\n this._tableBodyReference = React.createRef<HTMLDivElement>();\n this._tableCellReference = React.createRef<HTMLDivElement>();\n }\n\n public componentDidMount(): void {\n this._loadProducts();\n ProductComparisonState.instance(this.props.context.request).listModifiedEvent.subscribe({\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data downloading.\n this._loadProducts();\n }\n });\n if (MsDyn365.isBrowser) {\n window.addEventListener('scroll', () => {\n this._configureBoxShadowOnScroll();\n });\n }\n this._configureBoxShadowOnScroll();\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(this.props.context.request).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public shouldComponentUpdate(\n nextProps: Readonly<IProductComparisonProps<IProductComparisonData>>,\n nextState: Readonly<IProductComparisonState>\n ): boolean {\n if (this.state.productsData !== nextState.productsData || this.props !== nextProps) {\n this._hoveringCellItemId = undefined;\n return true;\n }\n\n return this.state.hoverStateLastUpdate !== nextState.hoverStateLastUpdate;\n }\n\n public render(): React.ReactNode | null {\n const viewProps: IProductComparisonViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: ProductComparison.className\n },\n clearAllProductsFromComparison: this._clearAllProductsFromComparison,\n isMainContentReady: false,\n isEmptyContent: false,\n heading: this._renderHeading(),\n loading: this._renderLoading(),\n clearAllButton: this._renderClearAllButton(),\n actionBarContainerProps: ProductComparison._getActionBarContainerProps(),\n previousClicker: this._renderPreviousClicker(),\n nextClicker: this._renderNextClicker(),\n backToShopping: this._renderBackToShoppingButton(),\n emptyComparison: (\n <div className={`${ProductComparison.className}__empty-container`}>{this.props.slots.emptyComparisonContentSlots}</div>\n )\n };\n\n const productsData = this.state.productsData ?? this._getProdutComparisonDataByCatalogId(this.props.data.productsData?.result);\n if (productsData === undefined) {\n return this.props.renderView(viewProps) as React.ReactNode;\n }\n\n const isConsentGiven = this.props.context.request.cookies.isConsentGiven();\n if (!isConsentGiven || !ArrayExtensions.hasElements(productsData)) {\n viewProps.isEmptyContent = true;\n return this.props.renderView(viewProps) as React.ReactNode;\n }\n\n if (ArrayExtensions.hasElements(productsData)) {\n viewProps.productCountText = this.props.resources.productComparisonCountText.replace('{0}', productsData.length.toString());\n }\n\n this._checkClickersState();\n const productsMainInfoData = this._getProductsMainInfo(productsData);\n const allUniqueDimensionIds = this.getProductsDimensionsIds(productsData);\n const updatedDimensionProps: (\n | {\n dimensionId: number;\n dimensionName: string | undefined;\n dimensionClassName: string;\n productDimensionValues: {\n dimensionProps: { RecordId: number; Value: string; DimensionId: number; ImageUrl: string | undefined };\n productMainInfo: IProductComparisonProductMainInfo;\n node: JSX.Element;\n }[];\n }\n | undefined\n )[] = [];\n allUniqueDimensionIds?.map(dimension => {\n const dimensionValue = this.getUpdatedDimensionsProps(dimension, productsMainInfoData);\n updatedDimensionProps.push(dimensionValue);\n return updatedDimensionProps;\n });\n viewProps.isMainContentReady = true;\n viewProps.tableReference = this._tableReference;\n viewProps.tableHeaderReference = this._tableHeaderReference;\n viewProps.tableBodyReference = this._tableBodyReference;\n viewProps.tableCellReference = this._tableCellReference;\n viewProps.hoverStateLastUpdate = this.state.hoverStateLastUpdate;\n viewProps.hoveringCellItemId = this._hoveringCellItemId;\n viewProps.shouldShowPreviousClicker = this._shouldShowPreviousClicker;\n viewProps.shouldShowNextClicker = this._shouldShowNextClicker;\n viewProps.handlePreviousClick = this._handlePreviousClick;\n viewProps.handleNextClick = this._handleNextClick;\n viewProps.handleScroll = this._handleScroll;\n viewProps.handleHoverIn = this._handleHoverIn;\n viewProps.handleHoverOut = this._handleHoverOut;\n viewProps.removeProductFromList = this._removeProductFromList;\n viewProps.productsMainInfo = productsMainInfoData;\n viewProps.uniqueDimensionIds = ProductComparison._getProductsDimensions(productsData);\n viewProps.dimensionsProps = updatedDimensionProps;\n viewProps.uniqueSpecifications = ProductComparison._getProductsSpecifications(productsData);\n viewProps.specificationsProps = this._getSpecificationProps(viewProps.uniqueSpecifications, viewProps.productsMainInfo);\n\n return this.props.renderView(viewProps) as React.ReactNode;\n }\n\n /**\n * Removes all product from the comparison list.\n */\n private readonly _clearAllProductsFromComparison = (): void => {\n ProductComparisonState.instance(this.props.context.request).clearAll();\n this.setState({ productsData: [] });\n };\n\n /**\n * Configures box shadow on scroll.\n */\n private readonly _configureBoxShadowOnScroll = (): void => {\n const defaultValue = 0;\n if (this._tableReference?.current) {\n const comparisonProductCardHeader: HTMLCollectionOf<Element> = this._tableReference.current.getElementsByClassName(\n ProductComparison.tableHeaderClassName\n );\n if (ArrayExtensions.hasElements(Array.from(comparisonProductCardHeader))) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > defaultValue) {\n comparisonProductCardHeader[0].classList.add(ProductComparison.tableHeaderLockedClassName);\n } else {\n comparisonProductCardHeader[0].classList.remove(ProductComparison.tableHeaderLockedClassName);\n }\n }\n }\n };\n\n private _getProdutComparisonDataByCatalogId(\n productData: IProductComparisonItemData[] | undefined\n ): IProductComparisonItemData[] | undefined {\n const catalogId = getCatalogId(this.props.context.request);\n const productByCatalogId = productData?.filter(product => product.catalogId === catalogId) ?? undefined;\n return productByCatalogId;\n }\n\n private async _loadProducts(): Promise<void> {\n const items = ProductComparisonState.instance(this.props.context.request).items;\n const input = new GetProductsInProductComparisonInput(items);\n let productData: IProductComparisonItemData[] | undefined;\n await getProductsInProductComparisonAction(input, this.props.context.actionContext).then(item => {\n productData = item;\n });\n const productDataByCatalogId = this._getProdutComparisonDataByCatalogId(productData);\n this.setState({ productsData: productDataByCatalogId });\n }\n\n /**\n * Handles scroll inside table.\n * Used to update header position accordingly to the scroll in table body.\n * @param event - Scroll event.\n */\n private readonly _handleScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this._tableHeaderReference?.current?.scrollTo({ top: event.currentTarget.scrollTop, left: event.currentTarget.scrollLeft });\n this._checkClickersState();\n };\n\n /**\n * Handles product clicker click.\n * Used to update table scroll position accordingly to the clicker.\n * @param direction - Direction of scrolling.\n */\n private readonly _handleScrollClick = (direction: ProductClickerDirections) => {\n const tableBody = this._tableBodyReference?.current;\n if (!tableBody) {\n return;\n }\n\n const defaultCellWidth = this._getCellWidth();\n const cellWidth = this._tableCellReference?.current?.clientWidth ?? defaultCellWidth;\n let newLeftPosition: number | undefined;\n const scrollPosition = Math.ceil(tableBody.scrollLeft);\n if (direction === ProductClickerDirections.left) {\n newLeftPosition = scrollPosition - cellWidth;\n const minLeftPosition = 0;\n newLeftPosition = Math.max(newLeftPosition, minLeftPosition);\n } else {\n const maxScroll = tableBody.scrollWidth - tableBody.clientWidth;\n newLeftPosition = scrollPosition + cellWidth;\n newLeftPosition = Math.min(newLeftPosition, maxScroll);\n }\n\n if (MsDyn365.isBrowser && document.body.parentElement?.getAttribute('dir') === 'rtl') {\n newLeftPosition = -newLeftPosition;\n }\n\n tableBody.scrollTo({\n top: tableBody.scrollTop,\n left: newLeftPosition\n });\n\n this._checkClickersState();\n };\n\n /**\n * Handles previous product click.\n * Used to update table scroll position accordingly to the clicker.\n */\n private readonly _handlePreviousClick = () => {\n if (MsDyn365.isBrowser && document.body.parentElement?.getAttribute('dir') === 'rtl') {\n this._handleScrollClick(ProductClickerDirections.right);\n } else {\n this._handleScrollClick(ProductClickerDirections.left);\n }\n };\n\n /**\n * Handles next product click.\n * Used to update table scroll position accordingly to the clicker.\n */\n private readonly _handleNextClick = () => {\n if (MsDyn365.isBrowser && document.body.parentElement?.getAttribute('dir') === 'rtl') {\n this._handleScrollClick(ProductClickerDirections.left);\n } else {\n this._handleScrollClick(ProductClickerDirections.right);\n }\n };\n\n /**\n * Get set width.\n */\n private readonly _getCellWidth = (): number => {\n const tableBody = this._tableBodyReference?.current;\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n let defaultCellWidth: number = 250;\n\n if (viewport === 'xs' && tableBody) {\n defaultCellWidth = tableBody && tableBody.clientWidth / 2;\n } else if ((viewport === 'sm' || viewport === 'md') && tableBody) {\n defaultCellWidth = tableBody && tableBody.clientWidth / 3;\n } else {\n if (tableBody) {\n defaultCellWidth = tableBody && tableBody.clientWidth / 4;\n }\n }\n\n return defaultCellWidth;\n };\n\n /**\n * Updates clickers state.\n */\n private readonly _checkClickersState = () => {\n const tableBody = this._tableBodyReference?.current;\n if (!tableBody) {\n return;\n }\n\n const previousScrollMinLimit = 0;\n const maxScroll = tableBody.scrollWidth - tableBody.clientWidth;\n const scrollPosition = Math.ceil(tableBody.scrollLeft);\n\n if (MsDyn365.isBrowser && document.body.parentElement?.getAttribute('dir') === 'rtl') {\n if (scrollPosition <= previousScrollMinLimit) {\n if (this._shouldShowNextClicker) {\n this._shouldShowNextClicker = false;\n this.forceUpdate();\n }\n } else if (!this._shouldShowNextClicker) {\n this._shouldShowNextClicker = true;\n this.forceUpdate();\n }\n\n if (scrollPosition >= maxScroll) {\n if (this._shouldShowPreviousClicker) {\n this._shouldShowPreviousClicker = false;\n this.forceUpdate();\n }\n } else if (!this._shouldShowPreviousClicker) {\n this._shouldShowPreviousClicker = true;\n this.forceUpdate();\n }\n } else {\n if (scrollPosition <= previousScrollMinLimit) {\n if (this._shouldShowPreviousClicker) {\n this._shouldShowPreviousClicker = false;\n this.forceUpdate();\n }\n } else if (!this._shouldShowPreviousClicker) {\n this._shouldShowPreviousClicker = true;\n this.forceUpdate();\n }\n\n if (scrollPosition >= maxScroll) {\n if (this._shouldShowNextClicker) {\n this._shouldShowNextClicker = false;\n this.forceUpdate();\n }\n } else if (!this._shouldShowNextClicker) {\n this._shouldShowNextClicker = true;\n this.forceUpdate();\n }\n }\n };\n\n /**\n * Removes the product from a list.\n * @param itemId - The id of a product to remove.\n */\n private readonly _removeProductFromList = (itemId: string): void => {\n ProductComparisonState.instance(this.props.context.request).removeItemById(itemId);\n this.setState(previousState => {\n return {\n productsData: previousState.productsData?.filter(item => item.itemId !== itemId)\n };\n });\n };\n\n /**\n * Prepares quick view component for the given product.\n * @param product - Product information.\n * @returns The quick view component or null if no quick view info is provided.\n */\n private _renderQuickView(product: IProductComparisonItemData): React.ReactNode | null {\n const quickViewSlot = ArrayExtensions.hasElements(this.props.slots.quickViews) ? this.props.slots.quickViews[0] : null;\n if (ObjectExtensions.isNullOrUndefined(quickViewSlot)) {\n return null;\n }\n\n const selectedDimensions = product.productInfo.Dimensions?.filter(dimension => dimension.DimensionValue?.Value);\n\n return React.cloneElement(quickViewSlot as React.ReactElement, {\n selectedProductId: product.productInfo.RecordId,\n selectedDimensions\n });\n }\n\n /**\n * Handles entering into hover mode.\n * @param itemId - Item id of the cell which is hovered.\n * @returns Event handler.\n */\n private readonly _handleHoverIn = (itemId: string) => () => {\n this._hoveringCellItemId = itemId;\n\n this.setState({\n hoverStateLastUpdate: Date.now()\n });\n };\n\n /**\n * Handles exiting from the hover mode.\n * @param itemId - Item id of the cell which is hovered.\n * @returns Event handler.\n */\n private readonly _handleHoverOut = (itemId: string) => () => {\n if (this._hoveringCellItemId !== itemId) {\n return;\n }\n\n this._hoveringCellItemId = undefined;\n this.setState({\n hoverStateLastUpdate: Date.now()\n });\n };\n\n /**\n * Retrieves product image react node.\n * @param className - Class name to use.\n * @param product - Product info.\n * @returns React node.\n */\n private _renderProductImage(className: string, product?: SimpleProduct): React.ReactNode | undefined {\n if (ObjectExtensions.isNullOrUndefined(product)) {\n return undefined;\n }\n\n const defaultImageSettingsQ = 'w=140&h=140&m=6';\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: defaultImageSettingsQ, w: 0, h: 0 },\n lg: { q: defaultImageSettingsQ, w: 0, h: 0 },\n xl: { q: defaultImageSettingsQ, w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n <Image\n altText={product?.Name}\n key={product.Name}\n src={product.PrimaryImageUrl ?? ''}\n fallBackSrc={getFallbackImageUrl(product.ItemId, this.props.context.actionContext.requestContext.apiSettings) ?? ''}\n gridSettings={this.props.context.request.gridSettings!}\n imageSettings={defaultImageSettings}\n loadFailureBehavior='empty'\n className={className}\n requestContext={this.props.context.actionContext.requestContext}\n />\n );\n }\n\n private _getTableHeaderProps(itemId: string): INodeProps {\n const isHoverModeEnabled = this._hoveringCellItemId === itemId;\n let headerClassName = ProductComparison.tableHeaderCellClassName;\n if (isHoverModeEnabled) {\n headerClassName = classnames(headerClassName, 'msc-product-comparison__cell-hover');\n }\n return {\n className: headerClassName,\n key: `${headerClassName}__product-${itemId}-${this.state.hoverStateLastUpdate}`,\n onMouseEnter: this._handleHoverIn(itemId),\n onMouseLeave: this._handleHoverOut(itemId)\n };\n }\n\n private _getTableCellProps(itemId: string): INodeProps {\n const isHoverModeEnabled = this._hoveringCellItemId === itemId;\n let cellClassName = ProductComparison.tableCellClassName;\n if (isHoverModeEnabled) {\n cellClassName = classnames(cellClassName, 'msc-product-comparison__cell-hover');\n }\n return {\n className: cellClassName,\n key: `${cellClassName}__product-${itemId}-${this.state.hoverStateLastUpdate}`,\n onMouseEnter: this._handleHoverIn(itemId),\n onMouseLeave: this._handleHoverOut(itemId),\n role: 'menuitem',\n tabIndex: 0\n };\n }\n\n private _renderProductRating(rating?: RatingsSummary): React.ReactNode {\n if (ObjectExtensions.isNullOrUndefined(rating?.averageRating)) {\n return null;\n }\n\n const ratingValue = rating!;\n\n const defaultReviewsCount = 0;\n\n return (\n <RatingComponent\n avgRating={ratingValue.averageRating!}\n readOnly\n ariaLabel={format(this.props.resources.productComparisonProductItemRatingAriaLabel, ratingValue.averageRating, '5')}\n ratingCount={`${ratingValue.reviewsCount ?? defaultReviewsCount}`}\n shouldShowFullRatingDescription\n data={{}}\n context={this.props.context}\n id={this.props.id}\n typeName={this.props.typeName}\n />\n );\n }\n\n private _renderBackToShoppingButton() {\n return (\n <Button\n className='msc-product-comparison__back-button'\n {...this.props.telemetry}\n role='button'\n href='#'\n onClick={this._goBack}\n title={this.props.resources.backToShoppingLabel}\n >\n {this.props.resources.backToShoppingLabel}\n </Button>\n );\n }\n\n private readonly _goBack = (): void => {\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n if (document.referrer === '') {\n window.location.href = backToShoppingUrl;\n } else {\n window.history.back();\n }\n };\n\n /**\n * Retrieves localized text for dimension.\n * @param dimensionId - Dimension id.\n * @returns Localized text.\n */\n private _getDimensionName(dimensionId: number): string | undefined {\n if (dimensionId === ProductDimensionType.Color) {\n return this.props.resources.productComparisonProductItemColorDimension;\n }\n if (dimensionId === ProductDimensionType.Size) {\n return this.props.resources.productComparisonProductItemSizeDimension;\n }\n\n if (dimensionId === ProductDimensionType.Style) {\n return this.props.resources.productComparisonProductItemStyleDimension;\n }\n return undefined;\n }\n\n private getUpdatedDimensionsProps(dimensionId: number, products: IProductComparisonProductMainInfo[]) {\n const dimensionClassName = `${ProductComparison.dimensionsRowClassName}__dimension-${dimensionId}`;\n const dimensionDescription = this._getDimensionName(dimensionId);\n const dimensionName = convertProductDimensionTypeToDimensionTypes(dimensionId);\n let dimensionSelectionType = SelectionType.text;\n\n const dimensionsAsSwatchConfiguration: DimensionTypes[] | undefined = this.props.context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsAsSwatchConfiguration) &&\n !dimensionsAsSwatchConfiguration?.includes(DimensionTypes.none) &&\n dimensionsAsSwatchConfiguration?.includes(dimensionName)\n ) {\n dimensionSelectionType = SelectionType.swatch;\n }\n\n const productDimensionValues = products.map(productMainInfo => {\n let dimension: IDimensionResult[] = [];\n let textValue: string = '';\n let renderSwatch: JSX.Element | undefined;\n this.props.data.productsData?.result?.map(productsDimension => {\n if (productsDimension.productInfo.RecordId === productMainInfo.product.productInfo.RecordId) {\n dimension = productsDimension.dimensions?.dimensions ?? [];\n }\n return dimension;\n });\n\n if (dimensionSelectionType === SelectionType.swatch) {\n renderSwatch = (\n <div className='msc-product__dimensions'>\n {dimension.map(dimensionItems => {\n return (\n <div\n className='msc-product__dimensions-item'\n key={`msc-product__dimensions-item-${productMainInfo.product.itemId}`}\n >\n {dimensionItems.result.map(dimensionItem => {\n let currentDimensionId: number | undefined;\n const swatches =\n dimensionItem.map<ISwatchItem>(swatchItem => {\n let isDefaultDimension: boolean = false;\n const selectedDimensions = productMainInfo.product.productInfo.Dimensions?.filter(\n item => item.DimensionTypeValue === swatchItem.DimensionTypeValue\n );\n selectedDimensions?.map(selectedDimension => {\n if (\n selectedDimension.DimensionValue !== undefined &&\n selectedDimension.DimensionValue.DimensionId ===\n swatchItem.DimensionValue?.DimensionId\n ) {\n isDefaultDimension = true;\n }\n return isDefaultDimension;\n });\n\n if (swatchItem.DimensionTypeValue === dimensionId) {\n currentDimensionId = swatchItem.DimensionTypeValue;\n }\n const dimensionType = dimensionName;\n return {\n itemId: `${swatchItem.DimensionValue?.RecordId ?? ''}-${swatchItem.DimensionValue\n ?.Value ?? ''}`,\n value: swatchItem.DimensionValue?.Value ?? '',\n dimensionType,\n colorHexCode: swatchItem.DimensionValue?.ColorHexCode,\n imageUrl: swatchItem.DimensionValue?.ImageUrl,\n isDefault: isDefaultDimension\n };\n }) ?? [];\n if (currentDimensionId && currentDimensionId === dimensionId) {\n return (\n <SwatchComponent\n apiSettings={this.props.context.request.apiSettings}\n list={swatches}\n isSelectionEnabled={false}\n />\n );\n }\n return null;\n })}\n </div>\n );\n })}\n </div>\n );\n }\n\n if (dimensionSelectionType === SelectionType.text) {\n dimension.map(item => {\n return item.result.map(items => {\n return items.map(dimensionItem => {\n if (dimensionItem.DimensionTypeValue === dimensionId) {\n const productDimensionSeperatorValue =\n textValue !== ''\n ? this.props.resources.productDimensionSeparator\n : this.props.resources.productDimensionSeparator.replace('/', '');\n textValue = textValue + format(productDimensionSeperatorValue, dimensionItem.DimensionValue?.Value ?? '');\n }\n return textValue;\n });\n });\n });\n }\n\n const dimensionProps = {\n RecordId: productMainInfo.product.productInfo.RecordId,\n Value: textValue,\n DimensionId: dimensionId,\n ImageUrl: productMainInfo.product.productInfo.PrimaryImageUrl\n };\n\n return {\n dimensionProps,\n productMainInfo,\n node: (\n <div key={`${productMainInfo.product.itemId}-${dimensionClassName}`}>\n {dimensionSelectionType === SelectionType.swatch ? renderSwatch : dimensionProps.Value}\n </div>\n )\n };\n });\n return {\n dimensionId,\n dimensionName: dimensionDescription,\n dimensionClassName,\n productDimensionValues\n };\n }\n private _getSpecificationProps(specifications: AttributeValue[], products: IProductComparisonProductMainInfo[]) {\n return specifications.map(specification => {\n const specificationClassName = `${ProductComparison.specificationsRowClassName}__specification-${specification.Name!}`;\n\n const specificationValues = products.map(productMainInfo => {\n const productSpecification = productMainInfo.product.specifications?.specificationsList.find(\n productSpecifications => productSpecifications.Name === specification.Name\n );\n\n return {\n productSpecification,\n productMainInfo,\n node: (\n <div key={`${productMainInfo.product.itemId}-${specificationClassName}`}>\n <ProductSpecification\n specification={productSpecification}\n telemetry={this.props.telemetry}\n context={this.props.context}\n resources={this.props.resources}\n />\n </div>\n )\n };\n });\n\n return {\n specification,\n specificationClassName,\n specificationValues\n };\n });\n }\n\n private _renderHeading(): React.ReactNode {\n return <Heading className={`${ProductComparison.className}__header`} text={this.props.resources.productComparisonTitle} />;\n }\n\n private _renderLoading(): React.ReactNode {\n return <div className={`${ProductComparison.className}__loading`}>{this.props.resources.productComparisonLoadingText}</div>;\n }\n\n private _renderClearAllButton(): React.ReactNode {\n return (\n <Button\n className={`${ProductComparison.actionBarClassName}__clear-all-button`}\n aria-label={this.props.resources.productComparisonClearAllButtonAriaLabel}\n onClick={this._clearAllProductsFromComparison}\n >\n {this.props.resources.productComparisonClearAllButtonText}\n </Button>\n );\n }\n\n /**\n * Retrieves unique dimension ids of product.\n * @param products - Product.\n * @returns Unique dimension ids.\n */\n private getProductsDimensionsIds(products: IProductComparisonItemData[]): number[] {\n const dimensions = products.map(product => product.productInfo.Dimensions);\n const allDimensions: ProductDimension[] = ArrayExtensions.flatten(dimensions);\n\n const dimensionIds = ArrayExtensions.validValues(allDimensions.map(dimension => dimension.DimensionTypeValue));\n const uniqueDimensionIds = ArrayExtensions.unique(dimensionIds);\n\n return uniqueDimensionIds;\n }\n\n private _renderPreviousClicker(): React.ReactNode {\n return (\n <Button\n className={classnames(ProductComparison.tableClickerClassName, `${ProductComparison.tableClickerClassName}__previous`)}\n role='button'\n onClick={this._handlePreviousClick}\n onKeyUp={this._handlePreviousClick}\n >\n <span className={`${ProductComparison.tableClickerClassName}__previous__icon`} aria-hidden='true' />\n <span className='screen-reader-only'>{this.props.resources.productComparisonPreviousProduct}</span>\n </Button>\n );\n }\n\n private _renderNextClicker(): React.ReactNode {\n return (\n <Button\n className={classnames(ProductComparison.tableClickerClassName, `${ProductComparison.tableClickerClassName}__next`)}\n role='button'\n onClick={this._handleNextClick}\n onKeyUp={this._handleNextClick}\n >\n <span className={`${ProductComparison.tableClickerClassName}__next__icon`} aria-hidden='true' />\n <span className='screen-reader-only'>{this.props.resources.productComparisonNextProduct}</span>\n </Button>\n );\n }\n\n private _renderRemoveFromComparisonButton(itemId: string): React.ReactNode {\n return (\n <RemoveFromComparisonButtonComponent\n className={`${ProductComparison.productRowClassName}__remove`}\n key={itemId}\n resources={this.props.resources}\n itemId={itemId}\n onClickHandler={this._removeProductFromList}\n context={this.props.context}\n id={this.props.id}\n typeName={this.props.typeName}\n data={{}}\n />\n );\n }\n\n private _getProductsMainInfo(products: IProductComparisonItemData[]): IProductComparisonProductMainInfo[] {\n const currentCatalogId = getCatalogId(this.props.context.request);\n return products.map(product => {\n let productUrlLink: string | undefined;\n if (msdyn365Commerce.isBrowser) {\n const productUrl = getProductUrlSync(product.productInfo, this.props.context.actionContext);\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${product.catalogId}`);\n product.productInfo.Dimensions?.map(dimension => {\n const dimensionValue = dimension.DimensionValue?.Value;\n if (!StringExtensions.isNullOrWhitespace(dimensionValue)) {\n const dimensionName = convertProductDimensionTypeToDimensionTypes(dimension.DimensionTypeValue);\n fullUrl.searchParams.set(dimensionName, dimensionValue!);\n }\n });\n productUrlLink = fullUrl.href;\n }\n const isHoverModeEnabled = this._hoveringCellItemId === product.itemId;\n let cellClassName = ProductComparison.tableHeaderCellClassName;\n if (isHoverModeEnabled) {\n cellClassName = classnames(cellClassName, 'msc-product-comparison__cell-hover');\n }\n const isFromCurrentCatalog = product.catalogId === currentCatalogId;\n\n const productImageContainerClassName = `${ProductComparison.productRowClassName}__product-image-container`;\n const productImageClassName = `${productImageContainerClassName}__product-image`;\n const productNameClassName = `${ProductComparison.productRowClassName}__product-name`;\n const productPriceClassName = `${ProductComparison.productRowClassName}__product-price`;\n const cellNewWidth = this._getCellWidth();\n const style = {\n width: `${cellNewWidth}px`,\n minWidth: `${cellNewWidth}px`,\n maxWidth: `${cellNewWidth}px`\n };\n return {\n cellContainerProps: {\n className: cellClassName,\n key: product.itemId,\n ref: this._tableCellReference,\n onMouseEnter: this._handleHoverIn(product.itemId),\n onMouseLeave: this._handleHoverOut(product.itemId),\n role: 'menuitem',\n tabIndex: 0,\n style: style\n },\n product,\n productUrl: productUrlLink,\n removeFromComparisonButton: this._renderRemoveFromComparisonButton(product.itemId),\n productImage: (\n <div className={productImageContainerClassName} key={product.itemId}>\n {this._renderProductImage(productImageClassName, product.productInfo)}\n </div>\n ),\n productLink: (\n <a className={productNameClassName} href={productUrlLink} key={product.itemId}>\n {product.productInfo.Name}\n </a>\n ),\n productPrice: (\n <div className={productPriceClassName} key={product.itemId}>\n {product.price && (\n <PriceComponent\n context={this.props.context}\n id={this.props.id}\n typeName={this.props.typeName}\n data={{ price: product.price }}\n freePriceText={this.props.resources.productComparisonProductItemFreePrice}\n originalPriceText={this.props.resources.productComparisonProductItemOriginalPrice}\n currentPriceText={this.props.resources.productComparisonProductItemCurrentPrice}\n />\n )}\n </div>\n ),\n quickView: this._renderQuickView(product),\n isFromCurrentCatalog,\n goToProductDetailsButton: (\n <Button href={productUrlLink} title={this.props.resources.productComparisonGoToProductDetailsButtonText}>\n {this.props.resources.productComparisonGoToProductDetailsButtonText}\n </Button>\n ),\n tableCellProps: this._getTableCellProps(product.itemId),\n tableHeaderProps: this._getTableHeaderProps(product.itemId),\n productRating:\n product.rating !== undefined ? <div key={product.itemId}>{this._renderProductRating(product.rating)}</div> : undefined,\n productDescription:\n product.productInfo !== undefined ? (\n <div key={product.itemId}>{ProductComparison._renderProductDescription(product.productInfo)}</div>\n ) : (\n undefined\n )\n };\n });\n }\n}\n\nexport default ProductComparison;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './actions';\nexport * from './base';\nexport * from './product-comparison';\nexport * from './product-comparison.props.autogenerated';\nexport * from './product-comparison.view';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * RefineItem properties.\n */\nexport interface IRefineItemProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n productRefinerValue: ProductRefinerValue;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n selectedRefinerValues?: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n context: ICoreContext<IGeneric<IAny>>;\n moduleId: string;\n moduleTypeName: string;\n index?: number;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobileView?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onToggle(notfication: Readonly<IRefineItemToggleNotification>): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine item state.\n */\nexport interface IRefineItemState extends React.ComponentState {\n isChecked: boolean;\n renderingError?: object;\n}\n\n/**\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\n */\nexport default class RefineItem extends React.Component<IRefineItemProps, IRefineItemState> {\n private readonly anchorType: React.RefObject<HTMLAnchorElement>;\n\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IRefineItemProps) {\n super(props);\n this._onClick = this._onClick.bind(this);\n this.state = {\n isChecked: !!this.props.selectedRefinementCriterion\n };\n this.anchorType = React.createRef();\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n const {\n isDisabled,\n refineItemCommonProps,\n parentProductRefinerHierarchy,\n productRefinerValue,\n selectedRefinementCriterion,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n index,\n children,\n onToggle,\n context,\n telemetryContent,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n ...attrs\n } = this.props;\n if (!productRefinerValue) {\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\n return undefined;\n }\n if (!productRefinerValue.LeftValueBoundString) {\n refineItemCommonProps.telemetry.warning(\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\n );\n }\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\n const isChecked = !!selectedRefinementCriterion;\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\n return this._renderRating(\n productRefinerValue,\n parentProductRefinerHierarchy,\n isChecked,\n context,\n index,\n telemetryContent,\n productCountAriaLabel,\n singleProductCountAriaLabel\n );\n }\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productCount = productRefinerValue.Count || 0;\n let refineMenuItemAriaLabel;\n if (productCount === 1) {\n refineMenuItemAriaLabel = refineItemAriaLabel\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\n : '';\n } else {\n refineMenuItemAriaLabel = refineItemsAriaLabel\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\n : '';\n }\n\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\n\n let className = 'ms-refine-submenu-item';\n if (shouldDisplayAsSwatch) {\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\n }\n\n // If the swatch has no color or image specified, it should be displayed as text.\n // We don't use swatch logic to display the number of the results found together with the text.\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\n const hasContentSwatch = hasColor || hasImage;\n\n return (\n <li className={className} id={`${parentProductRefinerHierarchy.KeyName!}_${index}`}>\n <a\n key={selectedRefinementCriterion ? 'true' : 'false'}\n ref={this.anchorType}\n href={this._getRefinerUrl()}\n tabIndex={hasColor ? -1 : 0}\n onClick={this._onClick}\n className={itemTypeClassName}\n role={inputType}\n aria-label={refineMenuItemAriaLabel}\n aria-checked={!!selectedRefinementCriterion}\n {...attribute}\n {...attrs}\n >\n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n <span className='ms-refine-submenu-item__label' aria-hidden='true'>\n {/* eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string. */}\n {productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString}\n {productRefinerValue.Count !== undefined && ` (${productRefinerValue.Count})`}\n </span>\n </a>\n </li>\n );\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext<IDimensionsApp>);\n return shouldDisplayAsSwatch;\n }\n\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\n const productRefinerValue = this.props.productRefinerValue;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n const swatchItems = [\n {\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\n value: text,\n dimensionType,\n colorHexCode: productRefinerValue.SwatchColorHexCode,\n imageUrl: productRefinerValue.SwatchImageUrl\n }\n ];\n\n return (\n <SwatchComponent\n className='ms-refine-submenu-item__swatch'\n apiSettings={this.props.context.request.apiSettings}\n list={swatchItems}\n isSelectionEnabled={false}\n isRefineItem\n />\n );\n }\n\n private _getRefinerUrl(): string {\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n\n if (productRefinerValue) {\n return urlBuilder({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n }\n\n return '';\n }\n\n private readonly _onClick = (e: React.MouseEvent<HTMLAnchorElement | HTMLInputElement>): void => {\n e.preventDefault();\n\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n if (productRefinerValue) {\n this.props.onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n\n setTimeout(() => {\n this.anchorType.current && this.anchorType.current.focus();\n }, 0);\n }\n };\n\n private _renderRating(\n productRefinerValue: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\n isChecked: boolean,\n context: ICoreContext,\n index?: number,\n telemetryContent?: ITelemetryContent,\n ratingUserCountAriaLabel?: string,\n ratingSingleUserCountAriaLabel?: string\n ): JSX.Element | undefined {\n if (productRefinerValue.LeftValueBoundString) {\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\n const ratingRefiner = this.props.selectedRefinerValues?.find(\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\n );\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\n const defaultChkProductCount = 1;\n let ratingComponentClass: string = 'ms-rating-component';\n if (refinerRating > selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__up`;\n } else if (refinerRating < selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__down`;\n } else {\n ratingComponentClass = `${ratingComponentClass}__current`;\n }\n const productCountAriaLabelValue =\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\n return (\n <li\n className='ms-refine-submenu-item ms-refine-submenu-item__rating'\n role={!this.props.isMobileView ? 'presentation' : undefined}\n id={`${parentProductRefinerHierarchy.KeyName!}_${index!}`}\n >\n <a\n href={this._getRefinerUrl()}\n role='option'\n aria-selected={isChecked}\n aria-label={`${parentProductRefinerHierarchy.KeyName!}_${productRefinerValue.LeftValueBoundLocalizedString!}\n ${productCountAriaLabelValue!}`}\n onClick={this._onClick}\n {...attribute}\n >\n <RatingComponent\n className={ratingComponentClass}\n avgRating={refinerRating}\n ratingCount={productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString}\n hideCount={false}\n readOnly\n ariaLabel=''\n context={context}\n id={this.props.moduleId}\n typeName={this.props.moduleTypeName}\n data={{}}\n />\n <span className='refine-submenu-item__rating' aria-hidden={this.props.isMobileView ? 'true' : undefined}>\n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n </span>\n </a>\n </li>\n );\n }\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport withModuleState from './with-module-state';\n\nexport * from './module-state';\nexport * from './module-state.data';\n\nexport { withModuleState };\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\nimport * as React from 'react';\r\n\r\ninterface IAlertProps {\r\n message: string;\r\n}\r\n\r\nconst CheckoutAlert: React.FC<IAlertProps> = ({ message }) => (\r\n <p className='ms-checkout__error-message' role='alert' aria-live='assertive'>\r\n {message}\r\n </p>\r\n);\r\n\r\nexport default CheckoutAlert;\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\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { ICcbcucheckoutData } from '../ccbcucheckout.data';\r\nimport { ICcbcucheckoutProps } from '../ccbcucheckout.props.autogenerated';\r\n\r\ntype deliveryType = 'pickup' | 'ship';\r\n\r\nexport interface IPickUpAtStore {\r\n PickUpAtStore: INodeProps;\r\n label: React.ReactNode;\r\n location: React.ReactNode;\r\n}\r\n\r\nexport interface ILineItem {\r\n LineId: string;\r\n LineItem: INodeProps;\r\n item?: React.ReactNode;\r\n pickUpAtStore?: IPickUpAtStore;\r\n}\r\n\r\nexport interface ILineItemDeliveryGroup {\r\n LineItemDeliveryGroup: INodeProps;\r\n LineItemList: INodeProps;\r\n heading: React.ReactNode;\r\n lineItems: ILineItem[];\r\n}\r\n\r\nexport interface ILineItems {\r\n LineItems: INodeProps;\r\n Header: INodeProps;\r\n heading: React.ReactNode;\r\n editLink: React.ReactNode;\r\n itemsForPickup?: ILineItemDeliveryGroup;\r\n itemsForShip?: ILineItemDeliveryGroup;\r\n}\r\n\r\n// tslint:disable-next-line:max-func-body-length\r\nexport const getLineItems = (input: ICcbcucheckoutProps<ICcbcucheckoutData>): ILineItems | undefined => {\r\n const _getDeliveryLocation = (cartLine: CartLine): string => {\r\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\r\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\r\n return '';\r\n }\r\n\r\n const locationMatch:any = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\r\n return location.OrgUnitNumber === cartLine.FulfillmentStoreId;\r\n });\r\n\r\n return locationMatch && locationMatch.OrgUnitName;\r\n };\r\n\r\n const _getProduct = (productId: number): SimpleProduct | undefined => {\r\n const products = get(input, 'data.products.result') || [];\r\n return products.find((_product: SimpleProduct) => {\r\n return productId === _product.RecordId;\r\n });\r\n };\r\n\r\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\r\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n config: { imageSettings },\r\n resources: {\r\n quantityDisplayString,\r\n productDimensionTypeColor,\r\n productDimensionTypeSize,\r\n productDimensionTypeStyle,\r\n configString,\r\n inputQuantityAriaLabel,\r\n discountStringText,\r\n shippingCharges\r\n },\r\n context: {\r\n request: { gridSettings }\r\n }\r\n } = input;\r\n\r\n if (!product) {\r\n return;\r\n }\r\n\r\n return (\r\n <CartLineItemComponent\r\n id={id}\r\n typeName={typeName}\r\n context={context}\r\n resources={{\r\n sizeString: productDimensionTypeSize,\r\n colorString: productDimensionTypeColor,\r\n styleString: productDimensionTypeStyle,\r\n quantityDisplayString,\r\n configString,\r\n inputQuantityAriaLabel,\r\n discountStringText,\r\n originalPriceText:'',\r\n currentPriceText:'',\r\n shippingChargesText: shippingCharges\r\n }}\r\n isQuantityEditable={false}\r\n imageSettings={imageSettings!}\r\n gridSettings={gridSettings!}\r\n productUrl={getProductUrlSync(product, context.actionContext, undefined)}\r\n primaryImageUrl={product.PrimaryImageUrl}\r\n data={{\r\n cartLine: cartLine,\r\n product: product\r\n }}\r\n />\r\n );\r\n };\r\n\r\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\r\n const {\r\n resources: { pickUpAtStoreWithLocationText }\r\n } = input;\r\n\r\n return {\r\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\r\n label: <span className='ms-checkout__store-label'>{pickUpAtStoreWithLocationText}</span>,\r\n location: <div className='ms-checkout__store-location'>{pickupDeliveryLocation}</div>\r\n };\r\n };\r\n\r\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\r\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\r\n return items.map(cartLine => {\r\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\r\n const isPickUp = cartLine.DeliveryMode === pickupDeliveryModeCode;\r\n return {\r\n LineId: cartLine.LineId || '',\r\n LineItem: { className: 'ms-checkout__line-item' },\r\n item: _getLineItemComponent(cartLine),\r\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined\r\n };\r\n });\r\n };\r\n\r\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\r\n const {\r\n resources: {\r\n itemLabel,\r\n itemsLabel,\r\n inStorePickUpLabel,\r\n shippingCountCheckoutLineItem\r\n }\r\n } = input;\r\n\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n const title = type === 'ship' ? shippingCountCheckoutLineItem : inStorePickUpLabel;\r\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\r\n };\r\n\r\n const _countItems = (items: CartLine[]): number => {\r\n return items.reduce((count, item) => {\r\n return count + (item.Quantity || 0);\r\n // tslint:disable-next-line:align\r\n }, 0);\r\n };\r\n\r\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\r\n const cart:any = get(input, 'data.checkout.result.checkoutCart.cart');\r\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\r\n return type === 'ship'\r\n ? cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode !== pickupDeliveryModeCode)\r\n : cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === pickupDeliveryModeCode);\r\n };\r\n\r\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\r\n const items = _filterItemsByDiliveryType(type);\r\n\r\n if (items.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const count = _countItems(items);\r\n const title = _getGroupTitleComponent(count, type);\r\n\r\n return {\r\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\r\n LineItemList: { className: 'ms-checkout__line-items-list' },\r\n heading: <div className='ms-checkout__line-items-group-title'>{title}</div>,\r\n lineItems: _getLineItemsComponents(items)\r\n };\r\n };\r\n\r\n const _getLineItems = (): ILineItems | undefined => {\r\n const {\r\n context,\r\n config: { lineItemsHeading },\r\n data: { products },\r\n resources: { editCartText }\r\n } = input;\r\n\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n\r\n if (!cart || !cart.CartLines || !cart.CartLines.length || !products) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n LineItems: { className: 'ms-checkout__line-items' },\r\n Header: { className: 'ms-checkout__line-items-header' },\r\n heading: lineItemsHeading && <Heading className='ms-checkout__line-items-heading' {...lineItemsHeading} />,\r\n editLink: (\r\n <Button\r\n className='ms-checkout__line-items-edit-cart-link'\r\n title={editCartText}\r\n color='link'\r\n href={getUrlSync('cart', context.actionContext) || ''}\r\n >\r\n {editCartText}\r\n </Button>\r\n ),\r\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\r\n itemsForShip: _getLineItemsByDeliveryType('ship')\r\n };\r\n };\r\n\r\n return _getLineItems();\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\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { Heading,INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { ICcbcucheckoutData } from '../ccbcucheckout.data';\r\nimport { ICcbcucheckoutProps } from '../ccbcucheckout.props.autogenerated';\r\n\r\nexport interface IOrderSummary {\r\n orderSummaryProps: INodeProps;\r\n heading?: React.ReactNode;\r\n lines?: IOrderSummaryLines;\r\n chargeMessage?: React.ReactNode;\r\n}\r\nexport const getOrderSummary = (input: ICcbcucheckoutProps<ICcbcucheckoutData>): IOrderSummary => {\r\n const {\r\n config: { orderSummaryHeading },\r\n data: { checkout },\r\n resources: {\r\n subTotalLabel,\r\n shippingLabel,\r\n taxLabel,\r\n orderTotalLabel,\r\n loyaltyLabel,\r\n giftcardLabel,\r\n totalDiscountsLabel,\r\n freeText,\r\n toBeCalculatedText,\r\n otherCharges\r\n },\r\n context,\r\n typeName,\r\n id,\r\n telemetry\r\n } = input;\r\n\r\n const checkoutState = get(checkout, 'result');\r\n const cart:any = get(checkout, 'result.checkoutCart.cart');\r\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\r\n const channelConfiguration = context.request.channel!;\r\n const txtCharge = context.app.config.chargeMessage;\r\n const isShowOrHideTaxEnabled = context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\r\n return {\r\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\r\n heading: orderSummaryHeading && <Heading className='msc-order-summary__heading' {...orderSummaryHeading} />,\r\n chargeMessage: txtCharge,\r\n lines: showLineItems\r\n ? OrderSummary({\r\n checkoutState,\r\n cart,\r\n subTotalLabel,\r\n shippingLabel,\r\n taxLabel,\r\n orderTotalLabel,\r\n loyaltyLabel,\r\n giftcardLabel,\r\n totalDiscountsLabel,\r\n freeText,\r\n toBeCalculatedText,\r\n context,\r\n typeName,\r\n id,\r\n channelConfiguration,\r\n telemetry,\r\n otherChargeLabel: otherCharges,\r\n isShowTaxBreakup : isShowOrHideTaxEnabled\r\n // eslint-disable-next-line no-trailing-spaces\r\n\r\n })\r\n : undefined\r\n };\r\n};\r\n","/* eslint-disable eqeqeq */\r\n/* eslint-disable react/no-find-dom-node */\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\nimport { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport * as React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nexport interface ICheckoutGuidedCardProps {\r\n step: number;\r\n title?: HeadingType;\r\n disabled?: boolean; // module is not available\r\n isActive?: boolean; // step === currentStep\r\n isVisted?: boolean; // step < currentStep\r\n isExpanded?: boolean;\r\n isReady?: boolean;\r\n isPending?: boolean;\r\n isUpdating?: boolean;\r\n isSubmitting?: boolean;\r\n isMobile?: boolean;\r\n hasInitialized?: boolean;\r\n hasControlGroup?: boolean;\r\n children: React.ReactNode;\r\n resource: {\r\n checkoutStepTitleFormat: string;\r\n saveBtnLabel: string;\r\n changeBtnLabel: string;\r\n cancelBtnLabel: string;\r\n saveAndContinueBtnLabel: string;\r\n };\r\n onEdit?(): void;\r\n onCancel?(): void;\r\n onSubmit?(): void;\r\n onNext(): void;\r\n}\r\n\r\n/**\r\n *\r\n * CheckoutGuidedCard component\r\n * @extends {React.Component<ICheckoutGuidedCardProps>}\r\n */\r\nclass CheckoutGuidedCard extends React.PureComponent<ICheckoutGuidedCardProps> {\r\n private editButtonRef: React.RefObject<HTMLButtonElement> = React.createRef();\r\n private formCardRef: React.RefObject<HTMLDivElement> = React.createRef();\r\n\r\n public componentDidUpdate(prevProps: ICheckoutGuidedCardProps): void {\r\n /**\r\n * Move to next step when current step is ready\r\n */\r\n const { isActive, isReady, onNext, isVisted, onEdit } = this.props;\r\n\r\n // Move to next step after completing the current step\r\n if (isActive && isReady) {\r\n onNext();\r\n }\r\n\r\n // Set the focus to Edit button once edit button appear\r\n // (It happens when current step switch to isReady status)\r\n const prevCanEdit = prevProps.isReady && prevProps.isVisted && !!prevProps.onEdit;\r\n const canEdit = isReady && isVisted && !!onEdit;\r\n if (!prevCanEdit && canEdit) {\r\n this.focusOnEditButton();\r\n this.scrollToTitle();\r\n }\r\n\r\n // Set the focus to the first focusable element\r\n // (It happens when current step switch to isUpdating status)\r\n if (prevProps.isReady && !isReady) {\r\n this.focusOnFirstFocusableElement();\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n title,\r\n disabled,\r\n isExpanded,\r\n isActive,\r\n isVisted,\r\n children,\r\n isReady,\r\n isPending,\r\n isUpdating,\r\n hasInitialized,\r\n hasControlGroup,\r\n onEdit,\r\n resource\r\n } = this.props;\r\n const { changeBtnLabel } = resource;\r\n\r\n const canEdit = hasControlGroup && isReady && isVisted && onEdit;\r\n var displayPaymentMessage = title? title.text : \"\";\r\n var paymentMsg = false;\r\n if(displayPaymentMessage == \"PAYMENT METHOD\"){\r\n paymentMsg = true;\r\n }\r\n return (\r\n <div\r\n className={classname('ms-checkout__guided-card', {\r\n active: isActive,\r\n expanded: isExpanded,\r\n closed: !isExpanded,\r\n visted: isVisted,\r\n hidden: disabled,\r\n initialized: hasInitialized,\r\n disabled: disabled,\r\n ready: isReady,\r\n pending: isPending,\r\n updating: isUpdating\r\n })}\r\n ref={this.formCardRef}\r\n >\r\n <div className='ms-checkout__guided-card-header'>\r\n {this.getTitle()}\r\n\r\n {canEdit && (\r\n <Button\r\n innerRef={this.editButtonRef}\r\n className='ms-checkout__guided-card-btn-edit'\r\n title={changeBtnLabel}\r\n color='link'\r\n onClick={onEdit}\r\n aria-label={title && title.text ? `${changeBtnLabel} ${title.text}` : ''}\r\n >\r\n {changeBtnLabel}\r\n </Button>\r\n )}\r\n </div>\r\n <div className={`paymentCardMsg`} style={{display: (paymentMsg? \"block\": \"none\")}}><span>Note: </span>AMEX is not accepted. Visa, Mastercard, or Discover only.</div>\r\n\r\n <div\r\n className={classname('ms-checkout__guided-card-body', {\r\n hidden: !isExpanded\r\n })}\r\n >\r\n <div className='ms-checkout__guided-card-content'>{children}</div>\r\n <div className={`paymentCardMsg`} style={{display: (paymentMsg? \"block\": \"none\")}}><span>Note: </span>Please enter the phone number without the country code and special characters - Eg:XXXXXXXXXX</div>\r\n <div className={`privacyPolicyAcceptanceMessage`} style={{display: (paymentMsg? \"block\": \"none\")}}>\r\n By providing a mobile phone number, you agree to receive text messages from Coca-Cola UNITED(+1(833)264-8334)about your Order(e.g., order confirmation, pickup reminder).To opt-out,reply STOP.Message and data rates may apply.\r\n </div>\r\n {this.renderFooder()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderFooder = (): JSX.Element | null => {\r\n const { isVisted, isReady, isSubmitting, hasControlGroup, onCancel, onSubmit, resource } = this.props;\r\n const { saveBtnLabel, cancelBtnLabel, saveAndContinueBtnLabel } = resource;\r\n\r\n const canSubmit = !isReady && onSubmit;\r\n const canCancel = !isReady && isVisted && onCancel;\r\n\r\n if (!hasControlGroup || (!canSubmit && !canCancel)) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className='ms-checkout__guided-card-footer'>\r\n {canSubmit && (\r\n <Button\r\n className={classname('ms-checkout__guided-card-btn-save', { 'is-submitting': isSubmitting })}\r\n title={isVisted ? saveBtnLabel : saveAndContinueBtnLabel}\r\n color='primary'\r\n disabled={isSubmitting}\r\n onClick={onSubmit}\r\n >\r\n {isVisted ? saveBtnLabel : saveAndContinueBtnLabel}\r\n </Button>\r\n )}\r\n {canCancel && (\r\n <Button\r\n className='ms-checkout__guided-card-btn-cancel'\r\n title={cancelBtnLabel}\r\n color='secondary'\r\n onClick={onCancel}\r\n >\r\n {cancelBtnLabel}\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n private focusOnFirstFocusableElement = (): void => {\r\n const node = ReactDOM.findDOMNode(this) as HTMLElement;\r\n const focussableElements = `\r\n a:not([disabled]),\r\n button:not([disabled]),\r\n input[type=submit]:not([disabled]),\r\n input[type=checkbox]:not([disabled]),\r\n input[type=text]:not([disabled]),\r\n input[type=radio]:not([disabled]),\r\n input[type=password]:not([disabled]),\r\n select:not([disabled]),\r\n textarea:not([disabled]),\r\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\r\n `;\r\n\r\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\r\n child && child.focus && child.focus();\r\n };\r\n\r\n private focusOnEditButton = (): void => {\r\n // Focus on edit button\r\n const editButton: any =\r\n this.editButtonRef &&\r\n this.editButtonRef.current &&\r\n this.editButtonRef.current? this.editButtonRef.current.focus() : \"\" &&\r\n (this.editButtonRef.current as HTMLElement);\r\n editButton && editButton.focus();\r\n };\r\n\r\n private scrollToTitle = (): void => {\r\n // scroll window to the title of the step that was just completed only in mobile viewport\r\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\r\n formCard && formCard.scrollIntoView();\r\n };\r\n\r\n private getTitle = (): JSX.Element => {\r\n const { step, title } = this.props;\r\n const { headingTag: Tag = 'h2', text = '' } = title || {};\r\n return (\r\n <Tag className='ms-checkout__guided-card-title'>\r\n <span className='ms-checkout__guided-card-title-step'>{step + 1}. </span>\r\n {text && <span className='ms-checkout__guided-card-title-text'>{text}</span>}\r\n </Tag>\r\n );\r\n };\r\n}\r\n\r\nexport default CheckoutGuidedCard;\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\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\r\nimport get from 'lodash/get';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport GuidedCard from '../components/guided-card';\r\n\r\nexport interface ICheckoutGuidedFormProps {\r\n items: any[];\r\n moduleState: IModuleStateManager;\r\n disableGuidedCheckoutFlow?: boolean;\r\n isMobile?: boolean;\r\n isEditor?: boolean;\r\n resource: {\r\n checkoutStepTitleFormat: string;\r\n saveBtnLabel: string;\r\n changeBtnLabel: string;\r\n cancelBtnLabel: string;\r\n saveAndContinueBtnLabel: string;\r\n };\r\n privacyPolicy: string;\r\n termsOfUse: string;\r\n}\r\n\r\ninterface ICheckoutGuidedFormState {\r\n currentStep: number;\r\n}\r\n\r\n/**\r\n *\r\n * CheckoutGuidedForm component\r\n * @extends {React.Component<ICheckoutGuidedFormProps>}\r\n */\r\n@observer\r\nclass CheckoutGuidedForm extends React.Component<ICheckoutGuidedFormProps> {\r\n public state: ICheckoutGuidedFormState = {\r\n currentStep: 0\r\n };\r\n\r\n public componentDidMount(): void {\r\n /**\r\n * Append child modules\r\n */\r\n const childIds:any = this.props.items.map((item: any) => get(item, 'props.id'));\r\n this.props.moduleState.init({ childIds });\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { moduleState, items, resource } = this.props;\r\n\r\n if (!items || !moduleState) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n <div className='ms-checkout__guided-form'>\r\n {items.map((item: React.ReactNode) => {\r\n const childId = this.getId(item);\r\n const step = this.getStep(childId);\r\n const title = this.getHeading(item);\r\n const state = this.props.moduleState.getModule(childId);\r\n const { isReady, isPending, isUpdating, isDisabled, onEdit, onCancel, onSubmit, hasModuleState, hasInitialized } =\r\n state || ({} as IModuleStateManager);\r\n return (\r\n <GuidedCard\r\n key={childId}\r\n step={step}\r\n title={title}\r\n resource={resource}\r\n disabled={!hasModuleState || isDisabled}\r\n isActive={this.isActive(step)}\r\n isVisted={this.isVisted(step)}\r\n isExpanded={this.isExpanded(step)}\r\n isSubmitting={isPending}\r\n isMobile={this.props.isMobile}\r\n isPending={isPending}\r\n isUpdating={isUpdating}\r\n hasInitialized={hasInitialized}\r\n isReady={isReady}\r\n onSubmit={onSubmit}\r\n onCancel={onCancel}\r\n onEdit={onEdit}\r\n onNext={() => {\r\n this.onNext();\r\n }}\r\n hasControlGroup={!this.props.disableGuidedCheckoutFlow && hasInitialized}\r\n >\r\n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\r\n </GuidedCard>\r\n );\r\n })}\r\n </div>\r\n <div className={`privacyPolicyAcceptanceMessage`}>\r\n A hold will be placed on your payment card for the Amount Due. By placing an order, you agree to the <a style={{textDecoration: \"underline\"}} href={`${this.props.termsOfUse}`} target=\"_blank\" rel=\"noreferrer\">Terms of Use</a> and <a style={{textDecoration: \"underline\"}} href={`${this.props.privacyPolicy}`} target=\"_blank\" rel=\"noreferrer\">Privacy Policy</a> and authorize us to charge the total purchase price when you pick up your order. No refunds or returns or exchanges.\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n private getEnabledModules = (): string[] => {\r\n const {\r\n moduleState: { childIds, getModule }\r\n } = this.props;\r\n return childIds.filter((childId: string) => {\r\n const state = getModule(childId);\r\n return !!state && !state.isDisabled;\r\n });\r\n };\r\n\r\n private getStep = (id: string): number => {\r\n return this.getEnabledModules().indexOf(id);\r\n };\r\n\r\n private getId = (item: any): string => {\r\n return get(item, 'props.id') || '';\r\n };\r\n\r\n private getHeading = (item: any): Heading => {\r\n return get(item, 'props.config.heading') || '';\r\n };\r\n\r\n private isExpanded = (step: number): boolean => {\r\n if (this.props.isEditor) {\r\n // Editorial mode: Expand all the drawers\r\n return true;\r\n }\r\n return step > -1 && step <= this.state.currentStep;\r\n };\r\n\r\n private isActive = (step: number): boolean => {\r\n return step === this.state.currentStep;\r\n };\r\n\r\n private isVisted = (step: number): boolean => {\r\n return step > -1 && step < this.state.currentStep;\r\n };\r\n\r\n private onNext = (): void => {\r\n this.setState({\r\n currentStep: this.state.currentStep + 1\r\n });\r\n };\r\n\r\n}\r\n\r\nexport default CheckoutGuidedForm;\r\n","/* eslint-disable no-trailing-spaces */\r\n/* eslint-disable eqeqeq */\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\nimport classnames from 'classnames';\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useState } from 'react';\r\n\r\ninterface ICheckoutPlaceOrderButtonProps {\r\n canPlaceOrder: boolean;\r\n placeOrderText: string;\r\n selectedStudentVal: string;\r\n placeOrder(): Promise<void>;\r\n isStudentSelected: boolean;\r\n showBtn: boolean;\r\n isSlotSelected: boolean;\r\n setLoading: any;\r\n}\r\n\r\nconst CheckoutPlaceOrderButton: React.FC<ICheckoutPlaceOrderButtonProps> = ({ placeOrderText, canPlaceOrder, placeOrder, selectedStudentVal, isStudentSelected, showBtn, isSlotSelected, setLoading }) => {\r\n const [isBusy, setIsBusy] = useState(false);\r\n const onPlaceOrder = async () => {\r\n if (isBusy || !canPlaceOrder || !isStudentSelected || !isSlotSelected) {\r\n return;\r\n }\r\n setLoading(true);\r\n setIsBusy(true);\r\n await placeOrder();\r\n setLoading(false);\r\n setIsBusy(false);\r\n }; \r\n if(showBtn == undefined){\r\n showBtn = true;\r\n }\r\n return (\r\n <Button\r\n className={classnames('ms-checkout__btn-place-order', { 'is-busy': isBusy })}\r\n color='primary'\r\n onClick={onPlaceOrder}\r\n disabled={!canPlaceOrder || !isStudentSelected || !showBtn || !isSlotSelected}\r\n >\r\n {placeOrderText}\r\n </Button>\r\n );\r\n};\r\n\r\nexport default CheckoutPlaceOrderButton;\r\n","/* eslint-disable @typescript-eslint/semi */\r\n/* eslint-disable no-trailing-spaces */\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { checkoutAsync, updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { getCardTypesAsync, getTenderTypesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport {\r\n Address,\r\n CardTypeInfo,\r\n CartTenderLine,\r\n RetailOperation,\r\n SalesOrder,\r\n TenderType,\r\n TokenizedPaymentCard,\r\n Cart\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { GetCheckoutCartInput } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nconst OPERATIONS = {\r\n PayCard: 201,\r\n PayGiftCertificate: 214,\r\n PayLoyalty: 207\r\n};\r\n\r\ninterface IUpdatedObject {\r\n updatedCart: Cart;\r\n updatedContext: IActionContext;\r\n}\r\n\r\nconst findCreditCardType = (cardTypes: CardTypeInfo[] = [], cardPrefix: string = ''): CardTypeInfo | undefined => {\r\n return cardTypes.find(cardType => {\r\n // Check that the card type is credit card ( InternationalCreditCard (0) or CorporateCard (3))\r\n if (cardType.CardTypeValue !== 0 && cardType.CardTypeValue !== 3) {\r\n return false;\r\n }\r\n const maskNumFrom: number = parseInt(cardType.NumberFrom || '0', 10);\r\n const maskNumTo: number = parseInt(cardType.NumberTo || '0', 10);\r\n const maskLength: number = cardType.NumberFrom ? cardType.NumberFrom.length : 0;\r\n const cardSubStr: number =\r\n cardPrefix.length > maskLength ? parseInt(cardPrefix.substr(0, maskLength), 10) : parseInt(cardPrefix, 10);\r\n return maskNumFrom <= cardSubStr && cardSubStr <= maskNumTo;\r\n });\r\n};\r\n\r\nconst findTenderIdTypeByOperationId = (tenderTypes: TenderType[], operationId: RetailOperation): string | undefined => {\r\n const matchedTenderType = tenderTypes.find(tenderType => tenderType.OperationId === operationId);\r\n if (matchedTenderType) {\r\n return matchedTenderType.TenderTypeId;\r\n }\r\n return;\r\n};\r\n\r\nconst roundNumber = (value: number) => Number(value.toFixed(2));\r\n\r\nasync function getLoyaltyTenderLine(\r\n ctx: IActionContext,\r\n LoyaltyCardId: string,\r\n Amount: number = 0,\r\n Currency: string = 'USD'\r\n): Promise<CartTenderLine> {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayLoyalty);\r\n return {\r\n // @ts-ignore\r\n // tslint:disable-next-line:prefer-type-cast\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n // @ts-ignore\r\n // tslint:disable-next-line:prefer-type-cast\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n LoyaltyCardId\r\n };\r\n}\r\n\r\nasync function getGiftCardTenderLine(\r\n ctx: IActionContext,\r\n GiftCardId: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD'\r\n): Promise<CartTenderLine> {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayGiftCertificate);\r\n return {\r\n // @ts-ignore\r\n // tslint:disable-next-line:prefer-type-cast\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n // @ts-ignore\r\n // tslint:disable-next-line:prefer-type-cast\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n GiftCardId\r\n };\r\n}\r\n\r\nasync function getCreditCardTenderLine(\r\n ctx: IActionContext,\r\n tokenizedPaymentCard: TokenizedPaymentCard,\r\n cardPrefix: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n billingAddress?: Address\r\n): Promise<CartTenderLine> {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n const cardTypes = await getCardTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n if (!tenderTypes || !cardTypes) {\r\n throw new Error('Fail to get credit card tender line');\r\n }\r\n const cardType = findCreditCardType(cardTypes, cardPrefix);\r\n const cartTypeId = cardType && cardType.TypeId;\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-ignore\r\n // tslint:disable-next-line:prefer-type-cast\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n // @ts-ignore\r\n // tslint:disable-next-line:prefer-type-cast\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n Amount,\r\n TenderTypeId,\r\n CardTypeId: cartTypeId\r\n };\r\n cardTenderLine.TokenizedPaymentCard = {\r\n ...tokenizedPaymentCard,\r\n CardTypeId: cartTypeId,\r\n // @ts-ignore\r\n // tslint:disable-next-line:prefer-type-cast\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: tokenizedPaymentCard.House || 'N/A',\r\n ...(tokenizedPaymentCard.CardTokenInfo && {\r\n CardTokenInfo: {\r\n ...tokenizedPaymentCard.CardTokenInfo,\r\n // @ts-ignore\r\n // tslint:disable-next-line:prefer-type-cast\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardTokenInfo'\r\n }\r\n }),\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\nasync function _updateCart(cart: Cart, ctx: IActionContext): Promise<IUpdatedObject>{\r\n const updatedObj = await updateAsync({ callerContext: ctx }, cart).then(newCart => {\r\n if (newCart) { \r\n ctx.update(new GetCheckoutCartInput(ctx.requestContext.apiSettings), newCart);\r\n \r\n return {\r\n newCart,\r\n ctx\r\n }\r\n } else {\r\n return {\r\n newCart,\r\n ctx\r\n };\r\n }\r\n }).catch((error: Error) => {\r\n throw error;\r\n });\r\n \r\n const newObj: IUpdatedObject = {\r\n updatedCart: updatedObj.newCart,\r\n updatedContext: updatedObj.ctx\r\n } \r\n return newObj;\r\n}\r\n\r\n// tslint:disable-next-line:max-func-body-length\r\nexport default async (ctx: IActionContext): Promise<SalesOrder> => {\r\n const checkoutState = await getCheckoutState(ctx).catch(error => {\r\n throw error;\r\n });\r\n\r\n const cartState = checkoutState.checkoutCart;\r\n\r\n const channelConfiguration = ctx.requestContext.channel;\r\n\r\n if (!cartState || !Object.keys(cartState).length || !checkoutState || !channelConfiguration) {\r\n throw new Error('Fail to placeOrder');\r\n }\r\n\r\n const {\r\n giftCards,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n guestCheckoutEmail,\r\n billingAddress,\r\n loyaltyAmount\r\n } = checkoutState;\r\n const { Currency } = channelConfiguration;\r\n\r\n let amountDue = cartState.cart.AmountDue || 0;\r\n let cartTenderLines;\r\n const getTenderLinePromises = [];\r\n const loyaltyCardNumber = cartState.cart.LoyaltyCardId;\r\n\r\n // Pay by loyalty first\r\n if (loyaltyAmount && loyaltyCardNumber) {\r\n const chargedAmount = roundNumber(Math.min(loyaltyAmount, amountDue));\r\n const loyaltyTenderLinePromise = getLoyaltyTenderLine(ctx, loyaltyCardNumber, chargedAmount, Currency);\r\n getTenderLinePromises.push(loyaltyTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n }\r\n\r\n // Then by gift card\r\n if (giftCards && giftCards.length) {\r\n giftCards.some(giftCard => {\r\n if (giftCard.Balance && amountDue > 0) {\r\n const chargedAmount = roundNumber(Math.min(giftCard.Balance, amountDue));\r\n const creditCardTenderLinePromise = getGiftCardTenderLine(ctx, giftCard.Id, chargedAmount, Currency);\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n }\r\n return amountDue === 0;\r\n });\r\n }\r\n\r\n // Pay the rest by credit card\r\n if (amountDue > 0) {\r\n if (!tokenizedPaymentCard) {\r\n throw new Error('Fail to placeOrder: no token found');\r\n }\r\n const creditCardTenderLinePromise = getCreditCardTenderLine(\r\n ctx,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n amountDue,\r\n Currency,\r\n billingAddress\r\n );\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n }\r\n\r\n if (getTenderLinePromises.length > 0) {\r\n // When payment methods is required\r\n cartTenderLines = await Promise.all(getTenderLinePromises).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!cartTenderLines || !cartTenderLines.length) {\r\n throw new Error('Fail to placeOrder: fail to get cart tender lines');\r\n }\r\n }\r\n\r\n const updatedObj = await _updateCart(cartState.cart, ctx);\r\n\r\n // Proceed checkout\r\n const salesOrder = await checkoutAsync(\r\n { callerContext: updatedObj.updatedContext, bypassCache: 'get' },\r\n updatedObj.updatedCart.Id,\r\n guestCheckoutEmail,\r\n // @ts-ignore fields tokenizedPaymentCard and receiptNumberSequence are optional\r\n undefined,\r\n undefined,\r\n cartTenderLines || null,\r\n updatedObj.updatedCart.Version\r\n // @ts-ignore\r\n ).catch(error => {\r\n console.log(error);\r\n throw error;\r\n });\r\n\r\n if (!salesOrder) {\r\n throw new Error('Fail to placeOrder: fail to checkout');\r\n }\r\n\r\n return salesOrder;\r\n};","import { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartState, getCheckoutState } from '@msdyn365-commerce/global-state';\r\n\r\nasync function emptyActiveCart(ctx: IActionContext): Promise<void> {\r\n let cartState;\r\n let checkoutState;\r\n const lineItemIdsToRemove = [];\r\n\r\n try {\r\n cartState = await getCartState(ctx);\r\n checkoutState = await getCheckoutState(ctx);\r\n } catch (e) {\r\n throw e;\r\n }\r\n\r\n if (!cartState || !cartState.cart) {\r\n throw new Error('Fail to fetch active cart');\r\n }\r\n\r\n if (!checkoutState || !checkoutState.checkoutCart) {\r\n throw new Error('Fail to fetch checkoutCart cart');\r\n }\r\n\r\n const activeCart = cartState.cart;\r\n const checkoutCart = checkoutState.checkoutCart.cart;\r\n\r\n for (const activeCartLine of activeCart.CartLines || []) {\r\n for (const checkoutCartLine of checkoutCart.CartLines || []) {\r\n if (activeCartLine.LineId && activeCartLine.LineId === checkoutCartLine.LineId) {\r\n lineItemIdsToRemove.push(activeCartLine.LineId);\r\n }\r\n }\r\n }\r\n\r\n try {\r\n await cartState.removeCartLines({ cartLineIds: lineItemIdsToRemove });\r\n await cartState.removeAllPromoCodes({});\r\n } catch (e) {\r\n throw e;\r\n }\r\n}\r\n\r\nexport default emptyActiveCart;\r\n","/* eslint-disable @typescript-eslint/no-floating-promises */\r\n/* eslint-disable no-irregular-whitespace */\r\n/* eslint-disable no-debugger */\r\n/* eslint-disable eqeqeq */\r\n/* eslint-disable no-trailing-spaces */\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\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { SalesOrder, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport checkout from './ccbcucheckout';\r\nimport emptyActiveCart from './empty-active-cart';\r\n\r\nexport default async (ctx: IActionContext, checkoutState: ICheckoutState | undefined, orderedProducts: SimpleProduct[] | undefined, redirect: boolean, selectedSlot: string, pickUpDate: string,studentId:string,memberNAmeEndpoint:string,finalSlotID:string | undefined,finalSlotTimings:string) => {\r\n let salesOrder: SalesOrder;\r\n // var arrQty: string[] = [];\r\n \r\n \r\n try { \r\n salesOrder = await checkout(ctx);\r\n if(studentId != null && studentId != \"\" && studentId != undefined){\r\n var arrstud: string[] = [];\r\n var objStudent:any = new Object();\r\n objStudent.AttributeName =\"EventStudentName\" ;\r\n objStudent.attributeValue = studentId;//\"636\";\r\n objStudent.TransactionNumber = salesOrder.Id;\r\n objStudent.channelId=salesOrder.ChannelId;\r\n arrstud.push(JSON.stringify(objStudent));\r\n const requestStuOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: arrstud.toString()//JSON.stringify({ EmailId: checkoutEmail})\r\n };\r\n await fetch(`${memberNAmeEndpoint}`, requestStuOptions).then((response)=> {\r\n console.log(\"completed insert stud\",response);\r\n }).catch((error)=>{\r\n console.log(\"failed insert student data\",error);\r\n });\r\n } \r\n if(finalSlotID != null && finalSlotID != \"\" && finalSlotID != undefined){\r\n var arrslotID: string[] = [];\r\n var objSlot:any = new Object();\r\n objSlot.AttributeName =\"SelectedDeliverySlot\" ;\r\n objSlot.attributeValue = finalSlotID;//\"636\";\r\n objSlot.TransactionNumber = salesOrder.Id;\r\n objSlot.channelId=salesOrder.ChannelId;\r\n arrslotID.push(JSON.stringify(objSlot));\r\n const requestStuOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: arrslotID.toString()//JSON.stringify({ EmailId: checkoutEmail})\r\n };\r\n await fetch(`${memberNAmeEndpoint}`, requestStuOptions).then((response)=> {\r\n console.log(\"completed insert slotID\",response);\r\n }).catch((error)=>{\r\n console.log(\"failed insert slotID data\",error);\r\n });\r\n }\r\n if(finalSlotTimings != null && finalSlotTimings != \"\" && finalSlotTimings != undefined){\r\n var arrslotTimings: string[] = [];\r\n var objSlotTimings:any = new Object();\r\n objSlotTimings.AttributeName =\"SelectedDeliverySlotTimings\" ;\r\n objSlotTimings.attributeValue = finalSlotTimings;//\"636\";\r\n objSlotTimings.TransactionNumber = salesOrder.Id;\r\n objSlotTimings.channelId=salesOrder.ChannelId;\r\n arrslotTimings.push(JSON.stringify(objSlotTimings));\r\n const requestStuOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: arrslotTimings.toString()//JSON.stringify({ EmailId: checkoutEmail})\r\n };\r\n await fetch(`${memberNAmeEndpoint}`, requestStuOptions).then((response)=> {\r\n console.log(\"completed insert slotID\",response);\r\n }).catch((error)=>{\r\n console.log(\"failed insert slotID data\",error);\r\n });\r\n } \r\n \r\n } catch (error) {\r\n throw error;\r\n }\r\n \r\n\r\n // Remove purchased items from the active cart\r\n try {\r\n await emptyActiveCart(ctx);\r\n } catch (error) {\r\n throw error;\r\n } \r\n\r\n if (redirect) {\r\n // Redirec to the order confirmation page\r\n const orderConfirmationUrl = getUrlSync('orderConfirmation', ctx) || '';\r\n //reset local storage\r\n if (!orderConfirmationUrl) {\r\n throw new Error('Error: No orderConfirmationUrl');\r\n }\r\n\r\n const separator = orderConfirmationUrl.includes('?') ? '&' : '?';\r\n if(selectedSlot != ''){\r\n const url = `${orderConfirmationUrl}${separator}transactionId=${salesOrder.Id}×lot=${selectedSlot}&pickupdate=${pickUpDate}`;\r\n window.location.assign(url);\r\n } else {\r\n const url = `${orderConfirmationUrl}${separator}transactionId=${salesOrder.Id}`;\r\n window.location.assign(url);\r\n }\r\n localStorage.clear();\r\n } else {\r\n if (checkoutState) {\r\n var obj = new Object();\r\n const result = await checkoutState.updateSalesOrder({newSalesOrder: salesOrder, newOrderedProducts: orderedProducts || [], additionalProperties: obj});\r\n\r\n if (result.status === 'FAILED') {\r\n throw new Error('Error: Updating error state failed');\r\n }\r\n } else {\r\n throw new Error('Error: No checkout state');\r\n }\r\n }\r\n};","/* eslint-disable @typescript-eslint/explicit-member-accessibility */\r\nimport React from 'react';\r\n\r\nexport interface IGetTimeSlotsData {\r\n timeslots: ITimeSlot[];\r\n}\r\n\r\nexport interface ITimeSlot {\r\n ID: number;\r\n Timings: string;\r\n ColorCode: string;\r\n Enabled: boolean;\r\n}\r\n\r\nexport interface IGetSlots{\r\n slots?: IGetTimeSlotsData;\r\n slotSelection(e: any): Promise<void>;\r\n enabled: boolean;\r\n isSelected: boolean;\r\n isNotApplicableChecked: boolean;\r\n checkBoxNA(e: any): Promise<void>;\r\n chkboxLbl: string;\r\n}\r\n\r\nexport class GetTimeSlots extends React.Component<IGetSlots>{\r\n\r\n constructor(props: IGetSlots){\r\n super(props);\r\n }\r\n\r\n componentDidMount(){\r\n\r\n }\r\n\r\n render() {\r\n const {\r\n slots,\r\n slotSelection,\r\n checkBoxNA,\r\n isNotApplicableChecked,\r\n chkboxLbl\r\n } = this.props;\r\n\r\n return(\r\n <div>\r\n <div>\r\n <div className={`timeSlotLbl`}>\r\n Choose your pickup time *\r\n </div>\r\n <div className={`notApplicableContainer`}>\r\n <input type=\"checkbox\" title=\"Click to select\" checked={isNotApplicableChecked} className={`notApplicableTimeSlot`} onClick={e => {\r\n checkBoxNA(e);\r\n }}/>\r\n <span>{chkboxLbl}</span>\r\n </div>\r\n <div style={{display: !isNotApplicableChecked? \"block\": \"none\"}}>\r\n {\r\n slots?.timeslots?.map(slot => {\r\n return(\r\n // eslint-disable-next-line react/jsx-key\r\n <span className={`timeslot timeslot${slot.ColorCode}`} style={{display: slot.Enabled? \"inline-block\": \"none\"}} data-eventid={slot.ID} onClick={e => slotSelection(e)}>{slot.Timings}</span>\r\n );\r\n })\r\n }\r\n </div>\r\n </div>\r\n <div className=\"timeSlotLegends\" style={{display: !isNotApplicableChecked? \"block\": \"none\"}}>\r\n <span className=\"timeSlotContainerLegend_green\"><span className=\"greenLegend\"></span><span className='legendText'>{'Suggested'}</span></span>\r\n <span className=\"timeSlotContainerLegend_orange\"><span className=\"orangeLegend\"></span><span className='legendText'>{'Busy'}</span></span>\r\n <span className=\"timeSlotContainerLegend_red\"><span className=\"redLegend\"></span><span className='legendText'>{'Crowded'}</span></span>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default GetTimeSlots;","/* eslint-disable no-empty */\r\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\r\n/* eslint-disable no-debugger */\r\n/* eslint-disable security/detect-object-injection */\r\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\r\n/* eslint-disable @typescript-eslint/semi */\r\n/* eslint-disable eqeqeq */\r\n/* eslint-disable no-trailing-spaces */\r\n/* eslint-disable no-irregular-whitespace */\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\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { Button,Heading,IModuleProps, INodeProps, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport { AsyncResultStatus, getUrlSync } from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport { computed, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { ICcbcucheckoutData } from './ccbcucheckout.data';\r\nimport { ICcbcucheckoutProps} from './ccbcucheckout.props.autogenerated';\r\nimport AlertComponent from './components/alert';\r\nimport { getLineItems, ILineItems } from './components/get-line-items';\r\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\r\nimport GuidedFormComponent from './components/guided-form';\r\nimport PlaceOrderButtonComponent from './components/place-order-button';\r\nimport placeOrder from './methods/place-order';\r\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport GetStudentDetailsComponent from './components/getStudentDetails';\r\nimport GetTimeSlotsComponent from './components/get-time-slots';\r\nexport * from './components/get-line-items';\r\nexport * from './components/get-order-summary';\r\nimport PostStudentDetailsComponent from './components/postStudentDetails';\r\n//import { ErrorMessage } from '../search-result-container/components';\r\n\r\ntype DeviceType = 'Mobile';\r\ninterface ICheckoutState {\r\n    errorMessage: string;\r\n    selectedStudent: string;\r\n    isStudentSelected: boolean;\r\n    event_ID: string;\r\n    postStudentObj: any;\r\n isSlotSelected: boolean;\r\n selectedSlotID: string;\r\n selectedTime: string; \r\n isNotApplicableChecked: boolean;\r\n isPlaceOrderStateLoading: boolean;\r\n}\r\nexport interface ICheckoutViewProps extends ICcbcucheckoutProps<ICcbcucheckoutData> {\r\n    className: string;\r\n    canShow?: boolean;\r\n    isEmptyCart?: boolean;\r\n    isConsentGiven?: boolean;\r\n    hasError?: boolean;\r\n    cartStatus?: string;\r\n    isMobile?: boolean;\r\n    isEditorialMode?: boolean;\r\n    backToShoppingUrl?: string;\r\n    editCartLink?: string;\r\n    hasSalesOrder: boolean;\r\n    checkoutProps: IModuleProps;\r\n    headerProps: INodeProps;\r\n    bodyProps: INodeProps;\r\n    mainProps: INodeProps;\r\n    mainControlProps: INodeProps;\r\n    sideProps: INodeProps;\r\n    sideControlFirstProps: INodeProps;\r\n    sideControlSecondProps: INodeProps;\r\n    guidedForm?: React.ReactNode;\r\n    title?: React.ReactNode;\r\n    loading?: React.ReactNode;\r\n    alert?: React.ReactNode;\r\n    orderSummary?: IOrderSummary;\r\n    lineItems?: ILineItems;\r\n    placeOrderButton?: React.ReactNode;\r\n    keepShoppingButton?: React.ReactNode;\r\n    orderConfirmation?: React.ReactNode;\r\n    studentValue?: React.ReactNode;\r\n    postStudent?: React.ReactNode;\r\n timeSlots?: React.ReactNode;\r\n isSlotSeletionRequired: boolean;\r\n isStudentFeatureRequired: boolean;\r\n isPlaceOrderStateLoading:boolean;\r\n}\r\nexport interface IUpdateStudentDetailsProps {\r\n    EMAIL: string;\r\n    NAME: string;\r\n    EVENT_GUID: string;\r\n    RETAIL_CHANNEL_ID: string;\r\n    displayNameError: boolean;\r\n    displayEmailError: boolean;\r\n    displayBtn: boolean;\r\n}\r\nexport interface IPostStudent {\r\n    ID: string;\r\n}\r\nexport interface ICheckoutModuleProps extends ICcbcucheckoutProps<ICcbcucheckoutData>, IModuleStateProps { }\r\n/**\r\n *\r\n * CheckoutContainer component\r\n * @extends {React.Component<ICheckoutModuleProps>}\r\n */\r\n// @ts-ignore\r\n@withModuleState\r\n@observer\r\nclass Checkout extends React.Component<ICheckoutModuleProps> {\r\n\r\n    public state: ICheckoutState = {\r\n        errorMessage: '',\r\n        selectedStudent: '',\r\n        isStudentSelected: false,\r\n        event_ID: \"\",\r\n        postStudentObj: \"\",\r\n isSlotSelected: false,\r\n selectedSlotID: \"\",\r\n selectedTime: \"\",\r\n isNotApplicableChecked: false,\r\n isPlaceOrderStateLoading: false\r\n   };\r\n \r\n    @computed get cartStatus(): AsyncResultStatus {\r\n        return get(this.props, 'data.checkout.status');\r\n    }\r\n    @computed get isEmptyCart(): boolean {\r\n        if (this.isEditorialMode) {\r\n            // Editorial mode: Ignore empty cart\r\n            return false;\r\n        }\r\n        const cart = get(this.props, 'data.checkout.result.checkoutCart.cart');\r\n        return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\r\n    }\r\n    @computed get hasError(): boolean {\r\n        const cart = get(this.props, 'data.checkout.result.checkoutCart.cart');\r\n        return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\r\n    }\r\n    @computed get isEditorialMode(): boolean {\r\n        return get(this.props, 'context.request.params.isEditor');\r\n    }\r\n    @computed get canPlaceOrder(): boolean {\r\n        return this.props.moduleState.isReady;\r\n    }\r\n    public componentDidMount(): void {\r\n        const {\r\n            resources: { genericErrorMessage }\r\n        } = this.props;\r\n        // @ts-ignore: Compiler not reconizing condition check for function params\r\n        when(\r\n            () => this.hasError,\r\n            () => {\r\n                this.setState({\r\n                    errorMessage: genericErrorMessage\r\n                });\r\n                this.props.context.telemetry.error('Failed to get cart');\r\n            }\r\n        );\r\n        // @ts-ignore: Compiler not reconizing condition check for function params\r\n        when(\r\n             () => {\r\n                 return this.isEmptyCart;\r\n             },\r\n             () => {\r\n                 const editCartLink = getUrlSync('cart', this.props.context.actionContext) || '';\r\n                 if (window && editCartLink) {\r\n                      // Redirect to cart page if cart is empty\r\n                      window.location.assign(editCartLink);\r\n                  } else {\r\n                      this.setState({\r\n                          errorMessage: genericErrorMessage\r\n                      });\r\n                      this.props.context.telemetry.error('Cart is empty, but no editCartLink found');\r\n                  }\r\n             }\r\n         );\r\n    }\r\n    // tslint:disable-next-line:max-func-body-length\r\n    public render(): JSX.Element {\r\n        const {\r\n            moduleState,\r\n            config: { className, checkoutHeading, disableGuidedCheckoutFlow },\r\n            resources,\r\n            data: {\r\n                students: {\r\n                    result\r\n                },\r\n timeslots\r\n            }\r\n        } = this.props;\r\n\r\n        const { errorMessage } = this.state;\r\n        const { backToShopping, placeOrderText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\r\n        const checkoutClass = classnames('ms-checkout', className);\r\n        const checkoutInformation = this.getSlotItems('checkoutInformation');\r\n        const isConsentGiven =\r\n            this.props.context.request &&\r\n            this.props.context.request.cookies &&\r\n            this.props.context.request.cookies.isConsentGiven &&\r\n            this.props.context.request.cookies.isConsentGiven();\r\n        const isMobile =\r\n            this.props.context.request &&\r\n            this.props.context.request.device &&\r\n            (this.props.context.request.device.Type as DeviceType) === 'Mobile';\r\n const backToShoppingUrl = this.props.context.app.config.backToShoppingCustomURL? this.props.context.app.config.backToShoppingCustomURL : '';\r\n const editCartLink = getUrlSync('cart', this.props.context.actionContext) || '';\r\n        const termsOfUse = this.props.app.config.termsOfUse;\r\n const privacyPolicy = this.props.app.config.privacyPolicy;\r\n const defaultDropDownOption = this.props.app.config.studentDropdownDefaultText; \r\n const isStudentFeatureRequired = this.props.context.app.config.isStudentFeatureRequired;\r\n const isSlotSelectionRequired = this.props.context.app.config.isSlotSelectionFeatureRequired;\r\n let selectedLocalStorageStudName : any; //= localStorage.getItem(\"studentName\") || \"\";\r\n let selectedLocalStorageStudID : any; //= localStorage.getItem(\"studentID\") || \"\";\r\n if(localStorage != undefined || localStorage != \"\")\r\n {\r\nif(localStorage.getItem(\"studentName\") && localStorage.getItem(\"studentID\") && localStorage.getItem(\"ValidStudent\") == \"true\")\r\n{\r\n selectedLocalStorageStudName = localStorage.getItem(\"studentName\");\r\n selectedLocalStorageStudID = localStorage.getItem(\"studentID\");\r\n // eslint-disable-next-line react/no-direct-mutation-state\r\n this.state.isStudentSelected = true;\r\n // eslint-disable-next-line react/no-direct-mutation-state\r\n this.state.selectedStudent = selectedLocalStorageStudID;\r\n}\r\n }\r\n        let viewProps: ICheckoutViewProps = {\r\n            ...this.props,\r\n            className: checkoutClass,\r\n            isEmptyCart: this.isEmptyCart,\r\n            isConsentGiven,\r\n            hasError: this.hasError,\r\n            hasSalesOrder: this.props.data.checkout && this.props.data.checkout.result !== undefined && this.props.data.checkout.result.salesOrder !== undefined,\r\n            cartStatus: this.cartStatus,\r\n            isMobile,\r\n            backToShoppingUrl,\r\n            editCartLink,\r\n            isEditorialMode: this.isEditorialMode,\r\n            orderConfirmation: this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0 ? this.props.slots.orderConfirmation[0] : undefined,\r\n            checkoutProps: { moduleProps: this.props, className: checkoutClass },\r\n            headerProps: { className: 'ms-checkout__head' },\r\n            bodyProps: { className: 'ms-checkout__body' },\r\n            mainProps: { className: 'ms-checkout__main' },\r\n            mainControlProps: { className: 'ms-checkout__main-control' },\r\n            sideProps: { className: 'ms-checkout__side' },\r\n            sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\r\n            sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\r\n            title: checkoutHeading && <Heading {...checkoutHeading} className='ms-checkout__title' />,\r\n isStudentFeatureRequired: isStudentFeatureRequired,\r\n isSlotSeletionRequired: isSlotSelectionRequired,\r\n            studentValue: ( \r\n                <GetStudentDetailsComponent {...{\r\n                        placeOrderText: defaultDropDownOption, \r\n                        selectStudent: this.selectStudent, \r\n                        studentsArr: result,\r\n                        isStudentSelected: this.state.isStudentSelected,\r\n                        canPlaceOrder: this.canPlaceOrder,\r\n selectedStudentName: selectedLocalStorageStudName || \"\",\r\n selectedStudent: selectedLocalStorageStudID || \"\",\r\n                    }\r\n                } />\r\n            ),\r\n            postStudent: (\r\n                <PostStudentDetailsComponent {...{\r\n                        isVisible: (this.state.selectedStudent == \"Other\")? true : false,\r\n                        EVENT_GUID: this.state.event_ID,\r\n                        sendStudentPostDetails: (obj: IUpdateStudentDetailsProps, displayBtn: boolean)=> {\r\n                            var newObj = obj;\r\n                            newObj[\"EVENT_GUID\"] = this.state.event_ID;\r\n                             this.setState({\r\n                                 postStudentObj: newObj,\r\n                                 isStudentSelected: true\r\n                             });\r\n                        }\r\n                    }}                \r\n                />\r\n            ),\r\n timeSlots: (\r\n <GetTimeSlotsComponent {...{\r\n slots: timeslots.result,\r\n slotSelection: this.selectTimeSlot,\r\n enabled:true,\r\n isSelected: false,\r\n isNotApplicableChecked: this.state.isNotApplicableChecked,\r\n checkBoxNA: this.selectCheckBoxNA,\r\n chkboxLbl: this.props.context.app.config.timeSlotNAChkbox\r\n }} />\r\n ),\r\n isPlaceOrderStateLoading: this.state.isPlaceOrderStateLoading\r\n       };\r\n        const preOrderExpUrl = getUrlSync('preorderexp', this.props.context.actionContext) || '';\r\n        if (!preOrderExpUrl) {\r\n            throw new Error('Error: No orderConfirmationUrl');\r\n        }\r\n        if (isConsentGiven === false) {\r\n            viewProps = {\r\n                ...viewProps,\r\n                alert: <AlertComponent {...{ message: cookieConsentRequiredMessage }} />\r\n            };\r\n        } else if (!this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart) {\r\n            viewProps = {\r\n                ...viewProps,\r\n                loading: <Waiting className='msc-waiting-circular msc-waiting-lg'/>\r\n            };\r\n        } else if (this.hasError) {\r\n            viewProps = {\r\n                ...viewProps,\r\n                alert: <AlertComponent {...{ message: genericErrorMessage }} />\r\n            };\r\n        } else {\r\n            viewProps = {\r\n                ...viewProps,\r\n                alert: errorMessage && <AlertComponent {...{ message: errorMessage }} />,\r\n                canShow: true,\r\n                guidedForm: checkoutInformation ? (\r\n                    <GuidedFormComponent\r\n                        {...{\r\n                            items: checkoutInformation,\r\n                            moduleState: moduleState,\r\n                            disableGuidedCheckoutFlow: disableGuidedCheckoutFlow,\r\n                            resource: resources,\r\n                            isMobile: isMobile,\r\n                            isEditor: this.isEditorialMode,\r\n termsOfUse: termsOfUse,\r\n privacyPolicy: privacyPolicy\r\n                        }}\r\n                    />\r\n                ) : (\r\n                        undefined\r\n                    ),\r\n                orderSummary: getOrderSummary(this.props),\r\n                lineItems: getLineItems(this.props),\r\n                placeOrderButton: (\r\n                    <PlaceOrderButtonComponent {...{ placeOrderText, placeOrder: this.onPlaceOrder, canPlaceOrder: this.canPlaceOrder, selectedStudentVal: this.state.selectedStudent, isStudentSelected: (!isStudentFeatureRequired || (isStudentFeatureRequired && this.state.isStudentSelected)), showBtn: (!isStudentFeatureRequired || (this.state.postStudentObj[\"displayBtn\"] && isStudentFeatureRequired)), isSlotSelected: (!isSlotSelectionRequired || (this.state.isSlotSelected && isSlotSelectionRequired)), setLoading: (loading:boolean) => this.setState({isPlaceOrderStateLoading: loading}) }} />\r\n                ),\r\n                keepShoppingButton: backToShoppingUrl && (\r\n                    <Button\r\n                        className='ms-checkout__btn-keep-shopping msc-btn'\r\n                        title={backToShopping}\r\n                        color='secondary'\r\n                        href={backToShoppingUrl}\r\n                    >\r\n                    {backToShopping}\r\n                    </Button>\r\n                )\r\n            };\r\n        }\r\n        return this.props.renderView(viewProps) as React.ReactElement;\r\n    }\r\n    private getSlotItems = (key: string): React.ReactNode[] | undefined => {\r\n        const { slots } = this.props;\r\n        return slots && slots[key] && slots[key].length ? slots[key] : undefined;\r\n    };\r\n\r\n    private onPlaceOrder = async (): Promise<void> => {\r\n        const {\r\n            resources: { genericErrorMessage },\r\n            context: { actionContext },\r\n            slots: { orderConfirmation }\r\n        } = this.props;\r\n        const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\r\nvar finalSlotId;\r\nvar finalSlottimings;\r\nlet errorMsg : any = \"\";\r\n//var pattern = new RegExp(\"^[0-9]{10}$\");\r\n//const phoneNumber: string = (await this.props.data.checkout).billingAddress?.Phone as string;\r\n//if(this.phoneNumber?.match(/^\\d{10}$/))\r\n        var studentID = this.state.selectedStudent;\r\n        if(this.state.selectedStudent == \"Other\" && this.props.context.app.config.isStudentFeatureRequired){\r\n            studentID = await this.updateStudentDetailsToCDS(this.state.postStudentObj);\r\n //this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"EventStudentName\", studentID);\r\n        }\r\n var selectedSlotID = this.state.selectedSlotID;\r\n\r\n if(this.props.context.app.config.isSlotSelectionFeatureRequired){\r\n selectedSlotID = await this.updateTimeSlot(this.state.selectedSlotID);\r\n }\r\n\r\n if(((studentID && this.props.context.app.config.isStudentFeatureRequired) || !this.props.context.app.config.isStudentFeatureRequired) && ((selectedSlotID && this.props.context.app.config.isSlotSelectionFeatureRequired) || !this.props.context.app.config.isSlotSelectionFeatureRequired))\r\n {\r\n         //student name - update cart\r\n if(studentID && this.props.context.app.config.isStudentFeatureRequired){\r\n //this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"EventStudentName\", studentID);\r\n }\r\n\r\n //time slot - update cart\r\n if(selectedSlotID && this.props.context.app.config.isSlotSelectionFeatureRequired){\r\n if(document.getElementsByClassName(\"notApplicableTimeSlot\") && document.getElementsByClassName(\"notApplicableTimeSlot\")[0][\"checked\"]){\r\n finalSlotId = \"NA\";\r\n finalSlottimings =\"NA\";\r\n // this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"SelectedDeliverySlot\", \"NA\");\r\n // this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"SelectedDeliverySlotTimings\", \"NA\");\r\n } else {\r\n var slots = document.getElementsByClassName(\"selectedSlot\");\r\n if(slots && slots[0] && slots[0][\"innerText\"]){\r\n finalSlotId=selectedSlotID;\r\n finalSlottimings=slots[0][\"innerText\"];\r\n // this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"SelectedDeliverySlot\", selectedSlotID);\r\n // this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"SelectedDeliverySlotTimings\", slots[0][\"innerText\"]);\r\n }}\r\n }\r\n\r\n debugger;\r\n //employee event\r\n var eventCategory = this.props.context.app.config?.eventCategory;\r\n if(eventCategory == 'Employee Event')\r\n {\r\n let isMaxDefined = true;\r\nvar checkoutEmail = this.props.context.actionContext.requestContext.user.emailAddress;//this.props.data.checkout.result?.guestCheckoutEmail;\r\n//var endpointForQtychk = this.props.context.app.config?.getOrderQtyEmailBased;\r\nvar sellingPeriod = this.props.context.app.config?.sellingPeriodDescription;\r\nconst maxQtydefined :any = this.props.context.app.config?.maxOrderQtyDefined;\r\nif(maxQtydefined == undefined)\r\n{\r\n isMaxDefined = false;\r\n //errorMsg = \"Max Quantity Is Not Defined, Please Contact Your System Administrator\"; \r\n}\r\n// eslint-disable-next-line prefer-const\r\nlet CurrenttotalItem :any = this.props.data.checkout.result?.checkoutCart?.cart?.TotalItems;//this.props.data.checkout.result?.checkoutCart.cart?.TotalItems;\r\nconst eventTitle : any = this.props.context.app.config?.eventTitle;\r\n\r\nvar arrQty: string[] = [];\r\nvar objQty:any = new Object();\r\nobjQty.EmailId = checkoutEmail? checkoutEmail: \"\";\r\nobjQty.SellingPeriod = sellingPeriod?sellingPeriod:\"\";\r\nobjQty.channelName = eventTitle?eventTitle:\"\";\r\n arrQty.push(JSON.stringify(objQty));\r\n//if(eventCategory == 'Employee Event')\r\n\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: arrQty.toString()//JSON.stringify({ EmailId: checkoutEmail})\r\n };\r\n var qty= await fetch(`${this.props.context.app.config?.orderQtyBasedonemailEndPoint}`, requestOptions);\r\n var data = await qty.json(); \r\n console.log(data);\r\n // eslint-disable-next-line prefer-const\r\n let qtyResult = data.Quantity;\r\n // eslint-disable-next-line prefer-const\r\n let totalQtybeingPlaced :any = CurrenttotalItem + qtyResult;\r\n // eslint-disable-next-line prefer-const, radix\r\n let maxQtyValue :number= parseInt(maxQtydefined);\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands, prefer-const\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n if(totalQtybeingPlaced <= maxQtyValue)\r\n {\r\n await placeOrder(actionContext, this.props.data.checkout.result, this.props.data.products.result, !hasOrderConfirmation, this.state.selectedTime, this.props.app.config.pickupDate,\"\",this.props.context.app.config?.mapStudenttoD365Endpoint,finalSlotId,finalSlottimings).catch(error => {\r\n             this.setState({\r\n                 errorMessage: genericErrorMessage\r\n             });\r\n             this.props.telemetry.exception(error);\r\n         });\r\n }\r\n else\r\n {\r\n \r\n let RemainingItems = maxQtyValue - qtyResult;\r\n if(qtyResult > maxQtyValue)\r\n {\r\n RemainingItems = 0;\r\n }\r\n \r\n \r\n if(!isMaxDefined)\r\n {\r\n errorMsg = \"Max Quantity Is Not Defined, Please Contact Your System Administrator\";\r\n }\r\n else\r\n {\r\n // eslint-disable-next-line prefer-const, prefer-template\r\n errorMsg = \"Please reduce your order quantity to stay below the maximum of \" +maxQtyValue+ \" cases for the selling period. You have \" +RemainingItems+ \" cases remaining in this selling period. Thank you!\";\r\n //\"You have reached the maximum case count of\" +qtyJson+ \"cases allowed for your email id in the current selling period \" +sellingPeriod+ \"Please reduce the case count on this order and try again \\n If you need more cases than allowed, we encourage you to order again in the next selling period. Looking forward to your continued participation!\";\r\n }\r\n this.setState({\r\n errorMessage:errorMsg\r\n }); \r\n this.props.context.telemetry.error(errorMsg);\r\n }\r\n }\r\nelse\r\n{\r\n await placeOrder(actionContext, this.props.data.checkout.result, this.props.data.products.result, !hasOrderConfirmation, this.state.selectedTime, this.props.app.config.pickupDate,studentID,this.props.context.app.config?.mapStudenttoD365Endpoint,finalSlotId,finalSlottimings).catch(error => {\r\n             this.setState({\r\n                 errorMessage: genericErrorMessage\r\n             });\r\n             this.props.telemetry.exception(error);\r\n         });\r\n}\r\n \r\n } \r\n else {\r\n this.setState({\r\n errorMessage: genericErrorMessage\r\n });\r\n }\r\n \r\n    };\r\n\r\n private selectTimeSlot = async(event: React.ChangeEvent<HTMLSelectElement>): Promise<void> => {\r\n var selectedSlotID = event.target.getAttribute(\"data-eventid\");\r\n var slots = document.getElementsByClassName(\"timeslot\");\r\n var selectedTimeSlot = event.target.innerHTML;\r\n for(var i=0; i < slots.length; i++){\r\n if(slots[i][\"className\"].indexOf(\"selectedSlot\") != -1){\r\n var clsName = slots[i][\"className\"];\r\n clsName = clsName.replace(\"selectedSlot\", \"\");\r\n slots[i][\"className\"] = clsName;\r\n }\r\n }\r\n event.target.className += \" selectedSlot\";\r\n \r\n if(selectedSlotID) {\r\n this.setState({\r\n isSlotSelected: true,\r\n selectedSlotID: selectedSlotID,\r\n selectedTime: selectedTimeSlot\r\n });\r\n\r\n this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"SelectedDeliverySlot\", selectedSlotID);\r\n this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"SelectedDeliverySlotTimings\", selectedTimeSlot);\r\n } else {\r\n this.setState({\r\n isSlotSelected: false\r\n });\r\n }\r\n }\r\n\r\n private selectCheckBoxNA = async(event: React.ChangeEvent<HTMLSelectElement>): Promise<void> => {\r\n if(event.target[\"checked\"]){\r\n this.setState({\r\n isSlotSelected: true,\r\n selectedSlotID: \"NA\",\r\n selectedTime: \"NA\",\r\n isNotApplicableChecked: true\r\n });\r\n\r\n // this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"SelectedDeliverySlot\", \"NA\");\r\n // this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"SelectedDeliverySlotTimings\", \"NA\");\r\n } else {\r\n this.setState({\r\n isSlotSelected: false,\r\n selectedSlotID: \"\",\r\n selectedTime: \"\",\r\n isNotApplicableChecked: false\r\n });\r\n }\r\n\r\n var slots = document.getElementsByClassName(\"timeslot\");\r\n for(var i=0; i < slots.length; i++){\r\n if(slots[i][\"className\"].indexOf(\"selectedSlot\") != -1){\r\n var clsName = slots[i][\"className\"];\r\n clsName = clsName.replace(\"selectedSlot\", \"\");\r\n slots[i][\"className\"] = clsName;\r\n }\r\n }\r\n }\r\n\r\n    private selectStudent = async(val:string, event_guid: string,studename:string, studentValid : boolean): Promise<void> =>\r\n{\r\n if(val != \"\" && val != \"Other\" && studentValid == true){\r\n            this.setState({\r\n                selectedStudent: val,\r\n                isStudentSelected: true\r\n            });\r\n           // this._addOrUpdateCartExtension((await this.props.data.checkout).checkoutCart.cart, \"EventStudentName\", val);\r\n        } else {\r\n            this.setState({\r\n                selectedStudent: val,\r\n                isStudentSelected: false,\r\n                event_ID: event_guid\r\n            })\r\n        }\r\n}\r\n    //Adding /updating the extension property on cart object.\r\n    public _addOrUpdateCartExtension = (cart: Cart, extensionPropertyKey: string, extensionPropertyValue: string): void => {\r\n        cart.ExtensionProperties = cart.ExtensionProperties || [];\r\n        // tslint:disable-next-line: no-any\r\n        //const property = cart.ExtensionProperties.find((extension: any) => extension.Key === extensionPropertyKey);\r\n        //if (property) {\r\n          //  property.Value = { StringValue: extensionPropertyValue };\r\n        //} else {\r\n            cart.ExtensionProperties.push({\r\n                Key: extensionPropertyKey,\r\n                Value: {\r\n                    StringValue: extensionPropertyValue\r\n                }\r\n            });\r\n       // }\r\n    }\r\n    async getStudentDetailsForPost(obj: IUpdateStudentDetailsProps): Promise<any> {\r\n        this.setState({\r\n            postStudentObj: obj,\r\n            isStudentSelected: true\r\n        });        \r\n    }    \r\n    async updateStudentDetailsToCDS(obj: IUpdateStudentDetailsProps): Promise<any>{\r\n     const channelID = this.props.context.actionContext.requestContext.channel?.ChannelNaturalId;\r\n        var arr: string[] = [];\r\n obj.RETAIL_CHANNEL_ID = channelID? channelID: \"\";\r\n        arr.push(JSON.stringify(obj));\r\n        const requestOptions = {\r\n            method: 'POST',\r\n            headers: { 'Content-Type': 'application/json' },\r\n            body: arr.toString()\r\n        };\r\n\r\n        const updateStu = await fetch(`${this.props.context.app.config.studentAPIEndPoint}?code=${this.props.context.app.config.studentAPIKey}&RetailChannelId=${channelID}`, requestOptions);\r\n        const data = await updateStu.json();\r\n\r\n        return data;\r\n    }\r\n\r\n async updateTimeSlot(slotID: string): Promise<any> {\r\n\r\n const channelID = this.props.context.actionContext.requestContext.channel?.ChannelNaturalId;\r\n var obj = new Object();\r\n obj[\"ID\"] = slotID;\r\n\r\n const requestOptions = {\r\n            method: 'POST',\r\n            headers: { 'Content-Type': 'application/json' },\r\n            body: JSON.stringify(obj)\r\n        };\r\n \r\n const updateSlot = await fetch(`${this.props.context.app.config.timeSlotAPIURL}?code=${this.props.context.app.config.timeSlotAPIKey}&RetailChannelId=${channelID}`, requestOptions);\r\n \r\n const data = await updateSlot.json();\r\n\r\n return data;\r\n }\r\n}\r\n\r\nexport default Checkout;\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\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from './ccbcucheckout';\r\n\r\nexport const PickUpAtStoreComponent: React.FC<IPickUpAtStore> = ({ PickUpAtStore, label, location }) => (\r\n <Node {...PickUpAtStore}>\r\n {label}\r\n {location}\r\n </Node>\r\n);\r\n\r\nexport const LineItemComponent: React.FC<ILineItem> = ({ LineItem, item, pickUpAtStore }) => (\r\n <Node {...LineItem}>\r\n {item}\r\n {pickUpAtStore && <PickUpAtStoreComponent {...pickUpAtStore} />}\r\n </Node>\r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC<ILineItemDeliveryGroup> = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n <Node {...LineItemDeliveryGroup}>\r\n {heading}\r\n <Node {...LineItemList}>\r\n {lineItems.map(lineItem => (\r\n <LineItemComponent key={lineItem.LineId} {...lineItem} />\r\n ))}\r\n </Node>\r\n </Node>\r\n);\r\n\r\nexport const LineItemsComponent: React.FC<ILineItems> = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n <Node {...LineItems}>\r\n <Node {...Header}>\r\n {heading}\r\n {editLink}\r\n </Node>\r\n {itemsForPickup && <LineItemGroupComponent {...itemsForPickup} />}\r\n {itemsForShip && <LineItemGroupComponent {...itemsForShip} />}\r\n </Node>\r\n);\r\n\r\nconst OrderSummaryComponent: React.FC<IOrderSummary> = ({ heading, lines, chargeMessage }) => (\r\n <div className='msc-order-summary-wrapper'>\r\n {heading}\r\n <div className='msc-order-summary__items'>\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n </>\r\n )}\r\n </div>\r\n {chargeMessage && <div><b>Note: </b><i>{chargeMessage}</i></div>}\r\n </div>\r\n);\r\n\r\nconst CheckoutView: React.FC<ICheckoutViewProps> = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n hasSalesOrder,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n orderConfirmation,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton,\r\n studentValue,\r\n postStudent,\r\n timeSlots,\r\n isSlotSeletionRequired,\r\n isStudentFeatureRequired,\r\n isPlaceOrderStateLoading\r\n } = props;\r\n\r\n return (\r\n <Module {...checkoutProps}>\r\n {!hasSalesOrder && <Node {...headerProps}>{title}</Node> }\r\n {!hasSalesOrder &&\r\n <Node {...bodyProps}>\r\n {isPlaceOrderStateLoading && (<>\r\n {/* <div className='ms-checkout__loader-container'>\r\n <img src={'https://images-us-prod.cms.commerce.dynamics.com/cms/api/lfwdqzspcg/imageFileData/MAdt4d?pubver=0'} alt=\"wait until the page loads\" width='500px' height='700px'></img>\r\n </div> */}\r\n <div className=\"ms-search-result-container__loader\"></div>\r\n </>)\r\n }\r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n <Node {...mainProps}>\r\n {(isSlotSeletionRequired || isStudentFeatureRequired)?\r\n <div className={`custom_Student_TimeSlot`} style={{margin: '10px'}}>\r\n {(isStudentFeatureRequired)?\r\n <div>\r\n <Node className={`students`}>{studentValue}</Node>\r\n <Node className={`postStudent`}>{postStudent}</Node>\r\n </div> : <div></div>\r\n }\r\n {isSlotSeletionRequired?\r\n <Node className={`timeSlotsContainer`}>{timeSlots}</Node>: null\r\n }\r\n </div> : <div></div>\r\n }\r\n {/* <img src='http://media.tenor.com/0n1G9Nv799YAAAAi/coca-cola-truck.gif' alt=\"wait until the page loads\" width='500px' height='500px'></img> */}\r\n {guidedForm}\r\n <Node {...mainControlProps}>\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n </Node>\r\n </Node>\r\n <Node {...sideProps}>\r\n {orderSummary && <OrderSummaryComponent {...orderSummary} />}\r\n <Node {...sideControlFirstProps}>\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n </Node>\r\n {lineItems && <LineItemsComponent {...lineItems} />}\r\n <Node {...sideControlSecondProps}>\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n </Node>\r\n </Node>\r\n </>\r\n )}\r\n </Node>\r\n }\r\n {hasSalesOrder && orderConfirmation}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 { ISearchResultModalViewProps } from './components';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\nimport { IBuyboxAddToCartViewProps } from '../ccbcubuybox/components/ccbcubuybox-small-components';\n\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct,\n addToCart,\n addToCartLoader\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n {addToCartLoader && (\n <div className=\"ms-search-result-container__loader\"></div>\n )}\n {addToCart && _renderAddToCart(addToCart)}\n {/* <div>Products</div> */}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n {addToCartLoader && (\n <div className=\"ms-search-result-container__loader\"></div>\n )}\n {addToCart && _renderAddToCart(addToCart)}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst _renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\n const { ContainerProps, errorBlock, button } = addToCart;\n\n return (\n <Node {...ContainerProps}>\n {errorBlock}\n {button}\n </Node>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyInput {\n className: string;\n type: string;\n value: string | number;\n min: number;\n max: number;\n ariaValueMax: number;\n ariaValueMin: number;\n ariaValueNow: number;\n id: string;\n step: string;\n onChange(event: React.ChangeEvent<HTMLInputElement>): void;\n onBlur(event: React.FocusEvent<HTMLInputElement>): void;\n}\n\nconst AdressInput: React.FC<ICheckoutLoyaltyInput> = ({\n className,\n type,\n value,\n min,\n max,\n step,\n ariaValueMax,\n ariaValueMin,\n ariaValueNow,\n onChange,\n onBlur,\n id\n}) => (\n <input\n className={className}\n type={type}\n value={value}\n min={min}\n max={max}\n step={step}\n aria-valuemax={ariaValueMax}\n aria-valuemin={ariaValueMin}\n aria-valuenow={ariaValueNow}\n onChange={onChange}\n onBlur={onBlur}\n id={id}\n />\n);\n\nexport default AdressInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyLabelProps {\n className: string;\n text: string;\n htmlFor: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @param root0.htmlFor\n * @extends {React.FC<ICheckoutLoyaltyLabelProps>}\n */\nconst CheckoutLoyaltyLabel: React.FC<ICheckoutLoyaltyLabelProps> = ({ className, text, htmlFor }) => {\n return (\n <label className={className} htmlFor={htmlFor}>\n {text}\n </label>\n );\n};\n\nexport default CheckoutLoyaltyLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyTextProps {\n className: string;\n text?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @extends {React.FC<ICheckoutLoyaltyTextProps>}\n */\nconst CheckoutLoyaltyText: React.FC<ICheckoutLoyaltyTextProps> = ({ className, text }) => {\n if (!text) {\n return null;\n }\n\n return <span className={className}>{text}</span>;\n};\n\nexport default CheckoutLoyaltyText;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { callActionOrExecute } from '@msdyn365-commerce/retail-proxy';\nimport { createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { LoyaltyPointRedemptionEstimate, LoyaltyRewardPoint } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { GetLoyaltyTransactionEstimationInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Drawer, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport { action, computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyData } from './checkout-loyalty.data';\nimport { ICheckoutLoyaltyProps } from './checkout-loyalty.props.autogenerated';\nimport InputComponent from './components/checkout-loyalty-input';\nimport LabelComponent from './components/checkout-loyalty-label';\nimport TextComponent from './components/checkout-loyalty-text';\nimport { ErrorComponent } from '../../common/error';\n\nexport interface ICheckoutLoyaltyState {\n dollarsApplied: number;\n isFetchingLoyaltyCard: boolean;\n errorMessage?: string;\n}\n\nexport interface ICheckoutLoyaltyModuleProps extends ICheckoutLoyaltyProps<ICheckoutLoyaltyData>, IModuleStateProps {}\n\nexport interface ICheckoutLoyaltyViewState {\n isShowLoyalty: boolean;\n isShowAddLoyalty: boolean;\n}\n\nexport interface ICheckoutLoyaltyShow {\n heading: React.ReactNode;\n coveredAmountText: React.ReactNode;\n amount: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyRewardPoint {\n checkoutLoyaltyRewardPoint: INodeProps;\n key: string;\n title: React.ReactNode;\n availablePointsText: React.ReactNode;\n activePoints: React.ReactNode;\n expiringPointsText: React.ReactNode;\n expiringPoints: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyAdd {\n heading: React.ReactNode;\n cardNumber: React.ReactNode;\n drawer: INodeProps;\n rewardPoints: ICheckoutLoyaltyRewardPoint[];\n loyaltyAmountContainer: INodeProps;\n appliedLoyaltyAmountContainer: INodeProps;\n loyaltyAmountLabel: React.ReactNode;\n loyaltyAmountInput: React.ReactNode;\n loyaltyAmountApplyButton: React.ReactNode;\n showAppliedAmount: boolean;\n loyaltyAmountAppliedText: React.ReactNode;\n loyaltyAmountAppliedPrice: React.ReactNode;\n loyaltyAmountRemoveButton: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyViewProps extends ICheckoutLoyaltyModuleProps {\n checkoutLoyalty: IModuleProps;\n viewState: ICheckoutLoyaltyViewState;\n showLoyalty: ICheckoutLoyaltyShow;\n addLoyalty: ICheckoutLoyaltyAdd;\n alert?: React.ReactNode;\n}\n\n/**\n *\n * CheckoutLoyalty component.\n * @extends {React.Component<ICheckoutLoyaltyProps<ICheckoutLoyaltyData>>}\n */\n// @ts-expect-error\n\n@withModuleState\n@observer\nclass CheckoutLoyalty extends React.Component<ICheckoutLoyaltyModuleProps, ICheckoutLoyaltyState> {\n private readonly _dialogToggleRef: React.RefObject<HTMLButtonElement> | undefined;\n\n private readonly moduleClassName: string = 'ms-checkout-loyalty';\n\n private readonly _defaultLoyaltyPoints: number = 0;\n\n constructor(props: ICheckoutLoyaltyModuleProps) {\n super(props);\n this._dialogToggleRef = React.createRef();\n this._applyLoyaltyPoints = this._applyLoyaltyPoints.bind(this);\n this._removeLoyaltyPoints = this._removeLoyaltyPoints.bind(this);\n this._onInputChange = this._onInputChange.bind(this);\n this._onBlur = this._onBlur.bind(this);\n this.state = { dollarsApplied: this.maxDollars, isFetchingLoyaltyCard: false };\n }\n\n @computed get shouldPayLoyalty(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use loyalty when cart is not full of free items\n const amountDue = cart.TotalAmount || 0;\n return amountDue > 0;\n }\n\n @computed get isDataReady(): boolean {\n return (\n (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS' &&\n (this.props.data.loyaltyCard && this.props.data.loyaltyCard.status) !== 'LOADING' &&\n (this.props.data.loyaltyTransactionEstimation && this.props.data.loyaltyTransactionEstimation.status) !== 'LOADING'\n );\n }\n\n @computed get maxDollars(): number {\n return this.props.data.loyaltyTransactionEstimation.result &&\n this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n ? this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n : 0;\n }\n\n public async componentDidMount(): Promise<void> {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart,\n async () => {\n this._updateEstimate();\n }\n );\n\n reaction(\n () => this.props.data.loyaltyCard.result,\n async () => {\n this._updateLoyalty();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutLoyalty && checkoutError.errorMessage) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutLoyaltyModuleProps, nextState: ICheckoutLoyaltyState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n resources,\n renderView,\n moduleState: { hasError, isReady }\n } = this.props;\n\n if (\n this.props.data.loyaltyCard &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n ) {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n const checkoutState = this.props.data.checkout.result;\n let isShowLoyalty = false;\n const errorMessage = this.state.errorMessage;\n\n if (isReady) {\n if (!checkoutState || checkoutState.loyaltyAmount === 0) {\n return null;\n }\n isShowLoyalty = true;\n }\n\n const viewProps = {\n ...this.props,\n viewState: {\n isShowLoyalty,\n isShowAddLoyalty: !isReady\n },\n alert: hasError && errorMessage && <ErrorComponent {...{ title: resources.errorMessageTitle, message: errorMessage }} />,\n checkoutLoyalty: {\n moduleProps: this.props,\n className: classnames(\n this.moduleClassName,\n { [`${this.moduleClassName}__applied`]: isShowLoyalty },\n this.props.config.className\n )\n },\n showLoyalty: {\n heading: <Heading headingTag='h3' className={`${this.moduleClassName}__heading`} text={resources.loyaltyHeadingText} />,\n coveredAmountText: (\n <TextComponent className={`${this.moduleClassName}__text`} text={resources.loyaltyCoveredAmountText} />\n ),\n amount: (\n <PriceComponent\n className={`${this.moduleClassName}__applied-value`}\n id={this.props.id}\n typeName={this.props.typeName}\n context={this.props.context}\n data={{ price: { CustomerContextualPrice: checkoutState && checkoutState.loyaltyAmount } }}\n />\n )\n },\n addLoyalty: {\n heading: <Heading headingTag='h3' className={`${this.moduleClassName}__heading`} text={resources.loyaltyHeadingText} />,\n drawer: {\n tag: Drawer,\n className: `${this.moduleClassName}__drawer`,\n toggleButtonText: this._drawerHeader(),\n openGlyph: `${this.moduleClassName}__drawer-open`,\n closeGlyph: `${this.moduleClassName}__drawer-close`,\n glyphPlacement: 'end'\n },\n cardNumber: <TextComponent className={`${this.moduleClassName}__card-number`} text={loyaltyCard.CardNumber || ''} />,\n rewardPoints:\n loyaltyCard.RewardPoints &&\n loyaltyCard.RewardPoints.map((points, index) => {\n return this._renderPointSection(points, resources.availablePointsLabel, resources.expiringLoyaltyPointsLabel);\n }),\n loyaltyAmountContainer: {\n className: `${this.moduleClassName}__amount`\n },\n appliedLoyaltyAmountContainer: {\n className: `${this.moduleClassName}__applied-amount`\n },\n loyaltyAmountLabel: (\n <LabelComponent\n className={`${this.moduleClassName}__amount-label`}\n text={resources.payWithLoyaltyAmountLabel}\n htmlFor={`${this.props.id}-label`}\n />\n ),\n loyaltyAmountInput: (\n <InputComponent\n className={`${this.moduleClassName}__amount-input`}\n onChange={this._onInputChange}\n onBlur={this._onBlur}\n type='number'\n step='.01'\n value={this.state.dollarsApplied}\n min={0}\n max={this.maxDollars}\n ariaValueMax={this.maxDollars}\n ariaValueMin={0}\n ariaValueNow={this.state.dollarsApplied}\n id={`${this.props.id}-label`}\n />\n ),\n loyaltyAmountApplyButton: (\n <Button\n className={`${this.moduleClassName}__amount-button`}\n title={this.props.resources.applyCheckoutLoyaltyPaymentText}\n onClick={this._applyLoyaltyPoints}\n disabled={\n this.state.dollarsApplied > this.maxDollars ||\n this.state.dollarsApplied <= 0 ||\n isNaN(this.state.dollarsApplied) ||\n this.state.isFetchingLoyaltyCard\n }\n >\n {this.props.resources.applyCheckoutLoyaltyPaymentText}\n </Button>\n ),\n showAppliedAmount: checkoutState && checkoutState.loyaltyAmount > 0,\n loyaltyAmountAppliedText: (\n <TextComponent className={`${this.moduleClassName}__applied-text`} text={resources.loyaltyCoveredAmountText} />\n ),\n loyaltyAmountAppliedPrice: (\n <PriceComponent\n className={`${this.moduleClassName}__applied-value`}\n id={this.props.id}\n typeName={this.props.typeName}\n context={this.props.context}\n data={{ price: { CustomerContextualPrice: checkoutState && checkoutState.loyaltyAmount } }}\n />\n ),\n loyaltyAmountRemoveButton: (\n <Button\n className='ms-checkout-loyalty-remove-btn'\n title={this.props.resources.removeCheckoutLoyaltyPaymentText}\n onClick={this._removeLoyaltyPoints}\n innerRef={this._dialogToggleRef}\n >\n {this.props.resources.removeCheckoutLoyaltyPaymentText}\n </Button>\n )\n }\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n this.props.context.telemetry.error('Checkout loyalty content is empty, module wont render');\n return null;\n }\n\n private _drawerHeader(): JSX.Element {\n return (\n <>\n <p className={`${this.moduleClassName}__covered-text`}>{this.props.resources.loyaltyCoveredAmountText}</p>\n <PriceComponent\n className={`${this.moduleClassName}__applied-value`}\n id={this.props.id}\n typeName={this.props.typeName}\n context={this.props.context}\n data={{ price: { CustomerContextualPrice: this.maxDollars } }}\n />\n </>\n );\n }\n\n private _renderPointSection(\n point: LoyaltyRewardPoint,\n loyaltyCoveredAmountText: string,\n expiringLoyaltyPointsLabel: string\n ): ICheckoutLoyaltyRewardPoint {\n return {\n key: point.RewardPointId || '',\n checkoutLoyaltyRewardPoint: {\n className: `${this.moduleClassName}__program`\n },\n title: <TextComponent className={`${this.moduleClassName}__program-title`} text={point.Description} />,\n availablePointsText: <TextComponent className={`${this.moduleClassName}__program-available`} text={loyaltyCoveredAmountText} />,\n activePoints: (\n <TextComponent className={`${this.moduleClassName}__program-points`} text={(point && point.ActivePoints!).toString()} />\n ),\n expiringPointsText: <TextComponent className={`${this.moduleClassName}__program-expiring`} text={expiringLoyaltyPointsLabel} />,\n expiringPoints: (\n <TextComponent\n className={`${this.moduleClassName}__program-points`}\n text={(point && point.PointsExpiringSoon!).toString()}\n />\n )\n };\n }\n\n private readonly init = async (): Promise<void> => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const savedLoyaltyAmount = this.props.data.checkout.result?.loyaltyAmount;\n if (savedLoyaltyAmount) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n } else if (\n this.props.data.loyaltyCard.result &&\n this.props.data.checkout.result &&\n this.props.data.loyaltyCard.result.CardNumber !== this.props.data.checkout.result.checkoutCart.cart.LoyaltyCardId\n ) {\n this.props.data.checkout.result.checkoutCart\n .updateLoyaltyCardId({ loyaltyCardNumber: this.props.data.loyaltyCard.result.CardNumber })\n .catch(error => {\n if (this.context.telemetry) {\n this.context.telemetry.warning(error);\n this.context.telemetry.debug('Unable to update the loyalty card');\n }\n });\n }\n };\n\n private readonly onEdit = () => {\n this.props.telemetry.information('Payment section loyalty onEdit is called.');\n\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = () => {\n this.props.telemetry.information('Payment section loyalty onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = () => {\n this.props.telemetry.information('Payment section loyalty onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n const checkoutState = this.props.data.checkout.result;\n if (checkoutState && checkoutState.loyaltyAmount > 0) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly isEnabled = () => {\n return (\n this.props.context.request.user.isAuthenticated &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n );\n };\n\n private async _applyLoyaltyPoints(): Promise<void> {\n this.props.telemetry.information('Payment section loyalty apply button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: Number.parseFloat(this.state.dollarsApplied.toString()) });\n this.setState({\n isFetchingLoyaltyCard: true\n });\n }\n\n private async _removeLoyaltyPoints(): Promise<void> {\n this.props.telemetry.information('Payment section loyalty remove button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: 0 });\n this.setState({\n dollarsApplied: 0\n });\n }\n\n private _onInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const value = event.currentTarget.value;\n this.setState({ dollarsApplied: value.length > 0 ? Number(value) : Number.parseFloat(value), isFetchingLoyaltyCard: false });\n }\n\n private _onBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const num = Number.parseFloat(event.currentTarget.value).toFixed(2);\n const element = document.getElementById(`${this.props.id}-label`) as HTMLInputElement;\n if (element && num) {\n element.value = num;\n this.setState({ dollarsApplied: Number.parseFloat(num) });\n }\n }\n\n private _updateLoyalty(): void {\n if (this.props.moduleState.isDisabled && this.isEnabled()) {\n this._updateEstimate();\n this.props.moduleState.onUpdating();\n }\n }\n\n private _updateEstimate(): void {\n const card = this.props.data.loyaltyCard.result;\n const checkout = this.props.data.checkout.result;\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n const channelConfig = this.props.context.request.channel;\n if (card && card.CardNumber && cart && channelConfig) {\n const currencyCode = channelConfig.Currency || '';\n const loyalPointsRequest = createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput(cart.Id, card.CardNumber, currencyCode);\n\n // @ts-expect-error\n // Due to bug 23214358, this is getting improperly cached. Need to turn on cache bypass for now to work around issue\n loyalPointsRequest._query.options.bypassCache = 'get';\n\n callActionOrExecute<LoyaltyPointRedemptionEstimate>(loyalPointsRequest, this.props.context.actionContext)\n .then(async points => {\n this.props.context.actionContext.update(\n new GetLoyaltyTransactionEstimationInput(this.props.context.request.apiSettings),\n points\n );\n const newMaxPoints = points.MaxCurrencyValueOfLoyaltyPoints ?? this._defaultLoyaltyPoints;\n\n // If points are already applied, ensure you don't apply more points than max\n if (checkout && checkout.loyaltyAmount > newMaxPoints) {\n await checkout.updateLoyaltyAmount({ newAmount: newMaxPoints });\n }\n\n this.setState({ dollarsApplied: newMaxPoints, isFetchingLoyaltyCard: false });\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n this.props.context.actionContext.telemetry.debug('Error getting Loyalty Point Redemption Estimate');\n });\n }\n }\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n}\n\nexport default CheckoutLoyalty;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutDeliveryOption,\n ICheckoutDeliveryOptionEdit,\n ICheckoutDeliveryOptionsList,\n ICheckoutDeliveryOptionsViewProps\n} from './checkout-delivery-options';\n\nconst DeliveryOptionList: React.FC<ICheckoutDeliveryOptionsList> = ({ DeliveryOptionsList, list }) => {\n if (!list || list.length === 0) {\n return null;\n }\n\n return (\n <Node {...DeliveryOptionsList}>\n {list.map((deliveryOption: ICheckoutDeliveryOptionEdit) => {\n return (\n <Node {...deliveryOption.DeliveryOption} key={deliveryOption.code} aria-label='Please select a delivery option.'>\n {deliveryOption.radioButton}\n {deliveryOption.description}\n {deliveryOption.price}\n </Node>\n );\n })}\n </Node>\n );\n};\n\nconst DeliveryOptionSelected: React.FC<ICheckoutDeliveryOption> = ({ DeliveryOption, description, price }) => {\n return (\n <Node {...DeliveryOption}>\n {description}\n {price}\n </Node>\n );\n};\n\nconst CheckoutDeliveryOptionsView: React.FC<ICheckoutDeliveryOptionsViewProps> = props => {\n const {\n CheckoutDeliveryOptions,\n viewState,\n deliveryOptions,\n deliveryOptionSelected,\n alert,\n waiting,\n saveButton,\n editButton,\n cancelButton\n } = props;\n\n return (\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\n <Module {...CheckoutDeliveryOptions}>\n {viewState.isLoading && waiting}\n {viewState.isError && alert}\n {viewState.isShowList && deliveryOptions && <DeliveryOptionList {...deliveryOptions} />}\n {viewState.isShowSelected && deliveryOptionSelected && <DeliveryOptionSelected {...deliveryOptionSelected} />}\n {viewState.isShowSaveButton && saveButton}\n {viewState.isShowEditButton && editButton}\n {viewState.isShowCancelButton && cancelButton}\n </Module>\n );\n};\n\nexport default CheckoutDeliveryOptionsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ITitle {\n className: string;\n text: string;\n}\n\nexport const Title: React.FC<ITitle> = ({ text, className }) => (\n <span className={className}>\n {` `}\n {text}\n {` `}\n </span>\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './choice-summary';\nexport * from './choice-summary.props';\nexport * from './error-message';\nexport * from './feature-search-result-item';\nexport * from './link';\nexport * from './modal';\nexport * from './product-search-result-items';\nexport * from './range-refine-item';\nexport * from './refine-item';\nexport * from './refine-item.props.common';\nexport * from './refine-item-toggle-notification';\nexport * from './refine-submenu';\nexport * from './separator';\nexport * from './title';\nexport * from './utilities';\n","/* eslint-disable @typescript-eslint/semi */\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IHeaderViewProps } from './ccbcuheader';\r\n\r\nconst headerView: React.FC<IHeaderViewProps> = props => {\r\n const {\r\n HeaderTag,\r\n HeaderContainer,\r\n HeaderTopBarContainer,\r\n MobileMenuContainer,\r\n MobileMenuBodyContainer,\r\n MobileMenuLinksContainer,\r\n Divider,\r\n backToShopping,\r\n bots\r\n } = props;\r\n return (\r\n <Module {...HeaderTag}>\r\n <Node {...HeaderContainer}>\r\n <Node {...HeaderTopBarContainer}>\r\n {props.navIcon}\r\n {props.logo}\r\n {_shopNowButton(backToShopping)}\r\n {_renderReactFragment(props.search)}\r\n {_renderDesktopAccountBlock(props)}\r\n {props.wishListIconDesktop}\r\n <Node {...Divider}/>\r\n {props.cartIcon}\r\n </Node>\r\n <Node {...MobileMenuContainer}>\r\n <Node {...MobileMenuBodyContainer}>\r\n { props.MobileMenuHeader }\r\n {_renderReactFragment(props.menuBar)}\r\n <Node {...MobileMenuLinksContainer}>\r\n { props.accountLinks ? props.accountLinks.map(link => link) : false }\r\n { props.wishListIconMobile }\r\n { props.signInLink }\r\n { props.signOutLink }\r\n </Node>\r\n </Node>\r\n </Node>\r\n {_renderReactFragment(props.menuBar)}\r\n </Node>\r\n {bots}\r\n </Module>\r\n );\r\n};\r\n\r\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\r\n const {\r\n AccountInfoDropdownParentContainer,\r\n AccountInfoDropdownPopoverConentContainer,\r\n accountInfoDropdownButton,\r\n signOutLink,\r\n signInLink,\r\n accountLinks,\r\n } = props;\r\n\r\n if (AccountInfoDropdownParentContainer) {\r\n if (AccountInfoDropdownPopoverConentContainer) {\r\n return (\r\n <Node {...AccountInfoDropdownParentContainer}>\r\n {accountInfoDropdownButton}\r\n <Node {...AccountInfoDropdownPopoverConentContainer}>\r\n { accountLinks ? accountLinks.map(link => link) : false }\r\n {signOutLink}\r\n </Node>\r\n </Node>\r\n );\r\n } else if (signInLink) {\r\n return (\r\n <Node {...AccountInfoDropdownParentContainer}>\r\n {signInLink}\r\n </Node>\r\n );\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\r\n return (\r\n <React.Fragment>\r\n {items && items.length\r\n ? items.map((slot: React.ReactNode, index: number) => {\r\n return <React.Fragment key={index}>{slot}</React.Fragment>;\r\n })\r\n : null}\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nfunction _shopNowButton(shoppingURL: string){\r\n return(\r\n <>\r\n <a className={`header_shopnow`} href={`${shoppingURL}`}>\r\n SHOP NOW\r\n </a>\r\n </>\r\n )\r\n}\r\nexport default headerView;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { CheckoutState } from './checkout-state';\n\n/**\n * CheckoutState - action input.\n */\nexport class CheckoutStateInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('CheckoutState', this.apiSettings);\n\n public getCacheObjectType = () => 'CheckoutState';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CheckoutState - action.\n * @param input\n * @param ctx\n */\nexport async function checkoutStateAction(input: CheckoutStateInput, ctx: IActionContext): Promise<CheckoutState> {\n return new CheckoutState();\n}\n\n/**\n * CheckoutState - create new input for create action.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext<IGeneric<IAny>>): IActionInput => {\n return new CheckoutStateInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * CheckoutState - create action.\n */\nexport const checkoutStateActionDataAction = createObservableDataAction<CheckoutState>({\n action: <IAction<CheckoutState>>checkoutStateAction,\n input: createInput\n});\n\nexport default checkoutStateActionDataAction;\n"],"sourceRoot":""}