{"version":3,"sources":["webpack:///src/actions/submit-helpfulness-vote.ts?be08","webpack:///src/index.ts?c6ae","webpack:///src/modules/quick-order/components/quick-order-drawer.tsx?25f0","webpack:///src/modules/quick-order/components/quick-order-form.tsx?61bd","webpack:///src/modules/quick-order/components/quick-order-product.ts?af99","webpack:///src/modules/quick-order/components/quick-order-table/components/quick-order-table-header-component.tsx?d661","webpack:///src/modules/quick-order/components/quick-order-table/components/quick-order-table-row-component.tsx?cb68","webpack:///src/modules/quick-order/components/quick-order-table/quick-order-table-component.tsx?a7a8","webpack:///src/modules/quick-order/quick-order.tsx?7aab","webpack:///src/modules/header/header.view.tsx?40e5","webpack:///src/actions/inputs/submit-user-review-input.ts?921c","webpack:///src/modules/social-share-item/social-share-item.tsx?e01b","webpack:///src/modules/video-player/components/additional-content.tsx?22a8","webpack:///src/modules/video-player/video-player.tsx?cfb9","webpack:///src/modules/bulk-purchase/bulk-purchase.view.tsx?2550","webpack:///src/modules/write-review/index.ts?2b94","webpack:///src/common/rnrInterface.ts?25e5","webpack:///src/modules/reviews-list/components/review-card.tsx?2d16","webpack:///src/modules/reviews-list/components/components.tsx?c96f","webpack:///src/modules/header/components/header-preferred-store.tsx?9138","webpack:///src/modules/header/components/logo.tsx?be23","webpack:///src/modules/header/components/nav-icon.tsx?49a1","webpack:///src/modules/header/header.tsx?4703","webpack:///src/modules/quick-order/quick-order.view.tsx?2242","webpack:///src/modules/ratings-histogram/ratings-histogram.tsx?4c32","webpack:///./src/themes/citta/views/components/product-collection-component.tsx?7670","webpack:///./src/themes/citta/views/product-collection.view.tsx?af7a","webpack:///src/modules/reviews-list/reviews-list.tsx?b5d0","webpack:///src/common/index.ts?ee63","webpack:///./src/themes/citta/views/components/promocode.component.tsx?4fb6","webpack:///src/modules/product-collection/product-collection.view.tsx?9eb3","webpack:///src/search-state.ts?b5d7","webpack:///src/actions/inputs/submit-helpfulness-vote-input.ts?cfb5","webpack:///src/modules/carousel/carousel.view.tsx?b19a","webpack:///src/modules/active-image/active-image.view.tsx?b3e2","webpack:///src/actions/report-review-concern.ts?11eb","webpack:///src/modules/product-collection/product-collection.tsx?b9b8","webpack:///src/modules/promo-banner/promo-banner.view.tsx?d069","webpack:///src/modules/video-player/video-player.view.tsx?2e40","webpack:///src/modules/reviews-list/components/report-review-modal.tsx?22a9","webpack:///src/common/review-modal.tsx?7ef9","webpack:///src/modules/search/search.view.tsx?e62d","webpack:///./src/modules/citta-promo-banner/components/close-button.tsx?8587","webpack:///./src/modules/citta-promo-banner/components/links.tsx?b38c","webpack:///./src/modules/citta-promo-banner/components/text.tsx?4bf6","webpack:///./src/modules/citta-promo-banner/citta-promo-banner.tsx?678a","webpack:///./src/themes/citta/views/checkout.view.tsx?abcc","webpack:///src/modules/reviews-list/index.ts?51cb","webpack:///src/modules/write-review/components/components.tsx?ead4","webpack:///src/modules/write-review/write-review.tsx?dea3","webpack:///./src/modules/citta-search/citta-search.view.tsx?f8a5","webpack:///src/modules/active-image-utilities/active-product.tsx?2e3c","webpack:///src/modules/active-image-utilities/additional-content.tsx?115e","webpack:///src/modules/active-image-utilities/image-mapper.tsx?3afb","webpack:///src/modules/active-image/active-image.tsx?f30d","webpack:///./src/modules/citta-search/actions/get-auto-suggest-suggestions.ts?ed2f","webpack:///./src/modules/citta-search/components/citta-search.keywordsuggest.tsx?ace3","webpack:///./src/modules/citta-search/components/citta-search.productsuggest.tsx?f9ce","webpack:///./src/modules/citta-search/components/citta-search.categorysuggest.tsx?b999","webpack:///./src/modules/citta-search/components/citta-search.form.tsx?c3aa","webpack:///./src/modules/citta-search/components/citta-search.label.tsx?8b80","webpack:///./src/modules/citta-search/citta-search.tsx?3c53","webpack:///src/actions/inputs/report-review-concern-input.ts?c9d1","webpack:///src/modules/promo-banner/components/close-button.tsx?939d","webpack:///src/modules/promo-banner/components/links.tsx?3133","webpack:///src/modules/promo-banner/components/text.tsx?834e","webpack:///src/modules/promo-banner/promo-banner.tsx?958e","webpack:///src/modules/social-share-item/social-share-item.view.tsx?ce9b","webpack:///src/modules/ratings-histogram/component/components.tsx?2a0b","webpack:///src/modules/reviews-list/reviews-list.view.tsx?6dd9","webpack:///src/actions/index.ts?e12b","webpack:///src/modules/bulk-purchase/bulk-purchase.tsx?d704","webpack:///src/modules/carousel/carousel.tsx?bfbb","webpack:///src/modules/ratings-histogram/ratings-histogram.view.tsx?4481","webpack:///./src/modules/citta-promo-banner/citta-promo-banner.view.tsx?52e6","webpack:///src/modules/ratings-histogram/index.ts?834d","webpack:///./src/components/price-component.tsx?ebb9","webpack:///src/modules/search/actions/get-auto-suggest-suggestions.ts?6ade","webpack:///src/modules/search/components/search.categorysuggest.tsx?3bc4","webpack:///src/modules/search/components/search.form.tsx?3c4b","webpack:///src/modules/search/components/search.keywordsuggest.tsx?59ca","webpack:///src/modules/search/components/search.label.tsx?91cb","webpack:///src/modules/search/components/search.productsuggest.tsx?d6fa","webpack:///src/modules/search/search.tsx?3f45","webpack:///src/actions/submit-user-review.ts?d4c7","webpack:///src/modules/write-review/write-review.view.tsx?9069"],"names":["submitHelpfulnessVoteDataAction","createObservableDataAction","id","action","async","input","ctx","reviewId","length","tenantId","locale","authToken","inputIsValid","Error","requestUrl","serviceEndpoint","requestBody","isHelpful","requestHeader","headers","Authorization","sendRequest","then","response","status","catch","error","trace","telemetry","exception","debug","QuickOrderDrawer","React","constructor","props","super","this","_toggle","bind","isManuallyToggled","state","isOpen","collapseProps","drawerGlyphClass","classnames","toggleGlyphClassName","animateGlyph","drawerOpenGlyph","openGlyph","closeGlyph","drawerCloseGlyph","shouldComponentUpdate","nextProps","nextState","render","_objectSpread","undefined","children","drawerClass","className","Button","Object","assign","toggleButtonProps","onClick","block","disabled","color","_generateDrawerButtonInnerMarkup","Collapse","collapseState","drawerButtonTextClass","toggleButtonClassName","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","location","glyphClass","e","preventDefault","setState","onToggle","QuickOrderFormComponent","productTextInput","quantityTextInput","quickOrderState","maxChars","maxQuantity","disableAddtoCart","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","addQuantityPlaceholderText","handleQuantityChange","handleInputChange","handleAddToCartClick","onInputChange","event","target","value","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","type","ref","onChange","quantityNode","pattern","maxLength","quantity","placeholder","product","addToCartBtn","userMessage","stateMessage","Alert","statusCssString","messageGlyph","messageText","QuickOrderProduct","cartLine","simpleProduct","isSelected","__decorate","observable","QuickOrderDesktopHeaderCellsComponent","resources","columnWithNumberClassName","createElement","Fragment","quickOrderProductNumberText","quickOrderProductText","quickOrderUnitPriceText","quickOrderUnitOfMeasureText","quickOrderQuantityText","quickOrderTotalText","quickOrderActionsText","QuickOrderMobileHeaderCellsComponent","QuickOrderTableHeaderComponent","rowClassName","headerCells","isMobile","defaultImageSettings","viewports","xs","q","w","h","lg","lazyload","cropFocalRegion","QuickOrderTableRowProductImageComponent","_props$data$product$P","_props$imageSettings","fallbackImageUrl","getFallbackImageUrl","data","ItemId","context","actionContext","requestContext","apiSettings","containerClassName","Image","altText","Name","src","PrimaryImageUrl","fallBackSrc","gridSettings","request","imageSettings","loadFailureBehavior","QuickOrderExtraActionsPopupComponent","productUrl","StringExtensions","isNullOrWhitespace","ObjectExtensions","isNullOrUndefined","RecordId","getProductPageUrlSync","QuickOrderDesktopTableRowCellComponent","_product$Dimensions","_cartLine$LineId","href","Dimensions","map","dimension","_dimension$DimensionV","DimensionValue","Value","filter","dimensionValue","join","quickOrderProductDimensionsSeparator","Price","UnitOfMeasureSymbol","IncrementalQuantity","LineId","max","currentCount","Quantity","inputQuantityAriaLabel","quickOrderInputQuantityAriaLabel","decrementButtonAriaLabel","quickOrderDecrementButtonAriaLabel","incrementButtonAriaLabel","quickOrderIncrementButtonAriaLabel","key","isGiftCard","IsGiftCard","TotalAmount","quickOrderRemoveItemButtonAriaLabel","QuickOrderMobileTableRowCellComponent","format","quickOrderQuantityMobileText","QuickOrderTableRowComponent","QuickOrderTableComponent","setIsMobile","useState","isMobileView","quickOrderProducts","updateViewport","MsDyn365","isBrowser","window","addEventListener","headerClassName","typeName","quickOrderProduct","index","QuickOrder","waitTime","dimensionUpdateQueue","FinitePromiseQueue","dimensions","cssClassNameConfigure","quickOrderCallbacks","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","_handleInputChange","query","productText","productResponse","productDimensions","inputQuantityText","quantityInput","current","HTMLInputElement","cancellabelDebounce","cancel","isQuickOrderFormExpanded","_debounce","getScanResult","GetScanResultInput","channelId","results","Product","ProductDimensionFull","setTimeout","_addItemToCart","cart","quickOrderAddedToCartSuccessMessage","quickOrderAddedToCartFailureMessage","_validateCart","result","_this$props$data$feat","_this$props$context$r","_this$props$context$a","isOrderQuantityLimitsFeatureEnabledInHq","featureState","find","IsEnabled","defaultOrderQuantityLimitsFeatureConfig","app","platform","enableDefaultOrderQuantityLimits","customerInfo","customerInformation","isOrderQuantityLimitsFeatureEnabledInSiteSettings","IsB2b","deliveryOptions","getDeliveryOptionsAsync","callerContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","emailDeliveryModeCode","channel","EmailDeliveryModeCode","defaultDeliveryOption","ArrayExtensions","hasElements","DeliveryOptions","Code","isOrderQuantityLimitsFeatureEnabled","productAvailableQuantity","_updateAvailablity","addProductToCartInput","count","enableStockCheck","config","availableQuantity","ProductAvailableQuantity","AvailableQuantity","additionalProperties","orderQuantityLimitsFeatureIsEnabled","isAddEmailDeliveryItemToCart","deliveryMode","addProductToCart","inputProductText","substatus","maxQtyLimitReachedMessage","_getMaxQtyMessage","_result$errorDetails","errorDetails","LocalizedMessage","warning","_getConcatenatedMaxQtyMessage","currentQuantity","quickOrderMaxQuantityLimitText","quickOrderAlreadyItemQuantityText","replace","_handleQuantityChange","currentValue","Number","parseInt","inputElement","isNaN","setAttribute","toString","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_this$state$productRe","productDimensionTypeColor","productDimensionTypeConfiguration","productDimensionTypeSize","productDimensionTypeAmount","productDimensionTypeStyle","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","keys","configureErrors","errorState","mappedDimensions","DimensionTypeValue","ExtensionProperties","selectedProduct","Promise","resolve","reject","newProduct","getSelectedVariant","SelectedVariantInput","MasterProductId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","productAvailable","ProductId","_getDimensionErrorString","dimensionTypeValue","quickOrderproductDimensionTypeColorErrorMessage","quickOrderproductDimensionTypeConfigurationErrorMessage","quickOrderproductDimensionTypeSizeErrorMessage","quickOrderproductDimensionTypeAmountErrorMessage","quickOrderproductDimensionTypeStyleErrorMessage","_updateProductAvailablity","_productResponse$Dime","missingDimensions","_getConfigureErrors","quickOrderWrongQuantityErrorMsg","quickOrderOutofStockErrorMsg","viewport","device","Type","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","products","quickOrderFormClass","quickOrderFormProductContent","quickOrderFormMsgContent","quickOrderModuleHeading","quickOrderModuleDescription","quickOrderAddtobag","quickOrderProductQuantityInputLabel","quickOrderProductInputLabel","quickOrderProductDimensionTypeColor","quickOrderProductDimensionTypeConfiguration","quickOrderSelectDimensionFormatString","quickOrderProductDimensionTypeSize","quickOrderProductDimensionTypeStyle","quickOrderProductDimensionTypeAmount","quickAddQuantityPlaceholderText","productConfigureResources","selectDimensionFormatString","viewProps","quickOrderProps","moduleProps","contentProps","isB2B","drawer","tag","quickOrderForm","quickOrderList","_renderQuickOrderTable","form","configure","getProductConfigure","renderView","_initQuickOrderProducts","_cart$cart$CartLines","CartLines","validValues","tableClassName","productInventoryInfo","_cart$result","maxQuantityForLineItem","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","addedQuantity","item","_item$ItemId","_this$state$productRe2","minInventory","Math","min","computed","_renderReactFragment","items","slot","headerView","HeaderTag","HeaderContainer","HeaderTopBarContainer","MobileMenuContainer","MobileMenuBodyContainer","MobileMenuLinksContainer","Divider","Module","Node","navIcon","logo","search","preferredStore","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","accountInfoDropdownButton","signOutLink","signInLink","accountLinks","link","_renderDesktopAccountBlock","wishListIconDesktop","cartIcon","siteOptions","MobileMenuHeader","menuBar","wishListIconMobile","SubmitUserReviewInput","productId","userReviewData","authorization","getCacheKey","getCacheObjectType","dataCacheType","SocialShareItem","_getSocialShareItem","viewprops","SocialShareItemElement","icon","socialMedia","SocialMediaComponent","SocialMedia","Facebook","postUrl","document","URL","Twitter","Pinterest","Linkedin","Mail","getAdditionalContentItems","_item$links","heading","renderHeading","additionalContentHeading","Msdyn365","text","editProps","onEdit","handleAdditionalTextChange","subtext","renderParagraph","additionalContentParagraphText","handleAdditionalParagraphChange","links","ctaLink","renderLinks","linkIndex","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","role","onTextChange","handleAdditionalLinkTextChange","additionalContentItemContainer","additionalContentItemLinks","videoPlayerAdditionalContent","additionalContent","additionalContentNode","additionalContentItems","VideoPlayer","handleTextChange","handleParagraphChange","paragraph","isMobileDevice","variant","VariantType","Viewport","options","video","playerResources","playAriaLabel","playLabel","pauseAriaLabel","pauseLabel","playingAriaLabel","playingLabel","pausedAriaLabel","pausedLabel","muteAriaLabel","muteLabel","unMuteAriaLabel","unMuteLabel","fullScreenAriaLabel","fullScreenLabel","exitFullScreenAriaLabel","exitFullScreenLabel","seekBarLabel","videoTimeDurationLabel","closedCaptionLabel","videoMetaData","_video$_links","videoId","title","duration","playTime","thumbnail","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","player","Player","playerData","isEditor","params","_getVideoDetailsHeading","_getVideoDetailsParagraph","_getVideoDetailsLinks","detailsContainer","detailsContainerCTA","handleText","handleParagraph","handleAdditionalText","handleAdditionalParagraph","handleLink","handleLinkTextChange","handleAdditionalLink","_this$props$config$ad","payLoad","getPayloadObject","linkData","contentAction","etext","attributes","getTelemetryAttributes","linkId","_heading$tag","BulkPurchaseViewComponent","container","content","TOGGLE_REVIEW_MODAL_BUTTON_ID","TOGGLE_EDIT_MODAL_BUTTON_CARD_ID","ReviewCard","cardProps","isUserReview","review","name","userName","rating","date","renderDate","submittedDateTime","reviewTitle","reviewText","ratingHelpfulLabel","wasReviewHelpfulText","like","voteHelpfulButton","dislike","edit","editButton","report","reportToggle","responseName","userResponse","responderName","responseText","responseDate","cardBodyProps","responseProps","reviewProps","controlsProps","headerProps","RatingComponent","readOnly","avgRating","reviewRatingNarratorText","parentId","parentType","isVoted","isVotedFor","i","votedReviews","approved","isDisabled","isOboRequest","label","yesButtonText","noButtonText","voteCount","helpfulPositive","helpfulNegative","user","onClickMethod","updateReviewHelpfulness","isAuthenticated","signInUrl","toggleWriteReviewModal","editReviewCardText","Intl","DateTimeFormat","month","day","year","Date","_unused","toggleReportReviewModal","reportConcernText","reportedReviews","includes","reportedText","reportedReviewId","returnRef","innerRef","ReviewCount","currentPage","reviewsCount","reviewsShownOnEachPage","pageReviewCountText","_getReviewStartNumber","_getReviewEndNumber","PageControls","previousPageClick","_getPreviousPageData","nextPageClick","_getNextPageData","TelemetryConstant","Next","nextAttribute","Previous","previousAttribute","_hasPreviousPage","_paginationAriaLabel","pageReviewAriaLabel","previousButtonText","_hasNextPage","nextButtonText","_getPagesCount","_getReviewsShown","ceil","isNextPage","page","pageModifier","pageReviewCount","updateReviews","selectedSortByOption","selectedFilterByOption","HeaderPreferredStore","modalCloseButtonRef","handleClick","_findPreferredStoreOnClick","storeSelectorStateManager","slots","storeSelector","storeName","StoreName","headerPreferredStoreText","headerPreferredStoreAriaLabel","modules","storeSelectorId","openDialog","showMapViewLink","parentElementRef","onLocationSelected","orgUnitLocation","message","observer","Logo","_renderLogo","rel","_renderImage","image","moduleType","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","isExpanded","targetId","Header","_this$props$config$my","myAccountLinks","popOverRef","_toggleNavbar","_togglePopover","_keydown","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","workerName","customerName","_this$props$data$empl","worker","employee","_this$props$data$acco","customer","accountInformation","FirstName","componentDidMount","reaction","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","componentWillUnmount","removeEventListener","wishlists","cartLabel","cartQtyLabel","logoLink","logoImage","shouldShowWishlistCount","disableTooltip","headerToggleClass","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","CommerceListLines","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","CartIconComponent","headerAriaLabel","Modal","wrapClassName","toggle","ModalHeader","ModalBody","displayName","Popover","placement","_getSigninButton","_getSignOutButton","isOBORequest","switchCustomerLink","_getSwitchCustomerButton","_getAccountInfoDropdownButton","_getAccountLinks","slotName","SignIn","signInLinkText","signInLinkAriaText","onTelemetryClick","_user$signOutUrl","SignOut","signOutLinkText","signOutUrl","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","cookies","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","removeAccountSelectionCookie","shoppingAsText","route","url","forEach","param","searchParams","delete","signUpCustomerNotFound","signUpMultipleCustomerFound","retailServerErrorCode","MyProfile","cta","keyCode","KeyCodes","Escape","renderConfigure","containerProps","dropdowns","renderConfigureDropdown","dropdown","labelContainerProps","errors","select","quickOrderView","renderForm","quickOrderProductContent","quickOrderMsgContent","RatingsHistogram","handleHeadingChange","selectFilterBy","ratingsSummary","ratingCount","totalRatingsCount","completeClass","classname","callbacks","histogramItems","HistogramItems","averageRating","averageRatingAriaLabel","hideCount","averageNumber","AverageRatingNumber","summary","totalReviews","TotalReviews","ratingsSummaryProps","histogramProps","stars","filterKey","update","createRatingsReviewsStateInput","renderLabel","arguments","price","ratingAriaLabel","ratingLabel","roundedRating","toFixed","ProductComponent","msdyn365Commerce","createComponent","component","_ref","savingsText","freePriceText","originalPriceText","currentPriceText","imageOrientation","AttributeValues","property","TextValue","productImageSettings","sm","md","xl","disableLazyLoad","cmsImageSettings","attribute","setTelemetryAttribute","pid","pname","mname","cultureFormatter","formatCurrency","AverageRating","imageUrl","img","imageProps","renderProductPlacementImage","basePrice","adjustedPrice","BasePrice","AdjustedPrice","CustomerContextualPrice","PriceComponent","renderPrice","description","Description","totalRatings","numRatings","renderRating","TotalRatings","_renderCarousel","carouselContainer","PropDetails","_renderProduct","_renderGrid","gridContainer","orientationClass","_property$Name","toLowerCase","getImageOrientation","priceFree","ProductCollectionView","ProductCollectionContainer","SingleSlideCarouselComponentProps","GridComponentProps","isCarousel","productCollection","ReviewsList","sortByDropdownOptions","mostHelpfulSortOptionText","mostRecentSortOptionText","highestRatedSortOptionText","lowestRatedSortOptionText","filterByDropdownOptions","allRatinsFilterByOptionText","fiveStarFilterByOptionText","fourStarFilterByOptionText","threeStarFilterByOptionText","twoStarFilterByOptionText","oneStarFilterByOptionText","reviewsListCallbacks","updateReviewTitle","userReviewTitle","updateReviewText","userReviewText","updateRating","userReviewRating","onReviewSubmitted","isSuccessful","isReviewModalOpen","hasReviewError","submitReview","toggleModal","_toggleReviewModal","updateReviewHelpfulnessVote","toggleReportModal","isReportModalOpen","_onReportModalOpen","_onReportModalClose","reportReview","_reportReviewCallback","updateFilterByDropdown","updateSortByDropdown","reviewsList","pagingInfo","totalItems","listOfReviews","isFilterApplied","ratingsReviewsState","filterKeyValue","dropdownItemsCount","filterByOption","option","selectedIndex","_userReview","userReview","_reviewCard","_reviewCards","reviewList","reviewElements","isTakenDown","isPublished","push","_userReportModalToggle","reportingReviewId","_userReviewModal","ReviewModal","onModalToggle","onTitleChange","_onTitleChange","_onTextChange","onRatingChange","_onRatingChange","onReviewComplete","_onReviewComplete","renderContextId","_userReviewModalToggle","hasError","modalCSS","isSuccess","_reportReviewModal","ReportReviewModal","reportedKey","onRadioChange","_onRadioChange","_reportReview","hasReportError","reported","ReviewConcernCategory","SpamAdvertising","currentTarget","getAttribute","reportReviewConcern","ReportReviewConcernInput","getRnrPartnerId","getUserToken","getRnrAuthEndpointId","_value","reportedReview","notification","selectedOption","skipItems","getSelectedProductIdFromActionInput","getReviewsForGivenProduct","GetProductReviewsInput","getRnrEndpointId","_updateVoteUi","alreadyExists","list","concat","submitHelpfulnessVote","SubmitHelpfulnessVoteInput","token","showSpinner","reviewModal","reportReviewModal","filterByDropdown","LabeledDropdown","labelText","filterByDropdownText","dropdownId","dropdownOptions","onSelectOption","controlledByParent","sortByDropdown","sortByDropdownText","reviewCount","refineReviewsProps","reviewsListProps","reviewCards","pageControls","noReviewsMessage","noReviewsWithFilterMessage","noReviewsWithSelectedFilterMessage","sortByOptions","filterByOptions","PromoCode","_onInputChange","promoCodeInputValue","canApply","_applyPromotion","cartState","appliedPromo","addPromoCode","promoCode","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","_renderForm","promoPlaceholderText","promoCodeApplyButtonText","onSubmit","_removePromotion","code","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_calculateDiscount","discountAmount","line","DiscountLines","discountLine","DiscountCode","DiscountCost","_renderAppliedPromoCode","Coupons","appliedPromoCodeHeadingText","DiscountAmount","coupon","removePromoAriaLabelFormat","removePromoText","isCollapseOpen","promoCodeHeadingText","ProductContainer","productComponent","seeAllButton","SearchState","retrieveItems","CarouselView","renderModuleAttributes","Carousel","closeAnimation","activeIndex","next","previous","pause","pauseOnHover","ride","autoplay","interval","transitionType","hideFlipper","dismissEnabled","onIndicatorsClickHandler","handleDismissCarousel","dismissCarouselAriaText","ariaLabelForDismissButton","indicatorAriaText","ariaLabelForSlide","directionTextPrev","flipperPrevious","directionTextNext","flipperNext","handleOnExited","handleOnExiting","keyboard","activeImageView","activePointContainer","activePointDetailsContainer","imageMapper","additionalContentContainer","detailsContainerCta","style","top","productCardtopPosition","left","productCardleftPosition","overlay","productCard","reportReviewConcernDataAction","concernCategory","ProductCollection","_getProductsDimensionsAvailabilities","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","DimensionTypes","none","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","initProductState","productCollectionProducts","equals","_getProduct","_this$state$productsD","allowBackNavigation","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","quickview","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","priceResources","priceRangeSeparator","quickViewButton","dimensionAvailabilities","dimensionAvailability","_product$MasterProduc","masterProductId","_getActivePrice","productsList","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSeeAllButton","recommendation","headingLabel","catalogId","getCatalogId","validateCatalogId","searchPageLink","getUrlSync","set","seeAllButtonText","productPrices","enableAffiliationBasedPricing","shouldDisplaySeeAllButton","recommendationListId","layout","headingComponent","updatedProducts","getProductData","productCollectionViewProps","SingleSlideCarousel","flipperPrevLabel","flipperNextLabel","PromoBannerView","promoBannerProps","closeButton","bannerMessages","promoBannerTextProps","promoBannerLinksProps","carouselProps","promoBannerText","handleLinks","slides","VideoPlayerView","reportConcernDropdownOptions","SubmitReview","submitReviewAttribute","SuccessButton","successAttribute","Cancel","cancelAttribute","reportSpamText","OffensiveContent","offensiveContentText","Profanity","profanityContentText","modal","applicationNode","returnFocusRef","modalHeader","modalFooter","ModalFooter","modalBody","header","headerSubmitted","feedbackThankYouText","cancelButton","cancelReportReviewText","submitButton","reportReviewButtonText","succesfulButton","okReportReviewText","reportMessage","reportModalMessage","reportSubmittedMessage","radioButtons","radioPairs","errorMessageText","pairs","inputId","checked","htmlFor","onClickSubmit","submitButtonAttribute","cancelButtonAttribute","classNames","modalHeaderNode","discardReviewButtonText","submitDisabled","submitReviewButtonText","ratingsInput","ratingsLabel","titleInput","titleLabel","textInput","textLabel","privacyPolicyUrl","privacyPolicyLink","autoComplete","inputRow","editReviewModalTitle","writeReviewModalTitle","stripWhiteSpacesFromString","selectRatingAriaLabel","initialRating","selectRatingLabel","reviewTitleMaxLength","reviewTitleAriaLabel","reviewTitleLabel","reviewTextMaxLength","rows","reviewAriaLabel","reviewTextLabel","policyTextBlocks","privacyPolicyTextFormat","split","isSeparatorAtStart","startsWith","isSeparatorAtEnd","endsWith","PrivacyPolicy","privacyPolicyAttribute","privacyPolicyTitle","RegExp","trim","onReviewSubmission","productName","userEmail","emailAddress","submitUserReview","firstName","getReviewInput","GetUserReviewInput","SearchForm","FormWrapper","cancelBtn","submitBtn","_renderKeywordSuggestions","KeywordSuggest","UlKeyword","keywordSuggestions","isLoadingAutoSuggest","isLoadingNode","_renderProductSuggestions","ProductSuggest","UlProduct","productSuggestions","LiProduct","AProduct","_renderCategorySuggestions","CategorySuggest","UlCategory","categorySuggestions","SearchView","Search","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","searchText","AutoSuggest","autosuggestCategory","autosuggestKeyword","autosuggestProduct","PromoBannerCloseButton","closeButtonAriaLabel","onClose","PromoBannerClose","PromoBannerLinks","editableLinks","_mapEditableLinks","linkdata","PromoBannerText","PromoBanner","animating","isVisible","handleLinkClick","_next","nextIndex","_isLastItem","_goToIndex","_previous","_isFirstItem","_onDismiss","closeButtonLabel","onDismiss","PromoBannerTextProps","PromoBannerLinksProps","CarouselProps","hideIndicator","PickUpAtStoreComponent","PickUpAtStore","EmailDeliveryComponent","_ref2","EmailDelivery","LineItemComponent","_ref3","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","_ref4","LineItemDeliveryGroup","LineItemList","lineItems","lineItem","LineItemsComponent","_ref5","LineItems","editLink","itemsForPickup","itemsForShip","itemsForEmail","_renderOrderSummarylines","_props$context","orderSummary","lines","subtotal","_props$data$checkout$6","checkout","checkoutCart","OrderSubTotal","subTotalLabel","_renderSubTotal","totalDiscounts","_props$data$checkout$3","chargeLines","ChargeLines","chargeAmountInclTax","chargeLine","IsShipping","chargeAmountInclTaxLocal","GrossAmount","_props$orderSummary2","shipping","shippingLabel","_renderShippingInclTaxes","_props$data$checkout$2","_props$orderSummary","otherCharge","otherCharges","_renderOtherCharges","hideTaxLine","tax","_props$data$checkout$7","OrderTotal","totalAmountLabel","_renderTotalOrder","loyalty","giftCard","orderTotal","_props$data$checkout$","totalSavingsLabel","_renderTotalSavings","_props$data$checkout$4","_props$data$checkout$5","shippingAmount","DeliveryModeChargeAmount","AmountDue","freeShippingAmount","_renderFreeShippingMessage","_getCheckoutSummaryText","CheckoutView","_props$context2","canShow","checkoutProps","hasSalesOrder","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","orderConfirmation","loading","alert","guidedForm","placeOrderButton","termsAndConditions","keepShoppingButton","isBusy","decodeURI","urlParams","URLSearchParams","get","has","orderToken","SignInMessage","SignInButton","ModalToggle","WriteReview","PureComponent","writeReviewCallbacks","_modalToggleRef","createRef","userInfo","signInMessage","signInButton","signInLabel","signInAriaLabel","modalToggle","editReviewButtonText","reviewButtonLabel","_buildUserReviewModal","_renderButton","SearchBtn","BtnWrapper","searchBtn","searchLabel","searchLabelText","ratingId","_totalRatings$toStrin","numberRatings","getRatingAriaLabel","ActiveProductComponent","imgData","hideRating","assembleNode","isOpenInNewTab","activeImageAdditionalContent","CanvasCalculations","CanvasStyles","ImageMapper","Component","_isDesktopViewPort","_context","getActiveImageWidth","activeImageReferenceValue","activeImageRefs","clientWidth","getActiveImageHeight","clientHeight","convertHexToRgb","hexColor","exec","rValue","gValue","bValue","applyFadingTransition","coords","rgbColor","alpha","_this$_canvas$current","_this$_canvas$current2","halfDivisor","_canvas","getContext","buttonPadding","paddingAdjustment","buttonWidth","measureText","width","fillStyle","body","parentElement","fillText","drawButton","_this$_canvas$current3","_this$_canvas$current4","buttonTextClor","buttonHeight","buttonPositionX","buttonPositionY","arcsize","beginPath","moveTo","lineTo","arcTo","stroke","closePath","fill","expandAnimation","_this$props$imageMapp","buttonText","imageMapperResources","animationStartWidth","expandAnimationStartWidth","pointPositionX","pointPositionY","animationEndWidth","expandAnimationEndWidth","radius","expandRadius","rotation","startAngle","endAngle","textFadeInValue","textFadeInStartValue","buttonTextClorInRgb","toLocaleLowerCase","animate","_this$_canvas$current5","_this$_canvas$current6","ellipse","requestAnimationFrame","textFadeInterval","collapseAnimation","_this$props$imageMapp2","collapseAnimationStartWidth","collapseAnimationEndWidth","clearMargin","clearHeight","clearWidth","collapseRadius","textFadeOutValue","textFadeOutStartValue","_this$_canvas$current7","_this$_canvas$current8","clearRect","drawCircle","_this$_canvas$current9","_this$_canvas$current10","viewPort","doubleMultiplier","strokeStyle","arc","PI","scaleCoords","imgWidth","defaultWidth","defaultScale","scale","coord","renderPrefilledAreas","areaMap","areas","area","computeCenter","scaledCoords","handleHoverOn","center","handleHoverOff","_this$_canvas$current11","canvasPositionX","defaultPositionX","canvasPositionY","defaultPositionY","height","click","hoverOn","onMouseEnter","hoverOff","onMouseLeave","renderAreas","_this$props$imageMapp3","_this$props$imageMapp4","_area$productSearchRe","xsRadius","extendedArea","areaKey","altTextWithProductName","productSearchResult","shape","onFocus","onBlur","tabIndex","alt","initCanvas","_this$getActiveImageW","_this$getActiveImageH","_this$_canvas$current12","_backgroundImage","_container","onLoad","defaultHeight","canvasWidth","canvasHeight","componentDidUpdate","shouldRender","_requestContext$gridS","imageData","useMap","ActiveImageConstants","ActiveImage","_defaultProductCardWidth","_defaultProdutCardHight","_activePoints","addActivePoints","_product$PrimaryImage","areaId","primaryImageUrl","updateClientWidth","Browser","renderImageMapper","_this$props$config$ac","productResults","activePoints","configProduct","itemId","_product$Name","_configProduct$xPosit","_configProduct$yPosit","_configProduct$radius","xPosition","yPosition","activePoint","JSON","stringify","mappedArea","_activeImageClass","enterArea","leaveArea","activeImage","_activeImageRefs","altTextForSeeMoreButtonWithProductName","seeMoreButtonText","overlayClass","open","resetState","renderProductComponent","_this$state$area","_this$state$area$prim","_product$ItemId","baseImageUrl","renderProductCard","_productCardDivRef","renderOverlay","getProductCardPositionX","_this$props$config$pr","_this$props$config$pr2","_defaultImageSettings","_area$center$","_area$center","getDefaultImageSettings","productImageSettingsWidth","productCardWidth","leftAllignPosition","position","getProductCardPositionY","_this$props$config$pr3","_this$props$config$pr4","_defaultImageSettings2","productImageSettingsHeight","produtCardHight","_area$center$2","_area$center2","keyDown","enterKey","nodeName","escKey","renderActiveImageDetailsLinks","_telemetryContent","willOpenInNewTab","renderActiveImageDetailsHeading","renderActiveImageDetailsParagraph","getActiveImageId","activeImageId","_activeImageIdPart$","activeImageSource","decrementOne","_handleOutsideClick","_this$_productCardDiv","contains","timeoutInterval","images","getElementsByClassName","Array","from","removeAttribute","handleAdditionalLinkText","SuggestionType","AutoSuggestInput","suggestionType","hitPrefix","hitSuffix","searchQuery","topResultsCount","_getAutoSuggest","autosuggest","searchCriteria","ProductSearchCriteria","SearchCondition","Context","ChannelId","CatalogId","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","Paging","Top","ImageUrl","generateImageUrl","AllSearchResults","autoSuggestPromises","all","inputData","KeywordSuggestionsComponent","suggestions","reactNodes","_assembleNode","Id","_generateLink","_getHighlightedText","suggestion","searchPageURL","searchQsp","formattedLink","indexOf","formattedText","dangerouslySetInnerHTML","getRichTextHtml","ProductSuggestionsComponent","autoSuggestProps","productSuggestionHeading","moduleId","_renderTitle","productAutoSuggestionHeading","Value3","DecimalValue","_renderPrice","_getLiWrapper","_getAWrapper","recid","CategorySuggestionsComponent","categorySuggestionHeading","categoryAutoSuggestionHeading","splitValue","pop","_getCategoryLink","searchRefiners","urlPath","categoryRefiners","refiners","KeyName","refiner","Values","RefinerRecordId","encodedRefiner","encodeURIComponent","compressRefiners","compressedRefinerKeys","compressedRefiners","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","isSearchFormExpanded","searchTextInput","disableSubmitSearch","handleCancelSearchChange","handleSearchClick","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","inputNode","submitBtnNode","searchBtnNode","LabelComponent","searchLabelClass","searchLabelArialLabel","searchtext","searchCollapsedLabel","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","classList","formReference","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","createSearchStateInput","_handleSearchClick","console","log","updatedIsSearchFormExpanded","headerElem","querySelector","add","documentElement","scrollTop","remove","getSearchSuggestionsAction","_getSuggestionType","inputSuggestionType","_getSearchRefiners","autoSuggestAriaLabel","_setAutoSuggestResultCount","suggestionTypes","distinctSuggestionTypes","suggestionTypeItem","charAt","toUpperCase","slice","_handleSubmit","focus","searchURL","_appendQueryParams","_handleCancelSearchChange","isInitialState","qsp","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","innerText","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","inSearchMode","searchInputMaxLength","suggestionTypeCriterion","searchFormClass","searchBtnClass","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","Keyword","None","Category","getProductSearchRefinersAsync","bannerText","bannerAriaLabel","SocialShareItemView","renderItem","star5Count","star4Count","star3Count","star2Count","star1Count","totalCount","percentage","formattedPercent","NumberFormat","barItemAriaLabel","starLabel","bar","Progress","buttonProps","buildReviewCard","createReviewModal","createReportModal","ReviewsListview","BulkPurchase","collapseRef","_dimensionDropDownChange","_this$collapseRef$cur","reEvaluateHeight","_toggleCollapse","_this$props$data$prod","hasDimensionsInProps","hasDimensionsInData","_renderCollapseContent","_renderCollapseButton","_renderCollapse","bulkPurchaseHeaderTitle","_renderMainContent","RichTextComponent","bulkPurchaseDescriptionText","_renderMatrix","_this$props$data$orde","_this$props$data$cust","ProductDimensionsMatrix","orderTemplates","dimensionOnChange","CarouselModule","_handleDismissCarousel","dismissCarousel","closeNow","_onExiting","_onExited","newIndex","histogramItem","RatingsHistogramView","_message$links","showStrikethroughPricing","originalPrice","getOriginalPrice","TradeAgreementPrice","renderCurrentPrice","initialPrice","itemProp","returnPrice","currency","currencyCode","currencyDisplay","renderCurrentPriceWithOriginalPrice","__assign","getSearchSuggestionsActionDataAction","shouldShowFullPath","_categoryRefiners$Val","queryUrl","SourceValue","ProductRefinerSource","_item$Value","_renderThumbnail","_props$resources","_isLoadingNode","loadingText","autoSuggestResultLoadingMessage","Spinner","size","SpinnerSize","medium","labelPosition","_loadSuggestions","_handleCancelSearchFocused","_initSuggestionTypes","_suggestions$AllSearc","_suggestions$AllSearc2","_suggestions$AllSearc3","shouldShowFullCategoryPath","_item$RefinerRecordId","handleCancelSearchFocused","unique","validSuggestions","loadSuggestionsRequestId","Random","Guid","generateGuid","_getSearchSuggestions","_updateSearchRefiners","ProductsDataActions","submitReviewDataAction","WriteReviewView"],"mappings":"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","file":"static/js/4.ea81072cdd7daa9d8748.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionContext, sendRequest } from '@msdyn365-commerce/core';\n\nimport { SubmitHelpfulnessVoteInput } from './inputs/submit-helpfulness-vote-input';\n\nasync function submitHelpfulnessVote(input: SubmitHelpfulnessVoteInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n throw new Error(\n `[SubmitHelpfulnessVote] Invalid input. ReviewId=${input.reviewId},tenantId=${input.tenantId}, locale= ${input.locale},`\n );\n }\n\n const requestUrl =\n `${input.serviceEndpoint}/v2.0/votes/review/${input.reviewId}` + `?tenantId=${input.tenantId}` + `&locale=${input.locale}`;\n\n const requestBody = {\n isHelpful: !!input.isHelpful\n };\n\n const requestHeader = {\n headers: {\n Authorization: `id_token ${input.authToken}`\n }\n };\n\n return sendRequest(requestUrl, 'post', requestBody, requestHeader)\n .then(response => {\n return response.status === 200 || response.status === 201;\n })\n .catch(error => {\n ctx.trace('[SubmitHelpfulnessVote] Failed to vote on a review');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[SubmitHelpfulnessVote] Failed to vote on a review');\n return false;\n });\n}\n\nfunction inputIsValid(input: SubmitHelpfulnessVoteInput): boolean {\n return input && input.reviewId.length > 0 && input.tenantId.length > 0 && input.locale.length > 0 && input.authToken.length > 0;\n}\n\nexport const submitHelpfulnessVoteDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/submit-helpfulness-vote',\n action: >submitHelpfulnessVote\n});\n\nexport default submitHelpfulnessVoteDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport searchStateDataAction from './search-state-data-action';\n\nexport * from './search-state';\nexport * from './search-state-data-action';\n\nexport { searchStateDataAction };\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Collapse, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IQuickOrderDrawerProps } from './quick-order-drawer-props';\n\nexport interface IQuickOrderDrawerState {\n isOpen: boolean;\n}\n\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Quick Order Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\n\nexport default class QuickOrderDrawer extends React.Component {\n public state: IQuickOrderDrawerState;\n\n private readonly drawerOpenGlyph: string;\n\n private readonly drawerCloseGlyph: string;\n\n private readonly drawerGlyphClass: string;\n\n private isManuallyToggled: boolean;\n\n constructor(props: IQuickOrderDrawerProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this.isManuallyToggled = false;\n this.state = { isOpen: (props.collapseProps && props.collapseProps.isOpen) || false };\n this.drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n\n if (this.props.animateGlyph) {\n this.drawerOpenGlyph = classnames(\n this.drawerGlyphClass,\n this.props.openGlyph ? this.props.openGlyph : this.props.closeGlyph ? this.props.closeGlyph : ''\n );\n this.drawerCloseGlyph = this.drawerOpenGlyph;\n } else {\n this.drawerOpenGlyph = classnames(this.drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : '');\n this.drawerCloseGlyph = classnames(this.drawerGlyphClass, this.props.closeGlyph ? this.props.closeGlyph : '');\n }\n }\n\n public shouldComponentUpdate(nextProps: IQuickOrderDrawerProps, nextState: IQuickOrderDrawerState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const collapseProps = { ...this.props.collapseProps } as ICollapseProps;\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this.isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n } else {\n // eslint-disable-next-line react/no-direct-mutation-state\n this.state.isOpen = collapseProps.isOpen;\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className ? this.props.className : '');\n this.isManuallyToggled = false;\n return (\n
\n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen)}\n \n \n
\n );\n }\n\n private _generateDrawerButtonInnerMarkup(collapseState: boolean): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n return (\n <>\n

{this.props.moduleHeadingText}

\n \n {this.props.moduleDescriptionText}\n \n {this._generateGlyphMarkup('drawer__glyph__end', collapseState)}\n \n );\n }\n\n private _generateGlyphMarkup(location: string, collapseState: boolean): JSX.Element {\n let glyphClass = collapseState ? this.drawerOpenGlyph : this.drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return ;\n }\n\n private _toggle(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n this.setState({ isOpen: !this.state.isOpen });\n this.isManuallyToggled = true;\n if (this.props.onToggle) {\n this.props.onToggle(this.state);\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 { Alert, Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderState } from '../quick-order';\n\nexport interface IQuickOrderFormProps {\n disableAddtoCart: boolean | undefined;\n productTextInput: React.RefObject;\n quantityTextInput: React.RefObject;\n maxChars: number;\n maxQuantity?: number;\n ariaLabelQuantity: string;\n ariaLabelProduct: string;\n ariaLabelAddtoCart: string;\n addQuantityPlaceholderText: string;\n quickOrderState: IQuickOrderState;\n handleInputChange(query: string): void;\n handleQuantityChange(query: string): void;\n handleAddToCartClick(): Promise;\n}\n\nexport interface IQuickOrderFormViewProps {\n product: React.ReactNode;\n quantity: React.ReactNode;\n addToCartBtn: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Input change value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\n\n/**\n * On Quantity Change functionality.\n * @param handleQuantityChange -Quantity change function.\n * @returns Quantity change value.\n */\nconst onQuantityChangeFunction = (handleQuantityChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleQuantityChange(event.target.value || '');\n};\n\nexport const QuickOrderFormComponent = (props: IQuickOrderFormProps): IQuickOrderFormViewProps => {\n const {\n productTextInput,\n quantityTextInput,\n quickOrderState,\n maxChars,\n maxQuantity,\n disableAddtoCart,\n ariaLabelQuantity,\n ariaLabelProduct,\n ariaLabelAddtoCart,\n addQuantityPlaceholderText,\n handleQuantityChange,\n handleInputChange,\n handleAddToCartClick\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const onQuantityInputChange = onQuantityChangeFunction(handleQuantityChange);\n\n const productNode = (\n
\n

\n {ariaLabelProduct}\n

\n \n
\n );\n\n const quantityNode = (\n
\n

\n {ariaLabelQuantity}\n

\n \n
\n );\n\n const addtoCartNode = (\n
\n \n {ariaLabelAddtoCart}\n \n
\n );\n\n const userMessageNode =\n quickOrderState && quickOrderState.stateMessage ? (\n \n \n {quickOrderState.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToCartBtn: addtoCartNode,\n quantity: quantityNode,\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order.\n */\nexport class QuickOrderProduct {\n @observable\n public isSelected: boolean;\n\n public readonly cartLine: CartLine;\n\n public readonly simpleProduct: SimpleProduct;\n\n public constructor(cartLine: CartLine, simpleProduct: SimpleProduct) {\n this.cartLine = cartLine;\n this.simpleProduct = simpleProduct;\n this.isSelected = false;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order table header resources.\n */\nexport interface IQuickOrderTableHeaderResources {\n quickOrderProductNumberText: string;\n quickOrderProductText: string;\n quickOrderUnitPriceText: string;\n quickOrderUnitOfMeasureText: string;\n quickOrderQuantityText: string;\n quickOrderTotalText: string;\n quickOrderActionsText: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderTableHeaderResources;\n}\n\n/**\n * Interface for quick order table header component.\n */\nexport interface IQuickOrderTableHeaderComponent extends IComponent {}\n\n/**\n * Get the quick order header cells for desktop.\n * @param props -- The quick order table header props.\n * @returns The list of cells for quick order header component in desktop version.\n */\nconst QuickOrderDesktopHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderProductNumberText}\n {resources.quickOrderProductText}\n {resources.quickOrderUnitPriceText}\n {resources.quickOrderUnitOfMeasureText}\n {resources.quickOrderQuantityText}\n {resources.quickOrderTotalText}\n {resources.quickOrderActionsText}\n \n );\n};\n\n/**\n * Get the quick order header cells for mobile.\n * @param props -- The quick order table header props.\n * @returns The quick order header component in desktop version.\n */\nconst QuickOrderMobileHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderProductNumberText}\n \n \n );\n};\n\n/**\n * Quick order table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const QuickOrderTableHeaderComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\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 { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { CartLine, format, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * Data required to render each quick order row.\n */\nexport interface IQuickOrderTableRowData {\n cartLine: CartLine;\n product: SimpleProduct;\n}\n\n/**\n * Resources for quick order table rows.\n */\nexport interface IQuickOrderTableRowResources {\n quickOrderQuantityMobileText: string;\n quickOrderProductDimensionsSeparator: string;\n quickOrderViewDetailsButtonText: string;\n quickOrderViewDetailsButtonAriaLabel: string;\n quickOrderRemoveItemButtonAriaLabel: string;\n quickOrderInputQuantityAriaLabel: string;\n quickOrderDecrementButtonAriaLabel: string;\n quickOrderIncrementButtonAriaLabel: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderTableRowResources;\n}\n\n/**\n * The default image settings for quick order table row.\n */\nconst defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Renders product image for quick order row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderTableRowProductImageComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const fallbackImageUrl = getFallbackImageUrl(props.data.product.ItemId, props.context.actionContext.requestContext.apiSettings);\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n
\n \n
\n );\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst QuickOrderExtraActionsPopupComponent: React.FC = (props: IQuickOrderTableRowProps): JSX.Element | null => {\n const product: SimpleProduct = props.data.product;\n\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n\n return (\n
\n
\n );\n};\n\n/**\n * Renders quick order table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order rows for desktop view.\n */\nexport const QuickOrderDesktopTableRowCellComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const product: SimpleProduct = props.data.product;\n const cartLine: CartLine = props.data.cartLine;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
\n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderProductDimensionsSeparator)}\n \n
\n \n {cartLine.Price}\n {cartLine.UnitOfMeasureSymbol}\n \n \n \n {cartLine.TotalAmount}\n \n \n );\n }\n return (\n \n );\n};\n\nconst editButton = (props: IReviewCardProps) => {\n if (props.isUserReview && !isOboRequest(props.context.request)) {\n return (\n \n );\n }\n\n return undefined;\n};\n\nconst renderDate = (props: IReviewCardProps, date?: Date): string | Date => {\n if (!date) {\n return '';\n }\n\n try {\n return new Intl.DateTimeFormat(props.context.request.locale, { month: 'long', day: 'numeric', year: 'numeric' }).format(\n new Date(date)\n );\n } catch {\n return date;\n }\n};\n\n/**\n * On Click Handler.\n * @param props -Review card props.\n * @returns Report review modal.\n */\nconst onClick = (props: IReviewCardProps) => () => {\n props.toggleReportReviewModal(props.review.reviewId!);\n};\n\nconst reportToggle = (props: IReviewCardProps) => {\n const user = props.context.request.user;\n if (props.isUserReview || isOboRequest(props.context.request)) {\n return undefined;\n } else if (!user.isAuthenticated) {\n return (\n \n );\n }\n\n if (props.reportedReviews.includes(props.review.reviewId!)) {\n return

{props.resources.reportedText}

;\n }\n\n const ref = props.review.reviewId === props.reportedReviewId ? props.returnRef : undefined;\n\n return (\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 {\n format,\n getPayloadObject,\n getTelemetryAttributes,\n ILabeledDropdownOption,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IReviewCountResources {\n pageReviewCountText: string;\n}\n\nexport interface IReviewCountProps {\n resources: IReviewCountResources;\n currentPage: number;\n reviewsCount: number;\n reviewsShownOnEachPage: number;\n}\n\nexport const ReviewCount: React.FC = (props: IReviewCountProps) => {\n const { currentPage, resources, reviewsCount, reviewsShownOnEachPage } = props;\n\n return (\n \n {format(\n resources.pageReviewCountText,\n _getReviewStartNumber(currentPage, reviewsShownOnEachPage),\n _getReviewEndNumber(currentPage, reviewsCount, reviewsShownOnEachPage),\n reviewsCount\n )}\n \n );\n};\n\nexport interface IPageControlResources {\n previousButtonText: string;\n nextButtonText: string;\n pageReviewAriaLabel: string;\n}\n\nexport interface IPageControlsProps {\n resources: IPageControlResources;\n currentPage: number;\n reviewsCount: number;\n reviewsShownOnEachPage: number;\n selectedSortByOption: ILabeledDropdownOption;\n selectedFilterByOption: ILabeledDropdownOption;\n telemetryContent?: ITelemetryContent;\n updateReviews(\n skipItems: number,\n selectedSortByOption: ILabeledDropdownOption,\n selectedFilterByOption: ILabeledDropdownOption,\n currentPage: number,\n isFilterApplied: boolean\n ): Promise;\n}\n\nexport const PageControls: React.FC = (props: IPageControlsProps) => {\n const { currentPage, resources, reviewsCount, reviewsShownOnEachPage } = props;\n const previousPageClick = React.useCallback(() => {\n return _getPreviousPageData(props);\n }, [props]);\n const nextPageClick = React.useCallback(() => {\n return _getNextPageData(props);\n }, [props]);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Next);\n const nextAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.Previous;\n const previousAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n return (\n
\n {_hasPreviousPage(currentPage) && (\n \n {resources.previousButtonText}\n \n )}\n {_hasNextPage(currentPage, reviewsCount, reviewsShownOnEachPage) && (\n \n {resources.nextButtonText}\n \n )}\n
\n );\n};\n\nconst _hasPreviousPage = (currentPage: number): boolean => {\n return currentPage > 1;\n};\n\nconst _hasNextPage = (currentPage: number, reviewsCount: number, reviewsShownOnEachPage: number): boolean => {\n return _getPagesCount(reviewsCount, reviewsShownOnEachPage) > currentPage;\n};\n\nconst _getReviewsShown = (reviewsShownOnEachPage: number) => {\n return Math.min(25, reviewsShownOnEachPage);\n};\n\nconst _getPagesCount = (reviewsCount: number, reviewsShownOnEachPage: number): number => {\n return Math.ceil(reviewsCount / _getReviewsShown(reviewsShownOnEachPage));\n};\n\nconst _paginationAriaLabel = (\n pageReviewAriaLabel: string,\n currentPage: number,\n reviewsCount: number,\n reviewsShownOnEachPage: number,\n isNextPage: boolean,\n page?: number\n): string => {\n const pageModifier = isNextPage ? 1 : -1;\n return format(\n pageReviewAriaLabel,\n _getReviewStartNumber(currentPage, reviewsShownOnEachPage, currentPage + pageModifier),\n _getReviewEndNumber(currentPage, reviewsCount, reviewsShownOnEachPage, currentPage + pageModifier),\n reviewsCount\n );\n};\n\nconst _getReviewStartNumber = (currentPage: number, reviewsShownOnEachPage: number, page?: number): number => {\n return ((page || currentPage) - 1) * _getReviewsShown(reviewsShownOnEachPage) + 1;\n};\n\nconst _getReviewEndNumber = (currentPage: number, reviewsCount: number, reviewsShownOnEachPage: number, page?: number): number => {\n const pageUsed = page || currentPage;\n const pageReviewCount = pageUsed * _getReviewsShown(reviewsShownOnEachPage);\n return pageReviewCount < reviewsCount ? pageReviewCount : reviewsCount;\n};\n\nconst _getPreviousPageData = async (props: IPageControlsProps) => {\n await props.updateReviews(\n _getReviewStartNumber(props.currentPage, props.reviewsShownOnEachPage) - 1 - _getReviewsShown(props.reviewsShownOnEachPage),\n props.selectedSortByOption,\n props.selectedFilterByOption,\n props.currentPage - 1,\n false\n );\n};\n\nconst _getNextPageData = async (props: IPageControlsProps) => {\n await props.updateReviews(\n _getReviewEndNumber(props.currentPage, props.reviewsCount, props.reviewsShownOnEachPage),\n props.selectedSortByOption,\n props.selectedFilterByOption,\n props.currentPage + 1,\n false\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderProps } from '../header.props.autogenerated';\n\n/**\n * The header preferred store component.\n */\n@observer\nexport class HeaderPreferredStore extends React.PureComponent> {\n private readonly modalCloseButtonRef: React.RefObject = React.createRef();\n\n /**\n * Handle click on the store selector.\n * @returns : Promise void.\n */\n public handleClick = () => {\n return this._findPreferredStoreOnClick(this.props);\n };\n\n public render(): JSX.Element | undefined {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n slots,\n resources\n } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- slots can be undefined.\n if (ArrayExtensions.hasElements(slots?.storeSelector)) {\n const storeName =\n storeSelectorStateManager?.preferredStore && storeSelectorStateManager.preferredStore.StoreName\n ? storeSelectorStateManager.preferredStore.StoreName\n : resources.headerPreferredStoreText;\n\n return (\n
\n \n {storeName}\n \n {slots.storeSelector}\n
\n );\n }\n\n return undefined;\n }\n\n private async _findPreferredStoreOnClick(props: IHeaderProps): Promise {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n modules\n } = props;\n if (!storeSelectorStateManager) {\n return;\n }\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && ArrayExtensions.hasElements(modules.storeSelector)) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n await storeSelectorStateManager\n .openDialog({\n id: storeSelectorId,\n showMapViewLink: true,\n parentElementRef: this.modalCloseButtonRef,\n onLocationSelected: orgUnitLocation => {\n return Promise.resolve();\n }\n })\n .catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to set preferred store');\n }\n });\n }\n}\n\nexport default HeaderPreferredStore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ILogoProps {\n image: Msdyn365.IImageData;\n gridSettings?: Msdyn365.IGridSettings;\n link?: ILinkData;\n className?: string;\n telemetryContent?: ITelemetryContent;\n requestContext: Msdyn365.IRequestContext;\n typeName?: string;\n}\n\nexport interface ILinkData {\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n linkText?: string;\n}\n\n/**\n *\n * Logo component.\n * @extends {React.PureComponent}\n */\nexport class Logo extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: ILogoProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return
{this._renderLogo(this.props)}
;\n }\n\n private _renderLogo(config: ILogoProps): JSX.Element {\n if (config.link && config.link.linkUrl.destinationUrl) {\n return (\n \n {this._renderImage(config)}\n \n );\n }\n return this._renderImage(config);\n }\n\n private _renderImage(config: ILogoProps): JSX.Element {\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=132&h=28&m=6', w: 0, h: 0 },\n lg: { q: 'w=160&h=48&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n}\n\nexport default Logo;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderResources } from '../header.props.autogenerated';\n\nexport interface INavIconProps {\n resources: IHeaderResources;\n isExpanded: boolean;\n targetId: string;\n telemetryContent?: ITelemetryContent;\n toggleNavBar(): void;\n}\n\n/**\n *\n * NavIcon component.\n * @extends {React.PureComponent}\n */\n\n@observer\nexport class NavIcon extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: INavIconProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return (\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 { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n KeyCodes,\n Modal,\n ModalBody,\n ModalHeader,\n onTelemetryClick,\n Popover,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\nimport { IHeaderData } from './header.data';\nimport { IHeaderProps, IHeaderResources, IMyAccountLinksData } from './header.props.autogenerated';\n\nexport interface IHeaderState {\n mobileMenuCollapsed: boolean;\n signinPopoverOpen: boolean;\n hasSigninerror?: boolean;\n}\n\nexport interface IHeaderViewProps extends IHeaderProps, IHeaderState {\n logo: React.ReactNode;\n wishListIconDesktop: React.ReactNode;\n wishListIconMobile: React.ReactNode;\n cartIcon: React.ReactNode;\n navIcon: React.ReactNode;\n className: string;\n menuBar: React.ReactNode[];\n search: React.ReactNode[];\n siteOptions: React.ReactNode[];\n HeaderTag: IModuleProps;\n HeaderContainer: INodeProps;\n MobileMenuContainer: INodeProps;\n MobileMenuHeader: React.ReactNode;\n MobileMenuBodyContainer: INodeProps;\n MobileMenuLinksContainer: INodeProps;\n HeaderTopBarContainer: INodeProps;\n Divider: INodeProps;\n\n AccountInfoDropdownParentContainer?: INodeProps;\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\n accountInfoDropdownButton?: React.ReactNode;\n\n signOutLink?: React.ReactNode;\n signInLink?: React.ReactNode;\n switchCustomerLink?: React.ReactNode;\n isOBORequest?: boolean;\n accountLinks?: React.ReactNode[];\n preferredStore?: React.ReactNode;\n}\n\n/**\n *\n * Header component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Header extends React.PureComponent, IHeaderState> {\n private readonly popOverRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private cart: ICartState | undefined;\n\n /**\n * The signed-in user name displayed in the header bar\n */\n @computed public get displayName(): Readonly {\n return MsDyn365.isOboRequest(this.props.context.request) ? this.workerName : this.customerName;\n }\n\n /**\n * OBO scenario. The name of worker who shops on behalf of customer.\n */\n @computed public get workerName(): Readonly {\n const worker = this.props.data.employee?.result;\n return worker?.Name;\n }\n\n @computed public get customerName(): Readonly {\n const customer = this.props.data.accountInformation?.result;\n if (MsDyn365.isOboRequest(this.props.context.request)) {\n // For OBO scenario, display full customer name because multiple customers may have the same first name.\n return customer ? customer.Name : undefined;\n } else {\n return customer ? customer.FirstName || customer.Name : undefined;\n }\n }\n\n public constructor(props: IHeaderProps) {\n super(props);\n this.popOverRef = React.createRef();\n this._toggleNavbar = this._toggleNavbar.bind(this);\n this._togglePopover = this._togglePopover.bind(this);\n this._keydown = this._keydown.bind(this);\n this.state = {\n mobileMenuCollapsed: true,\n signinPopoverOpen: false,\n hasSigninerror: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => this.props.data.cart.result,\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: { user }\n },\n resources: { signUpCustomerNotFoundTitle, signUpMultipleCustomerFoundTitle, closeNotificationLabel }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(user, signUpMultipleCustomerFoundTitle, signUpCustomerNotFoundTitle);\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\n // For signup show simple error notification.\n NotificationsManager.instance().addNotification(new ErrorNotification(signinNotificationError, closeNotificationLabel));\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('keydown', this._keydown, false);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n data: { accountInformation, wishlists },\n context: {\n request: { user }\n },\n context,\n resources: { cartLabel, cartQtyLabel }\n } = this.props;\n const { logoLink, logoImage, shouldShowWishlistCount } = this.props.config;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- app config is generic\n const disableTooltip = this.props.context.app.config.disableTooltip || false;\n const headerToggleClass = this.state.mobileMenuCollapsed ? '' : 'ms-header-open';\n const headerClassName = classnames('ms-header', this.props.config.className, headerToggleClass);\n const navbarKey = 'header-nav-mobile';\n const customer = accountInformation && accountInformation.result;\n const cartIconSlot = this._getSlot('cartIcon');\n const menuBarSlot = this._getSlot('menuBar');\n const searchSlot = this._getSlot('search');\n let wishlistCount = 0;\n const siteOptionsSlot = this._getSlot('siteOptions');\n const preferredStoreSlot = this._getSlot('storeSelector');\n if (wishlists !== undefined) {\n if (\n !wishlists.result ||\n !ArrayExtensions.hasElements(wishlists.result) ||\n !wishlists.result[0].CommerceListLines ||\n !ArrayExtensions.hasElements(wishlists.result[0].CommerceListLines)\n ) {\n wishlistCount = 0;\n } else {\n wishlistCount = wishlists.result[0].CommerceListLines.length;\n }\n }\n const viewProps: IHeaderViewProps = {\n ...(this.props as IHeaderProps),\n ...this.state,\n logo: (\n \n ),\n wishListIconDesktop: (\n \n ),\n wishListIconMobile: (\n \n ),\n cartIcon: ArrayExtensions.hasElements(cartIconSlot) ? (\n cartIconSlot[0]\n ) : (\n \n ),\n navIcon: (\n \n ),\n menuBar: ArrayExtensions.hasElements(menuBarSlot) ? menuBarSlot : [],\n search: ArrayExtensions.hasElements(searchSlot) ? searchSlot : [],\n siteOptions: ArrayExtensions.hasElements(siteOptionsSlot) ? siteOptionsSlot : [],\n className: headerClassName,\n HeaderTag: {\n moduleProps: this.props,\n className: classnames(headerClassName),\n 'aria-label': this.props.resources.headerAriaLabel,\n tag: 'header'\n },\n HeaderContainer: {\n className: classnames('ms-header__container')\n },\n HeaderTopBarContainer: {\n className: classnames('ms-header__topbar')\n },\n Divider: {\n className: classnames('ms-header__divider')\n },\n MobileMenuContainer: {\n tag: Modal,\n id: navbarKey,\n className: 'ms-header__mobile-hamburger',\n isOpen: !this.state.mobileMenuCollapsed,\n wrapClassName: 'ms-header__modal',\n toggle: this._toggleNavbar\n },\n MobileMenuHeader: ,\n MobileMenuBodyContainer: {\n tag: ModalBody,\n className: 'ms-header__mobile-hamburger-menu-body'\n },\n MobileMenuLinksContainer: {\n className: 'ms-header__mobile-hamburger-menu-links'\n },\n AccountInfoDropdownParentContainer: {\n className: 'ms-header__account-info'\n },\n AccountInfoDropdownPopoverConentContainer: this.displayName\n ? {\n tag: Popover,\n id: 'myprofilePopover',\n className: 'ms-header__account-info-content',\n placement: 'bottom',\n isOpen: this.state.signinPopoverOpen,\n target: this.popOverRef,\n toggle: this._togglePopover\n }\n : undefined,\n signInLink: this._getSigninButton(user, this.props.resources),\n signOutLink: this._getSignOutButton(user, this.props.resources),\n isOBORequest: MsDyn365.isOboRequest(this.props.context.request),\n switchCustomerLink: this._getSwitchCustomerButton(user, this.props.resources),\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(user, this.props.resources),\n accountLinks: this._getAccountLinks(customer),\n preferredStore: ArrayExtensions.hasElements(preferredStoreSlot) && \n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - Link Index.\n * @returns : Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.myAccountLinks?.[linkIndex]) {\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Get the slot.\n * @param slotName - Name of the slot.\n * @returns The slot.\n */\n private _getSlot(slotName: string): React.ReactNode[] | null {\n const { slots } = this.props;\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\n }\n\n /**\n * Renders the sign in button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSigninButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n !this.displayName && (\n \n \n {resources.signInLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSignOutButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n \n {resources.signOutLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSwitchCustomerButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SwitchCustomer);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const isOBOAccountSelected =\n MsDyn365.isOboRequest(this.props.context.request) && this.props.context.request.cookies.getAccountSelectionCookie();\n return (\n this.displayName &&\n isOBOAccountSelected && (\n this.props.context.request.cookies.removeAccountSelectionCookie()}\n {...attributes}\n >\n
\n
{format(resources.shoppingAsText, this.customerName)}
\n
{resources.switchCustomerLinkText}
\n
\n \n )\n );\n }\n\n private getBusinessPartnerSelectionUrl(): string | undefined {\n const route = MsDyn365.getUrlSync('businessPartnerSelection', this.props.context.actionContext);\n if (!route || !MsDyn365.msdyn365Commerce.isBrowser) {\n return undefined;\n }\n\n // MsDyn365.getUrlSync persists some params in the route and remove other params.\n // Among the persisted params, we need to remove catalogid.\n const persistedParamToRemove = ['catalogid'];\n const url = new URL(route, window.location.href);\n persistedParamToRemove.forEach(param => url.searchParams.delete(param));\n return url.href;\n }\n\n private _getSigninNotification(\n user: MsDyn365.IRequestContextUser | undefined,\n signUpMultipleCustomerFoundTitle: string,\n signUpCustomerNotFoundTitle: string\n ): string | undefined {\n const { signUpCustomerNotFound, signUpMultipleCustomerFound } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n\n if (user?.retailServerErrorCode === notFoundError) {\n return signUpCustomerNotFound !== undefined ? signUpCustomerNotFound : signUpCustomerNotFoundTitle;\n } else if (user?.retailServerErrorCode === multipleAccountError) {\n return signUpMultipleCustomerFound !== undefined ? signUpMultipleCustomerFound : signUpMultipleCustomerFoundTitle;\n }\n return undefined;\n }\n\n private _getAccountInfoDropdownButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n
\n
{this.displayName}
\n {MsDyn365.isOboRequest(this.props.context.request) && this.customerName && (\n
{format(resources.shoppingAsText, this.customerName)}
\n )}\n
\n \n )\n );\n }\n\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\n const { myAccountLinks } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n if (!customer || !this.displayName || !myAccountLinks || !ArrayExtensions.hasElements(myAccountLinks)) {\n return undefined;\n }\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\n payLoad.contentAction.etext = cta.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: cta.ariaLabel,\n className: 'ms-signin-info__account-link-button',\n linkText: cta.linkText,\n linkUrl: cta.linkUrl.destinationUrl,\n openInNewTab: cta.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n\n return (\n \n );\n });\n }\n\n private _toggleNavbar(): void {\n this.setState({\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\n });\n }\n\n private _togglePopover(): void {\n this.setState({\n signinPopoverOpen: !this.state.signinPopoverOpen\n });\n }\n\n private _keydown(event: KeyboardEvent): void {\n if (event.keyCode === KeyCodes.Escape) {\n this.setState({ mobileMenuCollapsed: true });\n }\n }\n}\n\nexport default Header;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionConfigureDropdownViewProps, IProductDimensionConfigureViewProps } from '@msdyn365-commerce/components';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderFormViewProps } from './components';\nimport { IQuickOrderViewProps } from './quick-order';\n\n/**\n * Render product dimension/configure container.\n * @param configure -- Product dimension configuration.\n * @returns Container to have dimension dropdown.\n */\nconst renderConfigure = (configure?: IProductDimensionConfigureViewProps): JSX.Element | null => {\n if (configure !== undefined) {\n const { containerProps, dropdowns } = configure;\n\n return {dropdowns.map(renderConfigureDropdown)};\n }\n return null;\n};\n\n/**\n * Render product dimension/configure dropdown.\n * @param dropdown -- Product dimension drop down.\n * @returns Dropdown.\n */\nconst renderConfigureDropdown = (dropdown: IProductDimensionConfigureDropdownViewProps): JSX.Element => {\n const { containerProps, labelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n {heading}\n {errors}\n {select}\n \n );\n};\n\nconst renderForm = (\n form: IQuickOrderFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMsgContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n \n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.userMessage}\n {form.addToCartBtn}\n \n \n ) : (\n \n {form.userMessage}\n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToCartBtn}\n \n \n );\n};\n\nconst quickOrderView: React.FC = props => {\n const {\n quickOrderProps,\n contentProps,\n form,\n quickOrderForm,\n drawer,\n configure,\n quickOrderFormProductContent,\n quickOrderFormMsgContent,\n quickOrderList,\n isMobileView\n } = props;\n\n return (\n \n \n \n {renderForm(\n form as IQuickOrderFormViewProps,\n isMobileView,\n quickOrderForm,\n quickOrderFormProductContent,\n quickOrderFormMsgContent,\n configure\n )}\n \n \n\n {quickOrderList}\n \n );\n};\nexport default quickOrderView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { format, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createRatingsReviewsStateInput } from '../../actions/ratings-reviews-state-data-action';\nimport { AverageRatingNumber, HistogramItems, IHistogramItemViewProps, TotalReviews } from './component/components';\nimport { IRatingsHistogramData } from './ratings-histogram.data';\nimport { IRatingsHistogramProps } from './ratings-histogram.props.autogenerated';\n\nexport interface IRatingsHistogramViewProps extends IRatingsHistogramProps {\n className: string;\n histogramItems: IHistogramItemViewProps[];\n moduleProps: IModuleProps;\n heading: React.ReactNode;\n averageRating: React.ReactNode;\n averageNumber: React.ReactNode;\n totalReviews: React.ReactNode;\n histogramProps: INodeProps;\n ratingsSummaryProps: INodeProps;\n callbacks: IRatingsHistogramCallbacks;\n}\n\nexport interface IRatingsHistogramCallbacks {\n selectFilterBy(stars: number): void;\n}\n\n/**\n * RatingsHistogram component.\n * @extends {React.Component>}\n */\n@observer\nclass RatingsHistogram extends React.PureComponent> {\n constructor(props: IRatingsHistogramProps) {\n super(props);\n this.selectFilterBy = this.selectFilterBy.bind(this);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { className, heading } = this.props.config;\n const {\n ratingsSummary: { result: ratingsSummary }\n } = this.props.data;\n const ratingCount = ratingsSummary && ratingsSummary.totalRatingsCount ? `${ratingsSummary.totalRatingsCount}` : '0';\n\n const completeClass = classname('ms-ratings-histogram', className);\n const viewProps: IRatingsHistogramViewProps = {\n ...this.props,\n className: completeClass,\n callbacks: {\n selectFilterBy: this.selectFilterBy\n },\n moduleProps: {\n moduleProps: this.props,\n className: completeClass\n },\n histogramItems: ratingsSummary\n ? HistogramItems({\n ratingsSummary,\n resources: { ...resources },\n locale: this.props.context.request.locale,\n onClick: this.selectFilterBy\n })\n : [],\n averageRating: ratingsSummary && (\n \n ),\n averageNumber: ratingsSummary && ,\n totalReviews: ratingsSummary && ,\n ratingsSummaryProps: { className: 'ms-ratings-histogram__summary' },\n heading: heading && (\n \n ),\n histogramProps: { className: 'ms-ratings-histogram__histogram' }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public selectFilterBy(stars: number): void {\n const filterKey = `${stars}`;\n this.props.context.actionContext.update(createRatingsReviewsStateInput({ filterKey }), { filterKey });\n }\n}\n\nexport default RatingsHistogram;\n","import { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { format } from '@msdyn365-commerce-modules/utilities';\r\nimport { RatingComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport React from 'react';\r\nimport PriceComponent from '../../../../components/price-component';\r\n\r\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult }> {\r\n className?: string;\r\n imageSettings?: IImageSettings;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n ratingAriaLabel?: string;\r\n}\r\n\r\nconst ProductCard: React.FC = ({\r\n data,\r\n context,\r\n imageSettings,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText,\r\n ratingAriaLabel,\r\n typeName,\r\n id\r\n}) => {\r\n const product = data.product;\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n let imageOrientation: string = '';\r\n if (product.AttributeValues!.length > 0) {\r\n product.AttributeValues!.map(property => {\r\n if (property.Name === 'Image Orientation') {\r\n imageOrientation = property.TextValue!;\r\n }\r\n });\r\n }\r\n const productUrl = getProductPageUrlSync(product.Name || '', product.RecordId, context && context.actionContext, undefined);\r\n const productImageSettings = imageOrientation === 'Landscape' ? getLandscapeImageSettings(imageSettings) : imageSettings;\r\n\r\n // Construct telemetry attribute to render\r\n const attribute = context\r\n && context.telemetry\r\n && context.telemetry.setTelemetryAttribute\r\n && context.telemetry.setTelemetryAttribute(product.RecordId.toString(), {\r\n pid: product.RecordId,\r\n pname: product.Name,\r\n mname: id\r\n }\r\n );\r\n return (\r\n \r\n
\r\n {renderProductPlacementImage(productImageSettings, context.request.gridSettings, product.PrimaryImageUrl, product.Name)}\r\n
\r\n
\r\n

{product.Name}

\r\n {renderPrice(context, typeName, id, product.BasePrice, product.Price, savingsText, freePriceText, originalPriceText, currentPriceText)}\r\n {renderDescription(product.Description)}\r\n {renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\r\n
\r\n
\r\n );\r\n};\r\n\r\nfunction renderLabel(name: string = '', price: string = '', rating?: number, ratingAriaLabel?: string): string {\r\n let ratingLabel = '';\r\n\r\n if (rating) {\r\n const roundedRating = rating.toFixed(2);\r\n ratingLabel = format(ratingAriaLabel || '', roundedRating, '5');\r\n }\r\n\r\n return (`${name} ${price} ${ratingLabel}`);\r\n}\r\n\r\nfunction renderDescription(description?: string): JSX.Element | null {\r\n return

{description}

;\r\n}\r\n\r\nfunction renderRating(context: ICoreContext, typeName: string, id: string, avgRating?: number, totalRatings?: number, ariaLabel?: string): JSX.Element | null {\r\n if (!avgRating) {\r\n return null;\r\n }\r\n\r\n const numRatings = totalRatings && totalRatings.toString() || undefined;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction renderPrice(\r\n context: ICoreContext,\r\n typeName: string,\r\n id: string,\r\n basePrice?: number,\r\n adjustedPrice?: number,\r\n savingsText?: string,\r\n freePriceText?: string,\r\n originalPriceText?: string,\r\n currentPriceText?: string): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: adjustedPrice,\r\n CustomerContextualPrice: adjustedPrice\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction renderProductPlacementImage(imageSettings?: IImageSettings, gridSettings?: IGridSettings, imageUrl?: string, altText: string = ''): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !imageSettings) {\r\n return null;\r\n }\r\n const img: IImageData = {\r\n src: imageUrl,\r\n altText: altText\r\n };\r\n const imageProps = {\r\n gridSettings: gridSettings,\r\n imageSettings: imageSettings\r\n };\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction getLandscapeImageSettings(cmsImageSettings?: IImageSettings): IImageSettings {\r\n // tslint:disable-next-line: no-unnecessary-local-variable\r\n const landscapeImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=390&h=292&q=80&m=6&f=jpg', w: 390, h: 292 },\r\n sm: { q: 'w=528&h=396&q=80&m=6&f=jpg', w: 528, h: 396 },\r\n md: { q: 'w=640&h=479&q=80&m=6&f=jpg', w: 640, h: 479 },\r\n lg: { q: 'w=584&h=437&q=80&m=6&f=jpg', w: 584, h: 437 },\r\n xl: { q: 'w=702&h=526&q=80&m=6&f=jpg', w: 702, h: 526 }\r\n },\r\n disableLazyLoad: cmsImageSettings && cmsImageSettings.disableLazyLoad,\r\n lazyload: cmsImageSettings && cmsImageSettings.lazyload\r\n };\r\n\r\n return landscapeImageSettings;\r\n}\r\n\r\n// @ts-ignore\r\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'Product',\r\n { component: ProductCard }\r\n);","import { IProductCollectionViewProps } from '@msdyn365-commerce-modules/product-collection';\r\nimport { INodeProps, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport {ProductComponent} from './components/product-collection-component';\r\n\r\nconst ProductCollectionView: React.FC = props => {\r\n const { heading, ProductCollectionContainer, products, SingleSlideCarouselComponentProps, GridComponentProps, isCarousel } = props;\r\n if (products) {\r\n return (\r\n \r\n {heading}\r\n {\r\n isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps,props.config.productCollection.products,props) :\r\n _renderGrid(GridComponentProps, props.config.productCollection.products,props)\r\n }\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst _renderCarousel = (carouselContainer: INodeProps, items: ProductSearchResult[],PropDetails: React.PropsWithChildren): JSX.Element => {\r\n const isMobile = PropDetails.context && PropDetails.context.request && PropDetails.context.request.device.Type === 'Mobile'\r\n let mobileCarouselContainer = {\r\n tag: 'ul' as NodeTag,\r\n className: 'ms-product-collection__custom-carousel'\r\n }\r\n return (\r\n \r\n {items && items.map((item,index)=>_renderProduct(item,PropDetails,index))}\r\n \r\n );\r\n};\r\n\r\nconst _renderGrid = (gridContainer: INodeProps, items: ProductSearchResult[],PropDetails: React.PropsWithChildren): JSX.Element => {\r\n return (\r\n \r\n {items && items.map((item,index)=>_renderProduct(item,PropDetails,index))}\r\n \r\n );\r\n};\r\n\r\nconst _renderProduct = (product: ProductSearchResult,PropDetails: React.PropsWithChildren,index: number): JSX.Element => {\r\n const liClass = 'ms-product-collection__item';\r\n const orientationClass = getImageOrientation(product) === 'Landscape'? 'product-placement__item-limage' : 'product-placement__item-pimage';\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n};\r\n\r\nfunction getImageOrientation(product: ProductSearchResult): string {\r\n let imageOrientation: string ='';\r\n if (product.AttributeValues!.length > 0) {\r\n product.AttributeValues!.map(property => {\r\n if (property.Name?.toLowerCase() === 'image orientation') {\r\n imageOrientation = property.TextValue!;\r\n }\r\n });\r\n }\r\n return imageOrientation;\r\n}\r\n\r\nexport default ProductCollectionView;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n getRnrAuthEndpointId,\n getRnrEndpointId,\n getRnrPartnerId,\n getSelectedProductIdFromActionInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n format,\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n LabeledDropdown\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { reportReviewConcern, submitHelpfulnessVote } from '../..';\nimport { getReviewsForGivenProduct } from '../../actions/get-product-reviews';\nimport { GetProductReviewsInput } from '../../actions/inputs/get-product-reviews-input';\nimport { ReportReviewConcernInput, ReviewConcernCategory } from '../../actions/inputs/report-review-concern-input';\nimport { SubmitHelpfulnessVoteInput } from '../../actions/inputs/submit-helpfulness-vote-input';\nimport { IReviewModalViewProps, ReviewModal, submitReview } from '../../common/review-modal';\nimport { IRnrKeyValuePair, IRnrOrderByKeyValuePair } from '../../common/rnrInterface';\nimport { PageControls, ReviewCount } from './components/components';\nimport { IReportReviewModalViewProps, ReportReviewModal } from './components/report-review-modal';\nimport { IReviewCardViewProps, ReviewCard } from './components/review-card';\nimport { IReviewsListData } from './reviews-list.data';\nimport { IReviewsListProps } from './reviews-list.props.autogenerated';\n\nexport interface IReviewsListState {\n skipItems: number;\n listOfReviews: Review[];\n currentPage: number;\n reviewsCount: number;\n showSpinner: boolean;\n isFilterApplied: boolean;\n selectedSortByOption: ILabeledDropdownOption;\n selectedFilterByOption: ILabeledDropdownOption;\n userReviewRating: number;\n userReviewTitle: string;\n userReviewText: string;\n isReviewModalOpen: boolean;\n hasReviewError: boolean;\n isReportModalOpen: boolean;\n hasReportError: boolean;\n reportingReviewId: string;\n reportedKey: string;\n reported: boolean;\n reportedReviews: string[];\n votedReviews: { reviewId: string; approved: boolean }[];\n}\n\nexport interface IReviewsListCallbacks {\n toggleModal(): void;\n updateReviewTitle(title: string): void;\n updateReviewText(text: string): void;\n updateRating(rating: number): void;\n onReviewSubmitted(isSuccessful: boolean): void;\n submitReview(\n product: SimpleProduct,\n title: string,\n text: string,\n rating: number,\n context: Msdyn365.ICoreContext,\n userReview?: Review,\n onReviewSubmission?: (isSuccessful: boolean) => void\n ): void;\n updateReviewHelpfulnessVote(reviewId: string, isHelpful: boolean): void;\n toggleReportModal(reviewId: string): void;\n reportReview(reviewId: string, reportedKey: string): void;\n updateSortByDropdown(notification: ILabeledDropdownOnChangeNotification): void;\n updateFilterByDropdown(notification: ILabeledDropdownOnChangeNotification): void;\n updateReviews(\n skipItems: number,\n selectedSortByOption: ILabeledDropdownOption,\n selectedFilterByOption: ILabeledDropdownOption,\n currentPage: number,\n isFilterApplied: boolean\n ): void;\n}\n\nexport interface IReviewsListViewProps extends IReviewsListProps {\n state: IReviewsListState;\n className: string;\n callbacks: IReviewsListCallbacks;\n moduleProps: IModuleProps;\n reviewModal: IReviewModalViewProps;\n reportReviewModal: IReportReviewModalViewProps;\n sortByDropdown: React.ReactNode;\n filterByDropdown: React.ReactNode;\n averageRating: React.ReactNode;\n reviewCount: React.ReactElement;\n refineReviewsProps: INodeProps;\n reviewsListProps: INodeProps;\n reviewCards: IReviewCardViewProps[];\n userReview?: IReviewCardViewProps;\n pageControls: React.ReactNode;\n noReviewsMessage: React.ReactElement;\n noReviewsWithFilterMessage: React.ReactElement;\n heading: React.ReactNode;\n sortByOptions: IRnrOrderByKeyValuePair[];\n filterByOptions: IRnrOrderByKeyValuePair[];\n}\n\n/**\n *\n * ReviewsList component.\n * @extends {React.Component, IReviewsListState>}\n */\n@observer\nclass ReviewsList extends React.Component, IReviewsListState> {\n public sortByDropdownOptions: IRnrOrderByKeyValuePair[] = [\n { key: 'MostHelpful', value: this.props.resources.mostHelpfulSortOptionText },\n { key: 'MostRecent', value: this.props.resources.mostRecentSortOptionText },\n { key: 'HighestRating', value: this.props.resources.highestRatedSortOptionText },\n { key: 'LowestRating', value: this.props.resources.lowestRatedSortOptionText }\n ];\n\n public filterByDropdownOptions: IRnrKeyValuePair[] = [\n { key: '1;2;3;4;5', value: this.props.resources.allRatinsFilterByOptionText },\n { key: '5', value: this.props.resources.fiveStarFilterByOptionText },\n { key: '4', value: this.props.resources.fourStarFilterByOptionText },\n { key: '3', value: this.props.resources.threeStarFilterByOptionText },\n { key: '2', value: this.props.resources.twoStarFilterByOptionText },\n { key: '1', value: this.props.resources.oneStarFilterByOptionText }\n ];\n\n private readonly _userReviewModalToggle: React.RefObject;\n\n private readonly _userReportModalToggle: React.RefObject;\n\n private readonly telemetryContent?: ITelemetryContent;\n private readonly reviewsListCallbacks: IReviewsListCallbacks = {\n updateReviewTitle: (title: string): void => {\n this.setState({ userReviewTitle: title });\n },\n updateReviewText: (text: string): void => {\n this.setState({ userReviewText: text });\n },\n updateRating: (rating: number): void => {\n this.setState({ userReviewRating: rating });\n },\n onReviewSubmitted: (isSuccessful: boolean): void => {\n if (isSuccessful) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({ hasReviewError: true });\n }\n },\n submitReview,\n // @ts-expect-error\n toggleModal: this._toggleReviewModal,\n // @ts-expect-error\n updateReviewHelpfulnessVote: this.updateReviewHelpfulnessVote,\n toggleReportModal: (reviewId: string): void => {\n this.state.isReportModalOpen ? this._onReportModalOpen(reviewId) : this._onReportModalClose();\n },\n // @ts-expect-error\n reportReview: this._reportReviewCallback,\n // @ts-expect-error\n updateFilterByDropdown: this.updateFilterByDropdown,\n // @ts-expect-error\n updateSortByDropdown: this.updateSortByDropdown,\n // @ts-expect-error\n updateReviews: this.updateReviews\n };\n constructor(props: IReviewsListProps) {\n super(props);\n const {\n userReview: { result: userReview }\n } = this.props.data;\n\n this.state = {\n skipItems: 0,\n reviewsCount: 0,\n listOfReviews: [],\n currentPage: 1,\n showSpinner: false,\n isFilterApplied: false,\n selectedSortByOption: this.sortByDropdownOptions[0],\n selectedFilterByOption: this.filterByDropdownOptions[0],\n userReviewRating: userReview ? userReview.rating : 0,\n userReviewText: userReview ? userReview.reviewText : '',\n userReviewTitle: userReview ? userReview.title : '',\n isReviewModalOpen: false,\n hasReviewError: false,\n isReportModalOpen: false,\n hasReportError: false,\n reported: false,\n reportedKey: ReviewConcernCategory.SpamAdvertising,\n reportingReviewId: '',\n reportedReviews: [],\n votedReviews: []\n };\n\n this._userReviewModalToggle = React.createRef();\n this._userReportModalToggle = React.createRef();\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public shouldComponentUpdate(nextProps: IReviewsListProps, nextState: IReviewsListState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n public componentDidMount = async () => {\n this.props.data.reviewsList.then(reviewsList => {\n if (\n reviewsList &&\n reviewsList.pagingInfo &&\n reviewsList.pagingInfo.totalItems &&\n reviewsList.items &&\n reviewsList.items.length > 0\n ) {\n this.setState({\n listOfReviews: reviewsList.items,\n reviewsCount: reviewsList.pagingInfo.totalItems\n });\n }\n });\n await this.updateReviews(0, this.state.selectedSortByOption, this.state.selectedFilterByOption, 1, this.state.isFilterApplied);\n\n reaction(\n () => this.props.data.ratingsReviewsState.result && this.props.data.ratingsReviewsState.result.filterKey,\n async (filterKey: string | undefined) => {\n const filterKeyValue = Number(filterKey);\n const dropdownItemsCount = this.filterByDropdownOptions.length;\n if (filterKey && !isNaN(filterKeyValue) && filterKeyValue < dropdownItemsCount) {\n const filterByOption = this.filterByDropdownOptions.find((option: IRnrKeyValuePair) => option.key === filterKey);\n if (!filterByOption) {\n this.props.telemetry.warning(`[reviews-list] cannot find filter with key ${filterKey}`);\n } else {\n await this.updateReviews(0, this.state.selectedSortByOption, filterByOption, 1, true);\n const selectedIndex = dropdownItemsCount - filterKeyValue;\n this.setState({\n selectedFilterByOption: this.filterByDropdownOptions[selectedIndex]\n });\n }\n }\n }\n );\n };\n public render(): JSX.Element | null {\n const { className, heading, reviewsShownOnEachPage } = this.props.config;\n const { currentPage, reviewsCount, selectedFilterByOption, selectedSortByOption } = this.state;\n const {\n ratingsSummary: { result: ratingsSummary }\n } = this.props.data;\n const resources = this.props.resources;\n const completeClass = classname('ms-reviews-list', className);\n const viewProps: IReviewsListViewProps = {\n ...this.props,\n state: this.state,\n className: completeClass,\n moduleProps: {\n moduleProps: this.props,\n className: completeClass\n },\n callbacks: this.reviewsListCallbacks,\n reviewModal: this._userReviewModal(),\n reportReviewModal: this._reportReviewModal(),\n filterByDropdown: (\n \n ),\n sortByDropdown: (\n \n ),\n averageRating: ratingsSummary && (\n \n ),\n reviewCount: (\n \n ),\n refineReviewsProps: { className: 'ms-reviews-list__refiners' },\n reviewsListProps: { className: 'ms-reviews-list__reviews' },\n reviewCards: this._reviewCards(this.state.listOfReviews),\n userReview: this._userReview(),\n pageControls: (\n \n ),\n noReviewsMessage: (\n \n {resources.noReviewsMessage}\n \n ),\n noReviewsWithFilterMessage: (\n \n {resources.noReviewsWithSelectedFilterMessage}\n \n ),\n heading: heading && heading.text && (\n \n ),\n sortByOptions: this.sortByDropdownOptions,\n filterByOptions: this.filterByDropdownOptions\n } as IReviewsListViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n private readonly _userReview = () => {\n const userReview = this.props.data.userReview.result;\n\n return userReview && this._reviewCard(userReview, true);\n };\n\n private readonly _reviewCards = (reviewList: Review[]) => {\n const userReview = this.props.data.userReview.result;\n const reviewElements: IReviewCardViewProps[] = [];\n\n for (const review of reviewList) {\n if (!review.isTakenDown && review.isPublished && userReview ? review.reviewId !== userReview.reviewId : true) {\n reviewElements.push(this._reviewCard(review, false));\n }\n }\n return reviewElements;\n };\n\n private readonly _reviewCard = (review: Review, userReview: boolean): IReviewCardViewProps => {\n return ReviewCard({\n review,\n resources: { ...this.props.resources },\n context: this.props.context,\n isUserReview: userReview,\n parentId: this.props.id,\n parentType: this.props.typeName,\n reportedReviews: this.state.reportedReviews,\n returnRef: this._userReportModalToggle,\n reportedReviewId: this.state.reportingReviewId,\n toggleWriteReviewModal: this._toggleReviewModal,\n toggleReportReviewModal: this._onReportModalOpen,\n updateReviewHelpfulness: this.updateReviewHelpfulnessVote,\n votedReviews: this.state.votedReviews\n });\n };\n\n private readonly _userReviewModal = (): IReviewModalViewProps => {\n return ReviewModal({\n userReview: this.props.data.userReview.result,\n product: this.props.data.product.result,\n resources: { ...this.props.resources },\n context: this.props.context,\n parentId: this.props.id,\n parentType: this.props.typeName,\n isOpen: this.state.isReviewModalOpen,\n rating: this.state.userReviewRating,\n reviewTitle: this.state.userReviewTitle,\n reviewText: this.state.userReviewText,\n onModalToggle: this._toggleReviewModal,\n onTitleChange: this._onTitleChange,\n onTextChange: this._onTextChange,\n onRatingChange: this._onRatingChange,\n onReviewComplete: this._onReviewComplete,\n renderContextId: 'writeReview-list',\n returnRef: this._userReviewModalToggle,\n hasError: this.state.hasReviewError,\n modalCSS: 'ms-reviews-list'\n });\n };\n\n private readonly _onTitleChange = (event: React.ChangeEvent): void => {\n this.reviewsListCallbacks.updateReviewTitle(event.target.value);\n };\n\n private readonly _onTextChange = (event: React.ChangeEvent): void => {\n this.reviewsListCallbacks.updateReviewText(event.target.value);\n };\n\n private readonly _onRatingChange = (value: number): void => {\n this.reviewsListCallbacks.updateRating(value);\n };\n\n private readonly _toggleReviewModal = (): void => {\n const userReview = this.props.data.userReview.result;\n if (this.state.isReviewModalOpen) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({\n isReviewModalOpen: true,\n userReviewText: userReview!.reviewText,\n userReviewTitle: userReview!.title,\n userReviewRating: userReview!.rating\n });\n }\n };\n\n private readonly _onReviewComplete = (isSuccess: boolean): void => {\n if (isSuccess) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({ hasReviewError: true });\n }\n };\n\n private readonly _reportReviewModal = () => {\n return ReportReviewModal({\n resources: { ...this.props.resources },\n context: this.props.context,\n isOpen: this.state.isReportModalOpen,\n returnRef: this._userReportModalToggle,\n reportedKey: this.state.reportedKey,\n onModalToggle: this._onReportModalClose,\n onRadioChange: this._onRadioChange,\n reportReview: this._reportReview,\n hasError: this.state.hasReportError,\n telemetryContent: this.telemetryContent\n });\n };\n\n private readonly _onReportModalOpen = (reviewId: string) => {\n this.setState({\n isReportModalOpen: true,\n reportingReviewId: reviewId,\n reported: false,\n reportedKey: ReviewConcernCategory.SpamAdvertising\n });\n };\n\n private readonly _onReportModalClose = () => {\n this.setState({ isReportModalOpen: false, hasReportError: false });\n };\n\n private readonly _onRadioChange = (event: React.ChangeEvent) => {\n this.setState({ reportedKey: event.currentTarget.getAttribute('data-key') || '' });\n };\n\n private readonly _reportReviewCallback = (reviewId: string, reportedKey: string) => {\n reportReviewConcern(\n new ReportReviewConcernInput(\n reviewId,\n getRnrPartnerId(this.props.context.actionContext),\n this.props.context.request.locale,\n reportedKey,\n this.getUserToken(this.props.context.request),\n getRnrAuthEndpointId(this.props.context.actionContext)\n ),\n this.props.context.actionContext\n )\n .then((_value: boolean) => {\n const reportedReview = this.state.reportedReviews;\n reportedReview.push(reviewId);\n this.setState({ reported: true, reportedReviews: reportedReview, hasReportError: false });\n })\n .catch((error: boolean) => {\n this.setState({ hasReportError: true });\n });\n };\n\n private readonly _reportReview = () => {\n this._reportReviewCallback(this.state.reportingReviewId, this.state.reportedKey);\n };\n\n private readonly updateSortByDropdown = async (notification: ILabeledDropdownOnChangeNotification) => {\n await this.updateReviews(0, notification.selectedOption, this.state.selectedFilterByOption, 1, this.state.isFilterApplied);\n };\n\n private readonly updateFilterByDropdown = async (notification: ILabeledDropdownOnChangeNotification) => {\n await this.updateReviews(0, this.state.selectedSortByOption, notification.selectedOption, 1, true);\n };\n\n private readonly updateReviews = async (\n skipItems: number | 0,\n selectedSortByOption: ILabeledDropdownOption,\n selectedFilterByOption: ILabeledDropdownOption,\n currentPage: number,\n isFilterApplied: boolean\n ) => {\n const productId = getSelectedProductIdFromActionInput(this.props.context.actionContext);\n if (productId === undefined) {\n return;\n }\n const result = await getReviewsForGivenProduct(\n // Task #211227597 Remove this hardcoded values.\n new GetProductReviewsInput(\n productId,\n getRnrPartnerId(this.props.context.actionContext),\n this.props.context.request.locale,\n getRnrEndpointId(this.props.context.actionContext),\n selectedSortByOption.key,\n selectedFilterByOption.key,\n skipItems < 0 ? 0 : skipItems,\n this.props.config.reviewsShownOnEachPage\n ),\n this.props.context.actionContext\n );\n if (result && result.items && result.pagingInfo && result.pagingInfo.totalItems !== undefined) {\n this.setState({\n currentPage,\n listOfReviews: result.items,\n selectedSortByOption,\n selectedFilterByOption,\n reviewsCount: result.pagingInfo.totalItems,\n isFilterApplied\n });\n }\n };\n\n private readonly _updateVoteUi = (reviewId: string, isHelpful: boolean): void => {\n let alreadyExists = false;\n let list = this.state.votedReviews.map(review => {\n if (review.reviewId === reviewId) {\n review.approved = isHelpful;\n alreadyExists = true;\n }\n return review;\n });\n\n if (!alreadyExists) {\n list = list.concat({ reviewId, approved: isHelpful });\n }\n\n this.setState({ votedReviews: list });\n };\n\n private readonly updateReviewHelpfulnessVote = (reviewId: string, isHelpful: boolean): void => {\n submitHelpfulnessVote(\n new SubmitHelpfulnessVoteInput(\n reviewId,\n getRnrPartnerId(this.props.context.actionContext),\n this.props.context.request.locale,\n isHelpful,\n this.getUserToken(this.props.context.request),\n getRnrAuthEndpointId(this.props.context.actionContext)\n ),\n this.props.context.actionContext\n )\n .then(() => {\n this._updateVoteUi(reviewId, isHelpful);\n })\n .catch((error: Error) => {\n throw new Error('[submitHelpfulnessVote]Error executing action');\n });\n };\n\n private readonly getUserToken = (context: Msdyn365.IRequestContext): string => {\n return context && context.user && context.user.token;\n };\n}\n\nexport default ReviewsList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './review-modal';\nexport * from './rnrInterface';\n","import * as React from 'react';\r\n\r\nimport { Button, format } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nexport interface IPromoCodeProps extends IComponentProps<{}> {\r\n cart: ICartState | undefined;\r\n promoCodeHeadingText: string;\r\n appliedPromoCodeHeadingText: string;\r\n removePromoAriaLabelFormat: string;\r\n promoPlaceholderText: string;\r\n promoCodeApplyButtonText: string;\r\n collapseTimeOut: number;\r\n removePromoText: string;\r\n invalidPromoCodeErrorText: string;\r\n failedToAddPromoCodeErrorText: string;\r\n duplicatePromoCodeErrorText: string;\r\n failedToRemovePromoCodeErrorText: string;\r\n promoCodeApplyCallback?(): void;\r\n}\r\n\r\ninterface IPromoCodeState {\r\n isCollapseOpen: boolean;\r\n promoCodeInputValue: string;\r\n error: string;\r\n canApply: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * The PromoCode component renders the promocode section.\r\n * @extends {React.PureComponent}\r\n */\r\nclass PromoCode extends React.Component {\r\n\r\n constructor(props: IPromoCodeProps, state: IPromoCodeState) {\r\n super(props);\r\n this.state = {\r\n isCollapseOpen: false,\r\n promoCodeInputValue: '',\r\n error: '',\r\n canApply: false\r\n };\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n
    \r\n
    {this.props.promoCodeHeadingText}
    \r\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\r\n

    {this.state.error}

    \r\n {this._renderAppliedPromoCode(this.props)}\r\n
    \r\n );\r\n }\r\n\r\n private _onInputChange = (e: React.ChangeEvent) => {\r\n const error = e.target.value === '' ? '' : this.state.error;\r\n this.setState({\r\n promoCodeInputValue: e.target.value, error: error,\r\n canApply: e.target.value ? true : false\r\n });\r\n }\r\n\r\n private _applyPromotion = (cartState: ICartState | undefined) => {\r\n if (!cartState || !cartState.cart) {\r\n return;\r\n }\r\n const appliedPromo = this.state.promoCodeInputValue;\r\n\r\n cartState.addPromoCode({ promoCode: appliedPromo })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n // show success text\r\n this.setState({ promoCodeInputValue: '', error: '', canApply: false});\r\n } else if (result.substatus === 'ALREADYADDED') {\r\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\r\n } else {\r\n this.setState({ error: this.props.invalidPromoCodeErrorText });\r\n }\r\n })\r\n .catch(error => {\r\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\r\n });\r\n }\r\n\r\n private _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\r\n const _onSubmit = (event: React.FormEvent) => {event.preventDefault(); this._applyPromotion(cartState);};\r\n const _applyPromotion = (event: React.MouseEvent) => {this._applyPromotion(cartState);};\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n {promoCodeApplyButtonText}\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n private _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\r\n if (!cartState) {\r\n return;\r\n }\r\n const code = event.currentTarget.getAttribute('data-value') || '';\r\n cartState.removePromoCodes({\r\n promoCodes: [\r\n code\r\n ]\r\n })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n this.setState({ error: ''});\r\n }\r\n })\r\n .catch(() => {\r\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText});\r\n });\r\n\r\n }\r\n private _calculateDiscount = (code: string, cartState: ICartState | undefined) => {\r\n if (!cartState || !cartState.cart || !cartState.cart.CartLines || cartState.cart.CartLines.length === 0 || !code) {\r\n return;\r\n }\r\n let discountAmount = 0;\r\n for (const line of cartState.cart.CartLines) {\r\n if (line.DiscountLines) {\r\n for (const discountLine of line.DiscountLines) {\r\n if (discountLine.DiscountCode === code) {\r\n discountAmount += discountLine.DiscountCost!;\r\n }\r\n }\r\n }\r\n }\r\n return discountAmount * -1;\r\n }\r\n\r\n private _renderAppliedPromoCode = (props: IPromoCodeProps) => {\r\n if (!props.cart || !props.cart.cart || !props.cart.cart.Coupons || !(props.cart.cart.Coupons.length > 0)) {\r\n return;\r\n }\r\n\r\n const _removePromotion = (event: React.MouseEvent) => {this._removePromotion(props.cart, event);};\r\n\r\n return (\r\n <>\r\n
    \r\n
    {this.props.appliedPromoCodeHeadingText}
    \r\n \r\n
    \r\n {\r\n props.cart.cart.Coupons.map((coupon: Coupon) => {\r\n const ariaLabel = props.removePromoAriaLabelFormat ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code) : '';\r\n\r\n return (\r\n
    \r\n
    \r\n {coupon.Code} (\r\n )\r\n
    \r\n \r\n {props.removePromoText}\r\n \r\n
    \r\n );\r\n })\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default PromoCode;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductCollectionViewProps, IProductComponentViewProps } from './product-collection';\n\nconst ProductCollectionView: React.FC = props => {\n const {\n heading,\n ProductCollectionContainer,\n products,\n SingleSlideCarouselComponentProps,\n GridComponentProps,\n isCarousel,\n seeAllButton\n } = props;\n\n if (products) {\n return (\n \n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n \n );\n }\n props.context.telemetry.error('Product collection content is empty, module wont render.');\n return null;\n};\n\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return {productComponent};\n};\n\nexport default ProductCollectionView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\n/**\n * SubmitHelpfulnessVote Input Action.\n */\nexport class SubmitHelpfulnessVoteInput implements IActionInput {\n public reviewId: string;\n\n public tenantId: string;\n\n public locale: string;\n\n public serviceEndpoint: string;\n\n public isHelpful: boolean;\n\n public authToken: string;\n\n constructor(reviewId: string, tenantId: string, locale: string, isHelpful: boolean, authToken: string, serviceEndpoint: string) {\n this.reviewId = reviewId;\n this.tenantId = tenantId;\n this.locale = locale;\n this.isHelpful = isHelpful;\n this.authToken = authToken;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'SubmitHelpfulnessVote';\n\n public getCacheObjectType = () => 'SubmitHelpfulnessVote';\n\n public dataCacheType = (): CacheType => 'none';\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel } from '@msdyn365-commerce/components';\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselViewProps } from './carousel';\n\n/**\n * Returns item slots.\n * @returns Array of item slots.\n * @param props -Props.\n */\nconst retrieveItems = (props: ICarouselViewProps): React.ReactNode[] => {\n let items = [];\n items = props.slots && props.slots.content && props.slots.content.length > 0 ? props.slots.content : [];\n return items;\n};\nconst CarouselView: React.FC = props => (\n \n \n \n);\n\nexport default CarouselView;\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 { IActiveImageAdditionalContentViewProps } from '../active-image-utilities';\nimport { IActiveImageViewProps } from './active-image';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IActiveImageAdditionalContentViewProps) => {\n return (\n \n {additionalContent.heading}\n \n {additionalContent.text}\n {additionalContent.links}\n \n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nexport const activeImageView: React.FC = props => {\n return (\n \n \n {props.imageMapper}\n \n {props.title}\n {props.text}\n {props.additionalContent && renderAdditionalContent(props.additionalContent)}\n \n {props.links}\n \n \n \n \n {props.overlay}\n {props.productCard}\n \n \n );\n};\n\nexport default activeImageView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionContext, sendRequest } from '@msdyn365-commerce/core';\n\nimport { ReportReviewConcernInput } from './inputs/report-review-concern-input';\n\nasync function reportReviewConcern(input: ReportReviewConcernInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n throw new Error(\n `[SubmitHelpfulnessVote] Invalid input. ReviewId=${input.reviewId},tenantId=${input.tenantId},locale= ${input.locale},`\n );\n }\n\n const requestUrl =\n `${input.serviceEndpoint}/v2.0/concerns/review/${input.reviewId}` + `?tenantId=${input.tenantId}` + `&locale=${input.locale}`;\n\n const requestBody = {\n concernCategory: input.concernCategory\n };\n\n const requestHeader = {\n headers: {\n Authorization: `id_token ${input.authToken}`\n }\n };\n\n return sendRequest(requestUrl, 'post', requestBody, requestHeader)\n .then(response => {\n return response.status === 200 || response.status === 201;\n })\n .catch(error => {\n ctx.trace('[ReportReviewConcernInput] Failed to report a concern');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[ReportReviewConcernInput] Failed to report a concern');\n return false;\n });\n}\n\nfunction inputIsValid(input: ReportReviewConcernInput): boolean {\n return input && input.reviewId.length > 0 && input.tenantId.length > 0 && input.locale.length > 0 && input.authToken.length > 0;\n}\n\nexport const reportReviewConcernDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/report-review-concern',\n action: >reportReviewConcern\n});\n\nexport default reportReviewConcernDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n ObjectExtensions,\n PriceForProductSearchResultInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductCollectionData } from './product-collection.data';\nimport { IProductCollectionProps, layout } from './product-collection.props.autogenerated';\n\nexport interface IProductCollectionViewProps extends IProductCollectionProps {\n heading?: React.ReactNode;\n ProductCollectionContainer: IModuleProps;\n SingleSlideCarouselComponentProps: INodeProps;\n GridComponentProps: INodeProps;\n products: IProductComponentViewProps[];\n isCarousel: boolean;\n productPrices?: ProductPrice[];\n seeAllButton?: React.ReactNode;\n}\n\nexport interface IProductComponentViewProps {\n ProductContainer: INodeProps;\n productComponent: React.ReactNode;\n}\nexport interface IProductComponentState {\n products: ProductSearchResult[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * ProductCollection component.\n */\nclass ProductCollection extends React.PureComponent, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n\n // Initialize state in case if the products were not found during initial module render\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\n this.initProductState(this.props.config.productCollection);\n\n const products = this.state.products;\n const isCarousel = this.props.config.layout === layout.carousel;\n const headingLabel = heading ? heading.text : '';\n const headingComponent = heading && (\n \n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\n const getProductData = this._getProduct(item, index);\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\n });\n\n const productCollectionViewProps = {\n ...this.props,\n heading: headingComponent,\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: '',\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\n parentId: this.props.id,\n telemetryContent: this.telemetryContent\n } as IComponentNodeProps,\n ProductCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-product-collection', className)\n },\n GridComponentProps: {\n tag: 'ul' as NodeTag,\n className: 'ms-product-collection__items'\n },\n isCarousel,\n\n products:\n ArrayExtensions.hasElements(updatedProducts) &&\n updatedProducts.filter(item => {\n return item !== undefined;\n }),\n productPrices: this.productPrices,\n seeAllButton:\n recommendation && shouldDisplaySeeAllButton && ArrayExtensions.hasElements(updatedProducts)\n ? this._getSeeAllButton(recommendation, headingLabel)\n : undefined\n };\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Get products dimension availabilities.\n * @param products - Products.\n * @returns Promise.\n */\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\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 /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n const productCollectionProducts = productCollection.products;\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (\n ArrayExtensions.hasElements(products) &&\n ArrayExtensions.hasElements(productCollectionProducts) &&\n !ArrayExtensions.equals(products, productCollectionProducts)\n ) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\n products = [];\n this.setState({ products: products });\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n };\n\n private readonly _getProduct = (product: ProductSearchResult, index: number): IProductComponentViewProps | null => {\n if (!product || !product.Name) {\n this.props.telemetry.trace('[product-collection] Product or product name is null');\n return null;\n }\n const telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const { imageSettings, allowBackNavigation } = this.props.config;\n const resources = this.props.resources;\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\n const quickviewSlot =\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const reviewCount = 1;\n const reviewTotalRatings = Number(product.TotalRatings);\n const reviewCountAriaLabelValue =\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return {\n ProductContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-product-collection__item',\n role: 'listitem',\n key: index\n },\n productComponent: (\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param recommendation - Recommendation.\n * @param headingLabel - Heading label.\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\n */\n private readonly _getSeeAllButton = (recommendation: string, headingLabel: string): React.ReactNode => {\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\n return null;\n }\n\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\n if (!searchPageLink) {\n return null;\n }\n\n const url = new URL(searchPageLink, window.location.href);\n url.searchParams.set('recommendation', recommendation);\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n\n return (\n \n {this.props.resources.seeAllButtonText}\n \n );\n };\n}\n\nexport default ProductCollection;\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 { IPromoBannerViewProps } from './promo-banner';\n\nconst PromoBannerView: React.FC = props => {\n const {\n promoBannerProps,\n contentProps,\n closeButton,\n bannerMessages,\n promoBannerTextProps,\n promoBannerLinksProps,\n carouselProps,\n promoBannerText,\n handleLinks,\n handleText\n } = props;\n\n const slides =\n bannerMessages &&\n bannerMessages.map((message, index) => {\n return (\n \n {promoBannerText}\n {message.text && }\n {message.links && message.links.length > 0 && (\n \n )}\n \n );\n });\n\n return (\n \n \n {closeButton}\n \n );\n};\nexport default PromoBannerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IVideoPlayerAdditionalContentViewProps } from './components/additional-content';\nimport { IVideoPlayerViewProps } from './video-player';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IVideoPlayerAdditionalContentViewProps) => {\n if (additionalContent.additionalContentItems) {\n return (\n \n <>\n {additionalContent.additionalContentItems.heading}\n \n {additionalContent.additionalContentItems.text}\n \n {additionalContent.additionalContentItems.links}\n \n \n \n \n );\n }\n\n return null;\n};\n\nconst VideoPlayerView: React.FC = props => {\n return (\n
    \n {props.player}\n \n {props.title}\n {props.text}\n {props.additionalContent && renderAdditionalContent(props.additionalContent)}\n \n {props.links}\n \n \n
    \n );\n};\n\nexport default VideoPlayerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n Alert,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ReviewConcernCategory } from '../../../actions/inputs/report-review-concern-input';\nimport { IRnrKeyValuePair } from '../../../common/rnrInterface';\n\nexport interface IReportReviewModalProps {\n resources: IReportReviewModalResources;\n context: ICoreContext>;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n reportedKey: string;\n hasError: boolean;\n telemetryContent?: ITelemetryContent;\n onModalToggle(): void;\n onRadioChange(event: React.ChangeEvent): void;\n reportReview(): void;\n}\n\nexport interface IReportReviewModalResources {\n reportConcernText: string;\n feedbackThankYouText: string;\n reportModalMessage: string;\n reportSubmittedMessage: string;\n reportSpamText: string;\n offensiveContentText: string;\n profanityContentText: string;\n okReportReviewText: string;\n cancelReportReviewText: string;\n reportReviewButtonText: string;\n errorMessageText: string;\n}\n\nexport interface IReportReviewModalViewProps {\n modal: INodeProps;\n modalHeader: INodeProps;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n header: React.ReactElement;\n headerSubmitted: React.ReactElement;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n succesfulButton: React.ReactElement;\n reportMessage: React.ReactElement;\n reportSubmittedMessage: React.ReactElement;\n radioButtons: React.ReactElement;\n error: React.ReactElement;\n}\n\nlet reportConcernDropdownOptions: IRnrKeyValuePair[];\n\n/**\n * CartLineItems component.\n */\n\nexport const ReportReviewModal = (props: IReportReviewModalProps): IReportReviewModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SubmitReview);\n const submitReviewAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.SuccessButton;\n const successAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n reportConcernDropdownOptions = [\n { key: ReviewConcernCategory.SpamAdvertising, value: props.resources.reportSpamText },\n { key: ReviewConcernCategory.OffensiveContent, value: props.resources.offensiveContentText },\n { key: ReviewConcernCategory.Profanity, value: props.resources.profanityContentText }\n ];\n\n return {\n modal: {\n tag: Modal,\n className: 'ms-report-review-modal msc-modal-input-required',\n toggle: props.onModalToggle,\n applicationNode: 'renderPage',\n isOpen: props.isOpen,\n returnFocusRef: props.returnRef\n },\n modalHeader: { tag: ModalHeader, toggle: props.onModalToggle, className: 'ms-report-review-modal-header' },\n modalFooter: { tag: ModalFooter, className: 'ms-report-review-modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-report-review-modal-body' },\n header:

    {props.resources.reportConcernText}

    ,\n headerSubmitted:

    {props.resources.feedbackThankYouText}

    ,\n cancelButton: (\n \n ),\n submitButton: (\n \n ),\n succesfulButton: (\n \n ),\n reportMessage:

    {props.resources.reportModalMessage}

    ,\n reportSubmittedMessage:

    {props.resources.reportSubmittedMessage}

    ,\n radioButtons: radioPairs(props),\n error: (\n \n {props.resources.errorMessageText}\n \n )\n };\n};\n\nconst radioPairs = (props: IReportReviewModalProps) => {\n const pairs = [];\n for (const option of reportConcernDropdownOptions) {\n const inputId = `report-review-${option.key}`;\n const checked = option.key === props.reportedKey;\n pairs.push(\n
    \n \n \n
    \n );\n }\n\n return
    {pairs}
    ;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getRnrAuthEndpointId, getRnrPartnerId } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport classNames from 'classnames';\nimport { GetUserReviewInput } from '../actions/inputs/get-user-review-input';\nimport { SubmitUserReviewInput } from '../actions/inputs/submit-user-review-input';\nimport submitUserReview from '../actions/submit-user-review';\n\nexport interface IReviewModalProps {\n userReview?: Review;\n product?: SimpleProduct;\n renderContextId: string;\n resources: IReviewModalResources;\n context: ICoreContext>;\n parentId: string;\n parentType: string;\n isOpen: boolean;\n rating: number;\n reviewTitle: string;\n reviewText: string;\n returnRef: React.RefObject | undefined;\n hasError: boolean;\n telemetryContent?: ITelemetryContent;\n onModalToggle(): void;\n onTitleChange(event: React.ChangeEvent): void;\n onTextChange(event: React.ChangeEvent): void;\n onRatingChange(value: number): void;\n onReviewComplete?(isSuccess: boolean): void;\n modalCSS?: string;\n}\n\nexport interface IReviewModalResources {\n selectRatingAriaLabel: string;\n selectRatingLabel: string;\n reviewTitleLabel: string;\n reviewTextLabel: string;\n privacyPolicyTitle: string;\n privacyPolicyTextFormat: string;\n writeReviewModalTitle: string;\n editReviewModalTitle: string;\n submitReviewButtonText: string;\n discardReviewButtonText: string;\n errorMessageText: string;\n reviewTitleAriaLabel?: string;\n reviewAriaLabel?: string;\n}\n\nexport interface IReviewModalViewProps {\n modal: INodeProps;\n modalHeader: React.ReactElement;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n rating: React.ReactElement;\n ratingLabel: React.ReactElement;\n titleInput: React.ReactElement;\n titleLabel: React.ReactElement;\n textInput: React.ReactElement;\n textLabel: React.ReactElement;\n privacyPolicyUrl: React.ReactElement;\n form: INodeProps;\n inputRow: INodeProps;\n error: React.ReactElement;\n}\n\n/**\n * On Click Submit.\n * @param props -Review Modal props.\n * @returns On submit.\n */\nconst onClickSubmit = (props: IReviewModalProps) => () => {\n onSubmit(props);\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const ReviewModal = (props: IReviewModalProps): IReviewModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SubmitReview);\n const submitButtonAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelButtonAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return {\n modal: {\n tag: Modal,\n className: props.modalCSS ? classNames(props.modalCSS, 'msc-modal-input-required') : 'ms-review-modal msc-modal-input-required',\n toggle: props.onModalToggle,\n applicationNode: 'renderPage',\n isOpen: props.isOpen,\n returnFocusRef: props.returnRef\n },\n modalHeader: modalHeaderNode(props),\n modalFooter: { tag: ModalFooter, className: 'ms-review-modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-review-modal-body' },\n cancelButton: (\n \n ),\n submitButton: (\n \n {props.resources.submitReviewButtonText}\n \n ),\n rating: ratingsInput(props),\n ratingLabel: ratingsLabel(props),\n titleInput: titleInput(props),\n titleLabel: titleLabel(props),\n textInput: textInput(props),\n textLabel: textLabel(props),\n privacyPolicyUrl: privacyPolicyLink(props),\n form: { tag: 'form', className: 'ms-review-modal-form', autoComplete: 'off' },\n inputRow: { tag: 'div', className: 'ms-review-modal-row', autoComplete: 'off' },\n error: (\n \n {props.resources.errorMessageText}\n \n )\n };\n};\n\nconst modalHeaderNode = (props: IReviewModalProps) => {\n return (\n \n {props.userReview && props.userReview.reviewId ? props.resources.editReviewModalTitle : props.resources.writeReviewModalTitle}\n \n );\n};\n\nconst submitDisabled = (props: IReviewModalProps) => {\n return !props.rating || !stripWhiteSpacesFromString(props.reviewText) || !stripWhiteSpacesFromString(props.reviewTitle);\n};\n\nconst ratingsInput = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst ratingsLabel = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst titleInput = (props: IReviewModalProps) => {\n const maxLength = props.context.app.config.reviewTitleMaxLength;\n\n return (\n \n );\n};\n\nconst titleLabel = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst reviewTextWidth: number = 50;\n\nconst textInput = (props: IReviewModalProps) => {\n const maxLength = props.context.app.config.reviewTextMaxLength;\n return (\n \n );\n};\n\nconst textLabel = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst privacyPolicyLink = (props: IReviewModalProps) => {\n const policyTextBlocks = props.resources.privacyPolicyTextFormat.split('{0}');\n const isSeparatorAtStart = props.resources.privacyPolicyTextFormat.startsWith('{0}');\n const isSeparatorAtEnd = props.resources.privacyPolicyTextFormat.endsWith('{0}');\n const privacyPolicyUrl = getUrlSync('rnrPrivacyPolicy', props.context.actionContext);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.PrivacyPolicy);\n const privacyPolicyAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n return (\n

    \n {isSeparatorAtStart ? '' : policyTextBlocks[0]}\n \n {props.resources.privacyPolicyTitle}\n \n {isSeparatorAtEnd ? '' : isSeparatorAtStart ? policyTextBlocks[0] : policyTextBlocks[1]}\n

    \n );\n};\n\nconst onSubmit = (props: IReviewModalProps): void => {\n if (props.product) {\n submitReview(\n props.product,\n props.reviewTitle,\n props.reviewText,\n props.rating,\n props.context,\n props.userReview,\n props.onReviewComplete\n );\n }\n};\n\n/**\n * This method strips content of extra white spaces.\n * @param text The text to be stripped of extra white spaces.\n */\nconst stripWhiteSpacesFromString = (text: string): string => {\n return text\n .replace(new RegExp('\\\\r?\\\\n|\\\\r+', 'g'), ' ')\n .replace(new RegExp('\\\\s+', 'g'), ' ')\n .trim();\n};\n\nexport const submitReview = (\n product: SimpleProduct,\n title: string,\n text: string,\n rating: number,\n context: ICoreContext,\n userReview?: Review,\n onReviewSubmission?: (isSuccessful: boolean) => void\n) => {\n const { request } = context;\n const { user } = request;\n if (user && request) {\n const input = new SubmitUserReviewInput(\n product.RecordId.toString(),\n getRnrPartnerId(context.actionContext),\n request.apiSettings.channelId.toString(),\n request.locale,\n {\n productName: product && product.Name,\n rating,\n reviewText: stripWhiteSpacesFromString(text),\n title: stripWhiteSpacesFromString(title),\n userEmail: user.emailAddress,\n userName: user.name\n },\n request.user.token,\n getRnrAuthEndpointId(context.actionContext)\n );\n\n submitUserReview(input, context.actionContext)\n .then(reviewId => {\n const review = reviewId\n ? {\n rating,\n title: stripWhiteSpacesFromString(title),\n reviewText: stripWhiteSpacesFromString(text),\n submittedDateTime: new Date(),\n helpfulPositive: userReview ? userReview.helpfulPositive : 0,\n helpfulNegative: userReview ? userReview.helpfulNegative : 0,\n reviewId,\n userName: request.user.firstName || request.user.name\n }\n : userReview;\n\n const getReviewInput = new GetUserReviewInput(input.productId!, input.tenantId, input.authorization, input.serviceEndpoint);\n context.actionContext.update(getReviewInput, review);\n\n if (onReviewSubmission) {\n onReviewSubmission(!!reviewId);\n }\n })\n .catch(() => {\n const productId = product.RecordId;\n context.telemetry.error(`Failed to submit review for product with recordId: ${productId}`);\n context.telemetry.debug(`Failed to submit review for product with recordId: ${productId}`);\n if (onReviewSubmission) {\n onReviewSubmission(false);\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 { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\nimport { ISearchViewProps } from './search';\n\nconst SearchView: React.FC = props => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n CategorySuggest,\n UlKeyword,\n UlProduct,\n UlCategory,\n form,\n autosuggestCategory,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n isLoadingAutoSuggest,\n isLoadingNode\n } = props;\n\n return (\n \n {label}\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\n \n {searchText && searchText.length > 0 ? {AutoSuggestAriaLabelText} : ''}\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword, isLoadingAutoSuggest, isLoadingNode)}\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct, isLoadingAutoSuggest, isLoadingNode)}\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory, isLoadingAutoSuggest, isLoadingNode)}\n \n \n );\n};\n\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\n return (\n \n \n {form.input}\n {form.cancelBtn}\n {form.submitBtn}\n \n \n );\n};\n\nconst _renderKeywordSuggestions = (\n KeywordSuggest: INodeProps,\n UlKeyword: INodeProps,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n keywordSuggestions && (\n \n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n \n \n )\n );\n};\n\nconst _renderProductSuggestions = (\n ProductSuggest: INodeProps,\n UlProduct: INodeProps,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n productSuggestions && (\n \n \n {productSuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n \n \n {item.thumbnail}\n {item.text}\n {item.price}\n \n \n );\n })}\n \n \n )\n );\n};\n\nconst _renderCategorySuggestions = (\n CategorySuggest: INodeProps,\n UlCategory: INodeProps,\n categorySuggestions?: ISearchCategoryViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n categorySuggestions && (\n \n \n {categorySuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n categorySuggestions.text.map(text => {\n return text;\n })}\n \n \n )\n );\n};\n\nexport default SearchView;\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface IPromoBannerCloseButton {\r\n closeButtonAriaLabel?: string;\r\n label?: string;\r\n telemetryContent?: ITelemetryContent;\r\n onClose(): void;\r\n\r\n}\r\n\r\nexport const PromoBannerCloseButton: React.FC = ({ closeButtonAriaLabel, label, telemetryContent, onClose }) => {\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PromoBannerClose);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n return (\r\n \r\n );\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { ILinksData } from '../citta-promo-banner.props.autogenerated';\r\n\r\nexport interface IPromoBannerLinks {\r\n links: ILinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n telemetryContent: ITelemetryContent;\r\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\r\n}\r\n\r\nexport const PromoBannerLinks: React.FC = ({ links, requestContext, onTextChange, telemetryContent }) => {\r\n const editableLinks = _mapEditableLinks(links, telemetryContent);\r\n return(\r\n \r\n {editableLinks && editableLinks.length ?\r\n \r\n : null\r\n }\r\n \r\n );\r\n};\r\n\r\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent: ITelemetryContent): Msdyn365.ILinksData[] | null => {\r\n if(!linkdata || linkdata.length === 0) {\r\n return null;\r\n }\r\n const editableLinks: Msdyn365.ILinksData[] = [];\r\n linkdata.forEach((link,index) => {\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\r\n const linkText = link.linkText ? link.linkText : '';\r\n payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'ms-promo-banner__link',\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'button',\r\n additionalProperties: attributes,\r\n onClick: onTelemetryClick(telemetryContent, payLoad, linkText)\r\n };\r\n editableLinks.push(editableLink);\r\n });\r\n\r\n return editableLinks;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport interface IPromoBannerText {\r\n text: string;\r\n requestContext: Msdyn365.IRequestContext;\r\n onTextChange(event: Msdyn365.ContentEditableEvent): void;\r\n}\r\n\r\nexport const PromoBannerText: React.FC = ({ text, onTextChange, requestContext }) => {\r\n return(\r\n \r\n );\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { Carousel } from '@msdyn365-commerce/components';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { PromoBannerCloseButton, PromoBannerLinks, PromoBannerText } from './components';\r\nimport { IBannerMessagesData, ICittaPromoBannerProps } from './citta-promo-banner.props.autogenerated';\r\n\r\nexport interface IPromoBannerState {\r\n animating: boolean;\r\n isVisible: boolean;\r\n activeIndex: number;\r\n}\r\n\r\nexport interface IPromoBannerViewProps extends ICittaPromoBannerProps<{}>, IPromoBannerState {\r\n promoBannerProps: IModuleProps;\r\n contentProps: INodeProps ;\r\n bannerMessages: IBannerMessagesData[];\r\n PromoBannerTextProps: INodeProps;\r\n PromoBannerLinksProps: INodeProps;\r\n CarouselProps: INodeProps;\r\n closeButton?: React.ReactNode;\r\n className: string;\r\n onDismiss(): void;\r\n handleText(): void;\r\n handleLinks(): void;\r\n}\r\n\r\n/**\r\n *\r\n * PromoBannerModule component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass PromoBanner extends React.PureComponent, IPromoBannerState> {\r\n public state: IPromoBannerState = {\r\n animating: false,\r\n isVisible: true,\r\n activeIndex: 0\r\n };\r\n\r\n private telemetryContent: ITelemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n\r\n public render(): JSX.Element | null {\r\n const { bannerMessages, dismissEnabled, interval, hideFlipper, autoplay, className= '' } = this.props.config;\r\n const { closeButtonAriaLabel, closeButtonLabel } = this.props.resources;\r\n const { isVisible, activeIndex } = this.state;\r\n\r\n if (!isVisible) {\r\n this.props.context.telemetry.error('Promo banner content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n const viewProps = {\r\n // Context for telemetry and raw data for C1 to do customization\r\n // Including computed data, state data and methods\r\n ...this.props,\r\n className: classnames('ms-promo-banner', className),\r\n isVisible, // state data\r\n onDismiss: this._onDismiss, // methods\r\n handleLinks: this.handleLinkClick,\r\n handleText: this.handleTextChange,\r\n\r\n promoBannerProps: { className: classnames('ms-promo-banner', className), moduleProps: this.props, role: 'banner' },\r\n PromoBannerTextProps: {\r\n tag: PromoBannerText\r\n },\r\n PromoBannerLinksProps: {\r\n tag: PromoBannerLinks,\r\n telemetryContent: this.telemetryContent\r\n },\r\n contentProps: { className: 'ms-promo-banner__content' },\r\n bannerMessages: bannerMessages,\r\n activeIndex: activeIndex,\r\n CarouselProps: {\r\n tag: Carousel,\r\n className: 'ms-promo-banner__carousel',\r\n activeIndex: activeIndex,\r\n next: this._next,\r\n previous: this._previous,\r\n onIndicatorsClickHandler: this._goToIndex,\r\n hideIndicator: hideFlipper,\r\n interval: interval,\r\n hideFlipper: hideFlipper,\r\n autoplay: autoplay\r\n },\r\n closeButton: dismissEnabled && \r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => {\r\n if(this.props.config.bannerMessages && this.props.config.bannerMessages[0]) {\r\n this.props.config.bannerMessages[0].text = event.target.value;\r\n }\r\n }\r\n\r\n public handleLinkClick = () => {\r\n // console.log('mlmlm')\r\n //const links = this.props.config.bannerMessages[1].links;\r\n // console.log('links', links)\r\n }\r\n\r\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\r\n if(this.props.config.bannerMessages && this.props.config.bannerMessages[1]) {\r\n const links = this.props.config.bannerMessages[1].links;\r\n if(links) {\r\n links[linkIndex].linkText = event.target.value;\r\n }\r\n }\r\n };\r\n\r\n private _next = (): void => {\r\n const nextIndex = this._isLastItem() ? 0 : this.state.activeIndex + 1;\r\n this._goToIndex(nextIndex);\r\n };\r\n\r\n private _previous = (): void => {\r\n const nextIndex = this._isFirstItem() ? (this.props.config.bannerMessages ? this.props.config.bannerMessages.length - 1 : 0) : this.state.activeIndex - 1;\r\n this._goToIndex(nextIndex);\r\n };\r\n\r\n private _goToIndex = (index: number): void => {\r\n if (this.state.animating) {\r\n return;\r\n }\r\n this.setState({ activeIndex: index });\r\n };\r\n\r\n private _isFirstItem = () => this.state.activeIndex === 0;\r\n\r\n private _isLastItem = () => this.props.config.bannerMessages && this.state.activeIndex === this.props.config.bannerMessages.length - 1;\r\n\r\n private _onDismiss = (): void => {\r\n this.setState({ isVisible: false });\r\n };\r\n}\r\n\r\nexport default PromoBanner;\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 msdyn365Commerce from '@msdyn365-commerce/core';\r\nimport { ICheckoutViewProps, IEmailDelivery, ILineItem, ILineItemDeliveryGroup, ILineItems, IPickUpAtStore } from '@msdyn365-commerce-modules/checkout';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport * as MsDyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { ICheckoutProps } from '../definition-extensions/checkout.ext.props.autogenerated';\r\n\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => (\r\n \r\n {label}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n {emailDelivery && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip, itemsForEmail }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForEmail && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nfunction _renderTotalSavings(props: ICheckoutViewProps): JSX.Element | null {\r\n\r\n const DiscountAmount = props.data.checkout.result?.checkoutCart.cart.DiscountAmount;\r\n return (\r\n

    \r\n {DiscountAmount && DiscountAmount > 0 ? (\r\n <>\r\n {props.resources.totalSavingsLabel}\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\n\r\nconst _renderOrderSummarylines = (props: ICheckoutViewProps & ICheckoutProps<{}>): JSX.Element | null => {\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n const {orderSummary } = props;\r\n if (!orderSummary) {\r\n return null;\r\n }\r\n return (\r\n
    \r\n {orderSummary.heading}\r\n
    \r\n {orderSummary.lines && (\r\n <>\r\n {isB2B ? orderSummary.lines.subtotal : _renderSubTotal(props)}\r\n {isB2B ? null : orderSummary.lines.totalDiscounts}\r\n {_renderShippingInclTaxes(props)}\r\n {_renderOtherCharges(props)}\r\n {/*hide on us*/}\r\n {props.config.hideTaxLine ? null : orderSummary.lines.tax}\r\n {_renderTotalOrder(props)}\r\n {orderSummary.lines.loyalty}\r\n {orderSummary.lines.giftCard}\r\n {isB2B ? null : orderSummary.lines.orderTotal}\r\n {isB2B? null : _renderTotalSavings(props)}\r\n \r\n )}\r\n
    \r\n {_renderFreeShippingMessage(props)}\r\n {_getCheckoutSummaryText(props)}\r\n
    \r\n );\r\n};\r\n\r\nfunction _renderOtherCharges(props: ICheckoutViewProps & ICheckoutProps<{}>): React.ReactNode | null{\r\n const chargeLines = props.data.checkout.result?.checkoutCart.cart.ChargeLines;\r\n let chargeAmountInclTax = 0;\r\n if(chargeLines) {\r\n chargeLines.forEach(chargeLine => {\r\n if (!chargeLine.IsShipping) {\r\n const chargeAmountInclTaxLocal = chargeLine.GrossAmount ? chargeLine.GrossAmount : 0;\r\n chargeAmountInclTax += chargeAmountInclTaxLocal;\r\n }\r\n });\r\n }\r\n if (chargeAmountInclTax == 0) {\r\n return props.orderSummary?.lines?.otherCharge;\r\n }\r\n\r\n return (\r\n

    \r\n {chargeAmountInclTax && chargeAmountInclTax > 0 ? (\r\n <>\r\n {props.resources.otherCharges}\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\n\r\nfunction _renderShippingInclTaxes(props: ICheckoutViewProps & ICheckoutProps<{}>): React.ReactNode | null{\r\n const chargeLines = props.data.checkout.result?.checkoutCart.cart.ChargeLines;\r\n let chargeAmountInclTax = 0;\r\n if(chargeLines) {\r\n chargeLines.forEach(chargeLine => {\r\n if (chargeLine.IsShipping) {\r\n const chargeAmountInclTaxLocal = chargeLine.GrossAmount ? chargeLine.GrossAmount : 0;\r\n chargeAmountInclTax += chargeAmountInclTaxLocal;\r\n }\r\n });\r\n }\r\n if (chargeAmountInclTax == 0) {\r\n return props.orderSummary?.lines?.shipping;\r\n }\r\n\r\n return (\r\n

    \r\n {chargeAmountInclTax && chargeAmountInclTax > 0 ? (\r\n <>\r\n {props.resources.shippingLabel}\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\n\r\nfunction _renderFreeShippingMessage(props: ICheckoutViewProps & ICheckoutProps<{}>): JSX.Element | null {\r\n const shippingAmount = props.data.checkout.result?.checkoutCart.cart.DeliveryModeChargeAmount || 0;\r\n const OrderSubTotal = (props.data.checkout.result?.checkoutCart.cart.AmountDue || 0) - shippingAmount;\r\n \r\n const freeShippingAmount = props.config.freeShippingAmount;\r\n\r\n if (!freeShippingAmount || !OrderSubTotal || OrderSubTotal >= freeShippingAmount) {\r\n return null;\r\n }\r\n return
    \r\n Spend an additional ${Math.ceil(freeShippingAmount - OrderSubTotal)} to get FREE SHIPPING\r\n
    \r\n}\r\n\r\nfunction _renderSubTotal(props: ICheckoutViewProps): JSX.Element | null {\r\n var subtotal=0;\r\n props.data.checkout.result?.checkoutCart.cart.CartLines?.forEach((item)=>{\r\n subtotal += item.Price! * item.Quantity!;\r\n });\r\n const OrderSubTotal = subtotal;//props.data.checkout.result?.checkoutCart.cart.NetPrice;\r\n return (\r\n

    \r\n {OrderSubTotal && OrderSubTotal > 0 ? (\r\n <>\r\n {props.resources.subTotalLabel}\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\nfunction _renderTotalOrder(props: ICheckoutViewProps): JSX.Element | null {\r\n\r\n const OrderTotal = props.data.checkout.result?.checkoutCart.cart.TotalAmount;\r\n return (\r\n

    \r\n {OrderTotal && OrderTotal > 0 ? (\r\n <>\r\n {props.resources.totalAmountLabel}\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\nconst _getCheckoutSummaryText = (props: ICheckoutViewProps & ICheckoutProps<{}>): React.ReactNode | undefined => {\r\n const { paragraph } = props.config;\r\n\r\n return (\r\n paragraph && (\r\n \r\n )\r\n );\r\n};\r\nconst CheckoutView: React.FC> = 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 termsAndConditionsProps,\r\n orderConfirmation,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n lineItems,\r\n placeOrderButton,\r\n termsAndConditions,\r\n keepShoppingButton\r\n } = props;\r\n\r\n let isBusy = false;\r\n if(msdyn365Commerce.isBrowser) {\r\n const url: string = decodeURI(window.location.search);\r\n const urlParams: URLSearchParams = new URLSearchParams(url);\r\n if (urlParams.get('paymentMethod') === 'AP' && urlParams.has('orderToken')) {\r\n const orderToken = urlParams.get('orderToken');\r\n const afterpayStatus = urlParams.get('status') || 'FAILURE';\r\n\r\n if (afterpayStatus === 'SUCCESS' && orderToken) {\r\n isBusy = true;\r\n }\r\n }\r\n }\r\n\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n function _renderPlaceOrderCopy(): JSX.Element | null {\r\n return (\r\n
    \r\n By clicking Place order you agree to your signed terms of business, please contact your account manager for further information.\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n {!hasSalesOrder && {title}}\r\n {!hasSalesOrder &&\r\n \r\n {loading}\r\n {\r\n isBusy ? (\r\n
    \r\n
    \r\n
    \r\n ) : null\r\n }\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {termsAndConditions}\r\n \r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n {isB2B? _renderPlaceOrderCopy() : null}\r\n \r\n \r\n {_renderOrderSummarylines(props)}\r\n \r\n \r\n {termsAndConditions}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n {lineItems && }\r\n \r\n \r\n {termsAndConditions}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n }\r\n {hasSalesOrder && orderConfirmation}\r\n \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 ReviewsList from './reviews-list';\nimport ReviewsListView from './reviews-list.view';\n\nexport * from './components/components';\nexport * from './components/report-review-modal';\nexport * from './components/review-card';\nexport * from './reviews-list';\nexport * from './reviews-list.data';\nexport * from './reviews-list.props.autogenerated';\nexport * from './reviews-list.view';\n\nexport { ReviewsList, ReviewsListView };\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport const SignInMessage: React.FC<{ text: string }> = (props: { text: string }) => {\n return

    {props.text}

    ;\n};\n\nexport const SignInButton: React.FC<{ text: string; href: string; ariaLabel: string; telemetryContent?: ITelemetryContent }> = (props: {\n text: string;\n href: string;\n ariaLabel: string;\n telemetryContent?: ITelemetryContent;\n}) => {\n const { text, href, ariaLabel, telemetryContent } = props;\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {text}\n \n );\n};\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n telemetryContent?: ITelemetryContent;\n onClick(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, telemetryContent, id } = props;\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.WriteReview);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\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 { Review } from '@msdyn365-commerce/commerce-entities';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { IReviewModalViewProps, ReviewModal, submitReview } from '../../common/review-modal';\nimport { TOGGLE_REVIEW_MODAL_BUTTON_ID } from '../../common/rnrInterface';\nimport { ModalToggle, SignInButton, SignInMessage } from './components/components';\nimport { IWriteReviewData } from './write-review.data';\nimport { IWriteReviewProps } from './write-review.props.autogenerated';\n\nexport interface IWriteReviewCallbacks {\n toggleModal(): void;\n updateReviewTitle(title: string): void;\n updateReviewText(text: string): void;\n updateRating(rating: number): void;\n onReviewSubmitted(isSuccessful: boolean): void;\n submitReview(\n product: SimpleProduct,\n title: string,\n text: string,\n rating: number,\n context: Msdyn365.ICoreContext,\n userReview?: Review,\n onReviewSubmission?: (isSuccessful: boolean) => void\n ): void;\n}\n\nexport interface IWriteReviewState {\n rating: number;\n reviewTitle: string;\n reviewText: string;\n isReviewModalOpen: boolean;\n hasReviewError: boolean;\n}\n\nexport interface IWriteReviewViewProps extends IWriteReviewProps {\n state: IWriteReviewState;\n className: string;\n callbacks: IWriteReviewCallbacks;\n signInMessage: React.ReactNode;\n signInButton: React.ReactNode;\n modalToggle: React.ReactNode;\n reviewModal: IReviewModalViewProps;\n moduleProps: IModuleProps;\n heading: React.ReactNode;\n}\n\n/**\n * This module is enables user's to leave ratings and reviews on a specific product\n * WriteReview module.\n * @extends {React.PureComponent>}\n */\nclass WriteReview extends React.PureComponent, IWriteReviewState> {\n private readonly _modalToggleRef: React.RefObject | undefined;\n\n private readonly telemetryContent: ITelemetryContent;\n private readonly writeReviewCallbacks: IWriteReviewCallbacks = {\n // @ts-expect-error\n toggleModal: this._toggleReviewModal,\n updateReviewTitle: (title: string): void => {\n this.setState({ reviewTitle: title });\n },\n updateReviewText: (text: string): void => {\n this.setState({ reviewText: text });\n },\n updateRating: (rating: number): void => {\n this.setState({ rating });\n },\n onReviewSubmitted: (isSuccessful: boolean): void => {\n if (isSuccessful) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({ hasReviewError: true });\n }\n },\n submitReview\n };\n public constructor(props: IWriteReviewProps) {\n super(props);\n const {\n userReview: { result: userReview }\n } = this.props.data;\n this._toggleReviewModal = this._toggleReviewModal.bind(this);\n this._modalToggleRef = React.createRef();\n const rating = userReview ? userReview.rating : 0;\n const reviewTitle = userReview ? userReview.title : '';\n const reviewText = userReview ? userReview.reviewText : '';\n\n this.state = {\n isReviewModalOpen: false,\n rating,\n reviewTitle,\n reviewText,\n hasReviewError: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element {\n const { resources } = this.props;\n const { className, heading } = this.props.config;\n const {\n product: { result: product },\n userReview: { result: userReview }\n } = this.props.data;\n\n const userInfo = this.props.context && this.props.context.request && this.props.context.request.user;\n const completeClass = classnames('ms-write-review', 'msc-modal-input-required', className);\n const viewProps = {\n ...this.props,\n state: this.state,\n className: completeClass,\n moduleProps: {\n moduleProps: this.props,\n className: completeClass,\n id: null\n },\n callbacks: this.writeReviewCallbacks,\n signInMessage: ,\n signInButton: (\n \n ),\n modalToggle: !Msdyn365.isOboRequest(this.props.context.request) && product && (\n \n ),\n reviewModal: this._buildUserReviewModal(),\n heading: heading && heading.text && (\n \n )\n } as IWriteReviewViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n private readonly _onTitleChange = (event: React.ChangeEvent): void => {\n this.writeReviewCallbacks.updateReviewTitle(event.target.value);\n };\n\n private readonly _onTextChange = (event: React.ChangeEvent): void => {\n this.writeReviewCallbacks.updateReviewText(event.target.value);\n };\n\n private readonly _onRatingChange = (value: number): void => {\n this.writeReviewCallbacks.updateRating(value);\n };\n\n private readonly _toggleReviewModal = (): void => {\n const userReview = this.props.data.userReview.result;\n if (this.state.isReviewModalOpen) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else if (userReview) {\n this.setState({\n isReviewModalOpen: true,\n reviewText: userReview.reviewText,\n reviewTitle: userReview.title,\n rating: userReview.rating\n });\n } else {\n this.setState({\n isReviewModalOpen: true,\n reviewText: '',\n reviewTitle: '',\n rating: 0\n });\n }\n };\n\n /**\n * This method builds the user review modal.\n * @param config The module config.\n */\n private _buildUserReviewModal(): IReviewModalViewProps {\n return ReviewModal({\n userReview: this.props.data.userReview.result,\n product: this.props.data.product.result,\n resources: { ...this.props.resources },\n context: this.props.context,\n parentId: this.props.id,\n parentType: this.props.typeName,\n isOpen: this.state.isReviewModalOpen,\n rating: this.state.rating,\n reviewTitle: this.state.reviewTitle,\n reviewText: this.state.reviewText,\n onModalToggle: this._toggleReviewModal,\n onTitleChange: this._onTitleChange,\n onTextChange: this._onTextChange,\n onRatingChange: this._onRatingChange,\n onReviewComplete: this.writeReviewCallbacks.onReviewSubmitted,\n renderContextId: 'writeReview',\n returnRef: this._modalToggleRef,\n hasError: this.state.hasReviewError,\n telemetryContent: this.telemetryContent\n });\n }\n}\n\nexport default WriteReview;\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\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { ISearchViewProps } from './citta-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n searchLabel,\r\n searchLabelText,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n SearchBtn,\r\n FormWrapper,\r\n BtnWrapper\r\n } = props;\r\n\r\n return (\r\n \r\n { /* @ts-ignore */}\r\n {_renderButton(form as ISearchFormViewProps, SearchBtn, BtnWrapper)}\r\n { /* @ts-ignore */}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper, searchLabel, searchLabelText)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderButton = (form: ISearchFormViewProps, SearchBtn: INodeProps, BtnWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.searchBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps, searchLabel: INodeProps, searchLabelText: string) => {\r\n return (\r\n \r\n \r\n {form.input}\r\n \r\n {form.cancelBtn}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent, RatingComponent } from '@msdyn365-commerce/components';\nimport {\n IComponent,\n IComponentProps,\n ICoreContext,\n IGridSettings,\n IImageData,\n IImageSettings,\n Image,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * IActiveProductProps interface.\n */\nexport interface IActiveProductProps extends IComponentProps<{ product?: ProductSearchResult }> {\n className?: string;\n imageSettings?: IImageSettings;\n savingsText?: string;\n freePriceText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n ratingAriaLabel?: string;\n}\n\n/**\n * IActiveProduct interface.\n */\nexport interface IActiveProduct extends IComponent {}\n\n/**\n * RenderDescription function.\n * @param description - Product description string.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderDescription(description?: string): JSX.Element | null {\n return

    {description}

    ;\n}\n\n/**\n * GetRatingAriaLabel function.\n * @param rating - Product rating number.\n * @param ratingAriaLabel - Product rating aria label.\n * @returns - Returns string.\n */\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n const numberTwo: number = 2;\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(numberTwo);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\n/**\n * RenderRating function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param ratingId - The rating id.\n * @param avgRating - The average rating.\n * @param totalRatings - The total ratings.\n * @param ariaLabel - The rating aria label.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderRating(\n context: ICoreContext,\n typeName: string,\n ratingId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() ?? undefined;\n const ratingAriaLabel = getRatingAriaLabel(avgRating, ariaLabel);\n\n return (\n \n );\n}\n\n/**\n * RenderPrice function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param productId - The product id.\n * @param basePrice - The base price of the product.\n * @param adjustedPrice - The adjusted price of the product.\n * @param savingsText - The savings text of the product.\n * @param freePriceText - The free price text.\n * @param originalPriceText - The original price text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n productId: string,\n basePrice?: number,\n adjustedPrice?: number,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string\n): JSX.Element | null {\n const price: ProductPrice = {\n BasePrice: basePrice,\n AdjustedPrice: adjustedPrice,\n CustomerContextualPrice: adjustedPrice\n };\n\n return (\n \n );\n}\n\n/**\n * RenderProductPlacementImage function.\n * @param requestContext - RequestContext.\n * @param imageSettings - The product image settings.\n * @param gridSettings - The viewport gird settings.\n * @param imageUrl - The product image url.\n * @param altText - The product image alt text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderProductPlacementImage(\n requestContext: IRequestContext,\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const imgData: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return ;\n}\n\n/**\n * ActiveProduct constant.\n * @param props - The active product props.\n * @param props.data - The product search result data.\n * @param props.context - The core context.\n * @param props.imageSettings - The prodcut image settings.\n * @param props.savingsText - The product savings text.\n * @param props.freePriceText - The free price text.\n * @param props.originalPriceText - The original price text.\n * @param props.ratingAriaLabel - The product rating aria label.\n * @param props.typeName - The type name of the module.\n * @param props.id - The id of the product.\n * @returns - Returns JSX.Element | null.\n */\nexport const ActiveProductComponent: React.FC = ({\n data,\n context,\n imageSettings,\n savingsText,\n freePriceText,\n originalPriceText,\n ratingAriaLabel,\n typeName,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Do not need naming convention check for library prameters\n id\n}) => {\n const product = data.product;\n if (!product) {\n return null;\n }\n\n return (\n <>\n
    \n
    \n {renderProductPlacementImage(\n context.actionContext.requestContext,\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name\n )}\n
    \n
    \n

    {product.Name}

    \n {renderPrice(context, typeName, id, product.BasePrice, product.Price, savingsText, freePriceText, originalPriceText)}\n {renderDescription(product.Description)}\n {!context.app.config.hideRating &&\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\n
    \n
    \n \n );\n};\n\nexport default ActiveProductComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * ILinksData: Interface for\n * Additional content.\n */\ninterface ILinksData {\n linkText?: string;\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n isOpenInNewTab?: boolean;\n}\n\n/**\n * IAdditionalContentData: Interface for\n * Active content.\n */\ninterface IAdditionalContentData {\n heading?: string;\n subtext?: string;\n links?: ILinksData[];\n}\n\n/**\n * IActiveImageAdditionalContentProps: Interface for\n * Active Image Additional Content Component props.\n */\nexport interface IActiveImageAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData | undefined;\n handleAdditionalTextChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IActiveImageAdditionalContentViewProps: Interface for\n * Active Image Additional Content view props.\n */\nexport interface IActiveImageAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Active Image Additional content component props.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Active Image Additional content component props.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Active Image Additional content component props.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IActiveImageAdditionalContentProps, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'msc-active-image__details__additional-content__cta__links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.isOpenInNewTab,\n role: 'button'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Active Image additonal content item props.\n * @param props - Active Image Additional content component props.\n * @returns IActiveImageAdditionalContentItemViewProps.\n */\nconst assembleNode = (item: IAdditionalContentData, props: IActiveImageAdditionalContentProps): IActiveImageAdditionalContentViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, index);\n });\n\n return {\n additionalContentNode: { className: 'msc-active-image__details__additional-content' },\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentContainer: { className: 'msc-active-image__details__additional-content__container' },\n additionalContentItemLinks: { className: 'msc-active-image__details__additional__content__cta' }\n };\n};\n\n/**\n * ActiveImageAdditionalContent component.\n * @param props - Active Image Additional content component props.\n * @returns Active Image Additional content view props.\n */\nexport const activeImageAdditionalContent = (\n props: IActiveImageAdditionalContentProps\n): IActiveImageAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n return assembleNode(additionalContent, props);\n};\n\nexport default activeImageAdditionalContent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport React from 'react';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IRgbColor\n * @description - The IRgbColor interface contract.\n */\nexport interface IRgbColor {\n rValue: number;\n gValue: number;\n bValue: number;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IArea {\n areaId: string;\n coords: number[];\n href?: string;\n center?: number[];\n primaryImageUrl?: string;\n productUrl: string;\n productSearchResult?: ProductSearchResult;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IAreaMap {\n name: string;\n areas: IArea[];\n}\n\n/**\n * @enum CanvasCalculations\n * @description - The canvas calculations enum.\n */\nexport enum CanvasCalculations {\n defaultWidth = 0,\n defaultHeight = 0,\n defaultPositionX = 0,\n defaultPositionY = 0,\n defaultScale = 1,\n halfDivisor = 2,\n doubleMultiplier = 2,\n buttonHeight = 30,\n buttonPadding = 30,\n paddingAdjustment = 3,\n expandAnimationStartWidth = 10,\n expandAnimationEndWidth = 40,\n collapseAnimationStartWidth = 40,\n collapseAnimationEndWidth = 8,\n expandRadius = 12,\n collapseRadius = 8,\n rotation = 1.57,\n startAngle = 0,\n endAngle = 7,\n clearMargin = 50,\n clearHeight = 100,\n clearWidth = 100,\n textFadeInStartValue = 0,\n textFadeOutStartValue = 0.5,\n textFadeInterval = 0.01\n}\n\n/**\n * @enum CanvasStyles\n * @description - The canvas styles enum.\n */\nexport enum CanvasStyles {\n color = '#FFFFFF',\n buttonTextClor = '#000000'\n}\n\n/**\n * @enum\n * @description - The canvas styles enum.\n */\nexport interface IImageMapperResources {\n buttonText?: string;\n altText?: string;\n}\n\n/**\n * @interface IImageMapperProps\n * @description - The IImageMapperProps interface contract.\n */\nexport interface IImageMapperProps {\n imageData: IImageData;\n areaMap: IAreaMap;\n viewPort: string;\n requestContext: IRequestContext;\n color?: string;\n buttonTextClor?: string;\n width?: number;\n imgWidth?: number;\n activeImageRefs: React.RefObject;\n imageMapperResources?: IImageMapperResources;\n onLoad?(): void;\n onClick?(area: IArea, index: number, event: AreaEvent): void;\n onFocus?(area: IArea, index: number, event: AreaEvent): void;\n onMouseEnter?(area: IArea, index: number, event: AreaEvent): void;\n onMouseLeave?(area: IArea, index: number, event: AreaEvent): void;\n}\n\n/**\n * ImageMapper.\n */\nexport class ImageMapper extends React.Component {\n private readonly _backgroundImage: React.RefObject;\n\n private readonly _container: React.RefObject;\n\n private readonly _canvas: React.RefObject;\n\n private _isDesktopViewPort: boolean = false;\n\n private _context: CanvasRenderingContext2D | null | undefined = null;\n\n public constructor(props: IImageMapperProps) {\n super(props);\n this._backgroundImage = React.createRef();\n this._container = React.createRef();\n this._canvas = React.createRef();\n }\n\n /**\n * ComponentDidMount method.\n */\n public componentDidMount(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n this.renderAreas();\n this._context = null;\n }\n\n /**\n * ComponentDidUpdate method.\n */\n public componentDidUpdate(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n }\n\n /**\n * ShouldComponentUpdate method.\n * @param nextProps - Next props.\n * @returns Returns boolean.\n */\n public shouldComponentUpdate(nextProps: IImageMapperProps): boolean {\n let shouldRender = false;\n if (nextProps !== this.props) {\n shouldRender = true;\n }\n return shouldRender;\n }\n\n /**\n * GetActiveImageWidth method - Gets the active image width.\n * @returns Returns number | undefined.\n */\n public getActiveImageWidth = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return undefined;\n };\n\n /**\n * GetActiveImageHeight method - Gets the active image height.\n * @returns Returns number | undefined.\n */\n public getActiveImageHeight = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return undefined;\n };\n\n /**\n * ConvertHexToRgb method - This method takes color in HEX format and returns IRgbColor color object.\n * @param hexColor -The color hex value.\n * @returns -Returns IRgbColor object.\n */\n public convertHexToRgb = (hexColor: string): IRgbColor => {\n // RegEx used to execute the conversion of the hex color to rgb value.\n const regEx = new RegExp('^#?([a-f\\\\d]{2})([a-f\\\\d]{2})([a-f\\\\d]{2})$', 'u');\n\n // RegEx.exec method executes a search for a match in a specified string. Returns a result array, or null.\n const result = regEx.exec(hexColor);\n const defaultValue = 0;\n return result\n ? {\n rValue: Number.parseInt(result[1], 16),\n gValue: Number.parseInt(result[2], 16),\n bValue: Number.parseInt(result[3], 16)\n }\n : {\n rValue: defaultValue,\n gValue: defaultValue,\n bValue: defaultValue\n };\n };\n\n /**\n * ApplyFadingTransition method - Applys fading transition to button text.\n * @param text -The button text.\n * @param coords -The coordinates.\n * @param rgbColor -The RGB color object.\n * @param alpha -The alpha value of the button text.\n */\n public applyFadingTransition = (text: string, coords: number[], rgbColor: IRgbColor, alpha: number): void => {\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n context.fillStyle = `rgba(${rgbColor.rValue}, ${rgbColor.gValue}, ${rgbColor.bValue}, ${alpha} )`;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * Draw button method - Draws button and contains fixed hight, padding values.\n * @param text -The button text.\n * @param coords -The coordinates.\n */\n public drawButton = (text: string, coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonHeight = CanvasCalculations.buttonHeight;\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n const buttonPositionX = coords[0] - buttonWidth / halfDivisor;\n const buttonPositionY = coords[1] - buttonHeight / halfDivisor;\n const arcsize = buttonHeight / halfDivisor;\n\n context.beginPath();\n context.moveTo(buttonPositionX + arcsize, buttonPositionY);\n context.lineTo(buttonPositionX + buttonWidth - arcsize, buttonPositionY);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY,\n buttonPositionX + buttonWidth,\n buttonPositionY + arcsize,\n arcsize\n );\n context.lineTo(buttonPositionX + buttonWidth, buttonPositionY + buttonHeight - arcsize);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY + buttonHeight,\n buttonPositionX + buttonWidth - arcsize,\n buttonPositionY + buttonHeight,\n arcsize\n );\n context.lineTo(buttonPositionX + arcsize, buttonPositionY + buttonHeight);\n context.arcTo(buttonPositionX, buttonPositionY + buttonHeight, buttonPositionX, buttonPositionY - arcsize, arcsize);\n context.lineTo(buttonPositionX, buttonPositionY + arcsize);\n context.arcTo(buttonPositionX, buttonPositionY, buttonPositionX + arcsize, buttonPositionY, arcsize);\n context.lineTo(buttonPositionX + arcsize, buttonPositionY);\n context.stroke();\n context.closePath();\n context.fillStyle = color;\n context.fill();\n context.fillStyle = buttonTextClor;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * ExpandAnimation method - Shows expand animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public expandAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.expandAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.expandAnimationEndWidth;\n const radius = CanvasCalculations.expandRadius;\n const rotation = CanvasCalculations.rotation;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeInValue = CanvasCalculations.textFadeInStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Reders expand animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n context.fillStyle = color;\n if (buttonText) {\n if (animationStartWidth < animationEndWidth) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeInValue);\n textFadeInValue += CanvasCalculations.textFadeInterval;\n animationStartWidth++;\n } else {\n this.drawButton(buttonText, [pointPositionX, pointPositionY]);\n }\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * CollapseAnimation method - Shows collapse animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public collapseAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.collapseAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.collapseAnimationEndWidth;\n const rotation = CanvasCalculations.rotation;\n const clearMargin = CanvasCalculations.clearMargin;\n const clearHeight = CanvasCalculations.clearHeight;\n const clearWidth = CanvasCalculations.clearWidth;\n const radius = CanvasCalculations.collapseRadius;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeOutValue = CanvasCalculations.textFadeOutStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Renders collapse animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.clearRect(pointPositionX - clearMargin, pointPositionY - clearMargin, clearWidth, clearHeight);\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n if (animationEndWidth < animationStartWidth && buttonText) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeOutValue);\n textFadeOutValue -= CanvasCalculations.textFadeInterval;\n animationStartWidth--;\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * DrawCircle method - Renders active points.\n * @param coords -Coordinates.\n */\n public drawCircle = (coords: number[]): void => {\n const { color = CanvasStyles.color, viewPort } = this.props;\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n const startAngle: number = CanvasCalculations.startAngle;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n const radius = viewPort === 'xs' || viewPort === 'sm' ? coords[2] * doubleMultiplier : coords[2];\n if (!context) {\n return;\n }\n context.fillStyle = color;\n context.beginPath();\n context.strokeStyle = color;\n context.arc(coords[0], coords[1], radius, startAngle, Math.PI * doubleMultiplier);\n context.closePath();\n context.stroke();\n context.fill();\n };\n\n /**\n * ScaleCoords method - To scale the active point coordinates based on the window size.\n * @param coords -Coordinates.\n * @returns -Returns number[].\n */\n public scaleCoords = (coords: number[]): number[] => {\n const { imgWidth } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultScale: number = CanvasCalculations.defaultScale;\n\n // Calculate scale based on current 'width' and the original 'imgWidth'\n const width = this.getActiveImageWidth();\n const scale = width && imgWidth && imgWidth > defaultWidth ? width / imgWidth : defaultScale;\n return coords.map(coord => coord * scale);\n };\n\n /**\n * RenderPrefilledAreas method - To render active points in case of events.\n */\n public renderPrefilledAreas = (): void => {\n const { areaMap } = this.props;\n areaMap.areas.map(area => {\n this.drawCircle(this.scaleCoords(area.coords));\n return null;\n });\n };\n\n /**\n * ComputeCenter method - To re-calculate the center of active point based on window size.\n * @param area -IArea.\n * @returns -Returns number[].\n */\n public computeCenter = (area: IArea): number[] => {\n const scaledCoords = this.scaleCoords(area.coords);\n return [scaledCoords[0], scaledCoords[1]];\n };\n\n /**\n * HandleHoverOn method - To handle mouse hover on event.\n * @param area -IArea.\n */\n public handleHoverOn = (area: IArea): void => {\n if (area.center && this._canvas.current) {\n this.drawCircle(this.scaleCoords(area.coords));\n this.expandAnimation(area.center);\n }\n };\n\n /**\n * HandleHoverOff method - To handle mouse hover off event.\n * @param area -IArea.\n */\n public handleHoverOff = (area: IArea): void => {\n if (this._canvas.current) {\n const context = this._canvas.current.getContext('2d') ?? this._context;\n const canvasPositionX: number = CanvasCalculations.defaultPositionX;\n const canvasPositionY: number = CanvasCalculations.defaultPositionY;\n\n if (!context) {\n return;\n }\n context.clearRect(canvasPositionX, canvasPositionY, this._canvas.current.width, this._canvas.current.height);\n this.renderPrefilledAreas();\n if (area.center) {\n this.collapseAnimation(area.center);\n }\n }\n };\n\n /**\n * Click method - Mouse click event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public click = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onClick } = this.props;\n if (onClick) {\n event.preventDefault();\n onClick(area, index, event);\n }\n };\n\n /**\n * HoverOn method - Mouse hover on event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOn = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseEnter } = this.props;\n this.handleHoverOn(area);\n if (onMouseEnter) {\n onMouseEnter(area, index, event);\n }\n };\n\n /**\n * HoverOff method - Mouse hover off event.\n * @param area - IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOff = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseLeave } = this.props;\n\n this.handleHoverOff(area);\n\n if (onMouseLeave) {\n onMouseLeave(area, index, event);\n }\n };\n\n /**\n * RenderAreas method - Renders active points at given coordinates.\n * @returns -Returns JSX.Element[].\n */\n public renderAreas = (): JSX.Element[] => {\n const { areaMap, viewPort } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText ? this.props.imageMapperResources.buttonText : '';\n const altText = this.props.imageMapperResources?.altText ? this.props.imageMapperResources.altText : '';\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n\n return areaMap.areas.map((area, index) => {\n const scaledCoords = this.scaleCoords(area.coords);\n const xsRadius = area.coords[2] * doubleMultiplier;\n if (viewPort === 'xs') {\n scaledCoords[2] = xsRadius;\n }\n const center = this.computeCenter(area);\n const extendedArea = { ...area, scaledCoords, center };\n const areaKey = `area-${index}`;\n const altTextWithProductName = altText\n .replace('{buttonText}', buttonText ? buttonText : '')\n .replace('{productName}', area.productSearchResult?.Name ? area.productSearchResult.Name : '');\n return (\n \n );\n });\n };\n\n /**\n * InitCanvas method - To render the canvas.\n */\n public initCanvas = (): void => {\n if (!this._canvas.current || !this._backgroundImage.current || !this._container.current) {\n return;\n }\n\n const { color, onLoad } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultHeight: number = CanvasCalculations.defaultHeight;\n\n const canvasWidth = this.getActiveImageWidth() ?? defaultWidth;\n const canvasHeight = this.getActiveImageHeight() ?? defaultHeight;\n\n this._canvas.current.width = canvasWidth;\n this._canvas.current.height = canvasHeight;\n this._container.current.style.width = `${canvasWidth}px`;\n\n const context = this._canvas.current.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.fillStyle = color ?? '';\n\n if (onLoad) {\n onLoad();\n }\n\n this.renderPrefilledAreas();\n };\n\n /**\n * Render method - To render the image mapper component with active image, canvas and active points.\n * @returns -Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const { imageData, areaMap, requestContext } = this.props;\n\n return (\n
    \n \n \n \n {this.renderAreas()}\n \n
    \n );\n }\n}\n\nexport default ImageMapper;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport {\n activeImageAdditionalContent,\n ActiveProductComponent,\n IActiveImageAdditionalContentViewProps,\n IArea,\n IAreaMap,\n IImageMapperProps,\n ImageMapper\n} from '../active-image-utilities';\nimport { IActiveImageData } from './active-image.data';\nimport { IActiveImageProps } from './active-image.props.autogenerated';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IActiveImageViewProps\n * @classdesc - The IActiveImageViewProps interface contract.\n */\nexport interface IActiveImageViewProps extends IActiveImageProps<{}>, IImageMapperProps {\n activePointContainer: IModuleProps;\n activePointDetailsContainer: INodeProps;\n imageMapper: React.ReactNode;\n overlay: React.ReactNode;\n productCard: React.ReactNode;\n title?: React.ReactNode;\n text?: React.ReactNode;\n links?: React.ReactNode;\n detailsContainer?: INodeProps;\n detailsContainerCta?: INodeProps;\n additionalContent?: IActiveImageAdditionalContentViewProps;\n productCardleftPosition: number;\n productCardtopPosition: number;\n handleAdditionalText?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalParagraph?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalLinkText?(event: MsDyn365.ContentEditableEvent): void;\n}\n\n/**\n * @interface IActiveImageLinksData\n * @classdesc - The IActiveImageLinksData interface contract.\n */\nexport interface IActiveImageLinksData {\n linkText?: string;\n linkUrl: MsDyn365.ILinkData;\n ariaLabel?: string;\n willOpenInNewTab?: boolean;\n}\n\n/**\n * @interface IActiveImageState\n * @classdesc - The IActiveImageState interface contract.\n */\ninterface IActiveImageState {\n clientWidth: number;\n area: IArea | null;\n viewport: string;\n overlayClass: string;\n}\n\n/**\n * @enum ActiveImageConstants\n * @description - The active image constants enum.\n */\nexport enum ActiveImageConstants {\n timeoutInterval = 200,\n enterKey = 'Enter',\n escKey = 'Escape'\n}\n\n/**\n *\n * ActiveImage class.\n * @extends {React.PureComponent & IImageMapperProps, IActiveImageState>}\n */\nexport class ActiveImage extends React.PureComponent & IImageMapperProps, IActiveImageState> {\n private readonly _telemetryContent: ITelemetryContent;\n\n private _isDesktopViewPort: boolean;\n\n private readonly _defaultProductCardWidth: number = 315;\n\n private readonly _defaultProdutCardHight: number = 490;\n\n private readonly _activePoints: IArea[] = [];\n\n private readonly _activeImageRefs: React.RefObject;\n\n private readonly _activeImageClass: string;\n\n private readonly _productCardDivRef: React.RefObject;\n\n public constructor(props: IActiveImageProps & IImageMapperProps) {\n super(props);\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this._activeImageClass = `msc-active-image-${this.getActiveImageId()}`;\n this.state = {\n clientWidth: 0,\n area: null,\n viewport,\n overlayClass: ''\n };\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n this._activeImageRefs = React.createRef();\n this._productCardDivRef = React.createRef();\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('resize', this.updateClientWidth);\n document.addEventListener('keydown', this.keyDown, false);\n document.addEventListener('mousedown', this._handleOutsideClick);\n }\n setTimeout(() => {\n this.updateClientWidth();\n }, ActiveImageConstants.timeoutInterval);\n\n if (MsDyn365.msdyn365Commerce.isBrowser && this._activeImageRefs.current) {\n const images: HTMLCollectionOf = this._activeImageRefs.current.getElementsByClassName(\n 'msc-thumbnail_image msc-active-image-img'\n );\n if (ArrayExtensions.hasElements(Array.from(images))) {\n images[0].removeAttribute('usemap');\n }\n }\n }\n\n /**\n * AddActivePoints method - To handle add Active Points.\n * @param area - IArea.\n * @param product - ProductSearchResult.\n * @param coords - Coords.\n * @param productUrl - String.\n */\n public addActivePoints = (area: IArea | undefined, product: ProductSearchResult, coords: number[], productUrl: string): void => {\n if (!area) {\n this._activePoints.push({\n areaId: product.RecordId.toString(),\n coords,\n primaryImageUrl: product.PrimaryImageUrl ?? '',\n productUrl,\n productSearchResult: product\n });\n }\n };\n\n /**\n * ComponentWillUnmount method.\n */\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('resize', this.updateClientWidth);\n document.removeEventListener('keydown', (this.keyDown as unknown) as EventListener, false);\n document.removeEventListener('mousedown', this._handleOutsideClick, false);\n }\n }\n\n /**\n * UpdateClientWidth method to update client width in state.\n */\n public updateClientWidth = (): void => {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this.setState({ clientWidth: this.getActiveImageWidth(), viewport });\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n };\n\n /**\n * Render method.\n * @returns - Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const viewProps: IActiveImageViewProps = {\n ...(this.props as IImageMapperProps & IActiveImageProps<{}>),\n activePointContainer: {\n moduleProps: this.props,\n className: classnames('msc-active-image', this._activeImageClass, this.props.config.className)\n },\n activePointDetailsContainer: {\n tag: 'div',\n className: classnames('msc-active-image-wrapper', this._activeImageClass, this.props.config.className),\n ref: this._activeImageRefs\n },\n imgWidth: this.props.config.canvasWidth,\n imageMapper: this.renderImageMapper(),\n overlay: this.renderOverlay(),\n productCard: this.renderProductCard(),\n productCardleftPosition: this.getProductCardPositionX(),\n productCardtopPosition: this.getProductCardPositionY(),\n title: this.renderActiveImageDetailsHeading(),\n text: this.renderActiveImageDetailsParagraph(),\n links: this.renderActiveImageDetailsLinks(),\n detailsContainer: { className: 'msc-active-image__details' },\n detailsContainerCta: { className: 'msc-active-image__details__cta' },\n additionalContent: activeImageAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n }),\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleAdditionalLinkText: this.handleAdditionalTextChange\n };\n\n return this.props.renderView(viewProps);\n }\n\n /**\n * RenderImageMapper method - To render image mapper.\n * @returns - Returns React.ReactNode | null.\n */\n public renderImageMapper = (): React.ReactNode | null => {\n const { config, context } = this.props;\n const defaultPosition: number = 0;\n const defaultLength: number = 0;\n const productResults = this.props.data.products.result;\n if (config.activePoints && productResults) {\n for (const product of productResults) {\n for (const configProduct of config.activePoints) {\n if (product.ItemId === configProduct.itemId) {\n const productUrl = getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined);\n const coords = [\n configProduct.xPosition ?? defaultPosition,\n configProduct.yPosition ?? defaultPosition,\n configProduct.radius ?? defaultPosition\n ];\n const area = this._activePoints.find(activePoint => JSON.stringify(activePoint.coords) === JSON.stringify(coords));\n this.addActivePoints(area, product, coords, productUrl);\n }\n }\n }\n }\n const mappedArea: IAreaMap = {\n name: `map-${this._activeImageClass}`,\n areas: this._activePoints.length > defaultLength ? this._activePoints : []\n };\n\n // If image is null, we want to render the placeholder SVG - by passing image data with empty src\n return (\n \n );\n };\n\n /**\n * EnterArea method - To handle mouse enter event.\n * @param area - Active point area.\n * @param index - Active point index.\n * @param event - Active point AreaEvent.\n */\n public enterArea = (area: IArea, index: number, event: AreaEvent): void => {\n this.setState({ area, overlayClass: 'msc-active-image-overlay' });\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(area, index, event);\n }\n if (event.type.toLocaleLowerCase() === 'click' && this._isDesktopViewPort) {\n window.open(area.productUrl, '_self');\n }\n };\n\n /**\n * LeaveArea method - To handle mouse leave event.\n */\n public leaveArea = (): void => {\n if (this._isDesktopViewPort) {\n this.resetState();\n }\n };\n\n /**\n * ResetState method - To reset the state for area and overlayclass.\n */\n public resetState = (): void => {\n this.setState({ area: null, overlayClass: '' });\n };\n\n /**\n * RenderProductComponent method - To render the product card with product information.\n * @returns - Returns React.ReactNode.\n */\n public renderProductComponent = (): React.ReactNode => {\n if (this.state.area?.productSearchResult) {\n const baseImageUrl: string = this.props.context.request.apiSettings.baseImageUrl;\n const imageUrl: string = this.state.area.primaryImageUrl ?? '';\n const primaryImageUrl: string = `${baseImageUrl}${imageUrl}`;\n const product: ProductSearchResult = this.state.area.productSearchResult;\n product.PrimaryImageUrl = primaryImageUrl;\n\n return (\n \n );\n }\n return React.Fragment;\n };\n\n /**\n * RenderProductCard method - To render product cards.\n * @returns - Returns React.ReactNode.\n */\n public renderProductCard = (): React.ReactNode => {\n const { area } = this.state;\n\n return (\n <>\n {area?.center && (\n
    \n
    \n {!this._isDesktopViewPort &&
    \n
    \n )}\n \n );\n };\n\n /**\n * RenderOverlay method - To render overlay for non desktop viewports.\n * @returns - Returns React.ReactNode.\n */\n public renderOverlay = (): React.ReactNode => {\n return <>{!this._isDesktopViewPort &&
    };\n };\n\n /**\n * GetProductCardPositionX method - Provides product card x position to the left or right of active point based on available space.\n * For xs, sm and md viewports it provides x position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionX = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsWidth = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.w\n : defaultImageSettings.viewports.lg?.w;\n const defaultPositionX: number = 0;\n const halfDivisor: number = 2;\n const productCardWidth: number = productImageSettingsWidth ? productImageSettingsWidth : this._defaultProductCardWidth;\n const { area, clientWidth, viewport } = this.state;\n const pointPositionX = area?.center?.[0] ?? clientWidth / halfDivisor;\n const leftAllignPosition = pointPositionX - productCardWidth - productCardWidth / halfDivisor;\n const rightAllignPosition = pointPositionX + productCardWidth / halfDivisor;\n let position: number = (clientWidth - productCardWidth) / halfDivisor;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n if (leftAllignPosition < defaultPositionX) {\n position = rightAllignPosition;\n } else {\n position = leftAllignPosition;\n }\n }\n return position;\n };\n\n /**\n * GetProductCardPositionY method - Provides product card y position in center with respect to active point.\n * For xs, sm and md viewports it provides y position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionY = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsHeight = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.h\n : defaultImageSettings.viewports.lg?.h;\n const halfDivisor: number = 2;\n const { area, viewport } = this.state;\n const produtCardHight: number = productImageSettingsHeight ? productImageSettingsHeight : this._defaultProdutCardHight;\n const pointPositionY = (this.getActiveImageHeight() - produtCardHight) / halfDivisor;\n let position: number = pointPositionY;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n position = (area?.center?.[1] ?? this.getActiveImageHeight() / halfDivisor) - produtCardHight / halfDivisor;\n }\n return position;\n };\n\n /**\n * GetDefaultImageSettings method.\n * @returns MsDyn365.IImageSettings.\n */\n public getDefaultImageSettings = (): MsDyn365.IImageSettings => {\n const defaultImageSettings: MsDyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n lg: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n xl: { q: 'w=275&h=275&m=6', w: 275, h: 275 }\n },\n lazyload: true\n };\n\n return defaultImageSettings;\n };\n\n /**\n * KeyDown method - To handle keydown event.\n * @param event - KeyboardEvent.\n */\n public keyDown = (event: KeyboardEvent): void => {\n if (event.key === ActiveImageConstants.enterKey) {\n const target: HTMLElement = event.target as HTMLElement;\n if (target.nodeName === 'AREA') {\n const area: HTMLAreaElement = target as HTMLAreaElement;\n if (area.href) {\n window.open(area.href, '_self');\n }\n }\n }\n if (event.key === ActiveImageConstants.escKey) {\n this.resetState();\n }\n };\n\n /**\n * GetActiveImageWidth method - To get active image width.\n * @returns Returns number.\n */\n public getActiveImageWidth = (): number => {\n const defaultWidth: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return defaultWidth;\n };\n\n /**\n * GetActiveImageHeight method - To get active image height.\n * @returns Returns number.\n */\n public getActiveImageHeight = (): number => {\n const defaultHeight: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return defaultHeight;\n };\n\n /**\n * HandleLinkTextChange method - To handle link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleTextChange method - To handle text change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * HandleParagraphChange method - To handle paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n /**\n * HandleAdditionalTextChange method - To handle additional text change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalTextChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.heading = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalLinkTextChange method - To handle additional link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n const additionalContent = this.props.config.additionalContent ?? {};\n if (additionalContent.links) {\n additionalContent.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalParagraphChange method - To handle additional paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalParagraphChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.subtext = event.target.value;\n }\n }\n\n /**\n * RenderActiveImageDetailsLinks method - To render active image details links.\n * @returns - React node.\n */\n public renderActiveImageDetailsLinks = (): React.ReactNode[] | undefined => {\n const { links } = this.props.config;\n const payLoad = getPayloadObject('click', this._telemetryContent, '');\n\n return links?.map((linkData: IActiveImageLinksData, index: number) => {\n payLoad.contentAction.etext = linkData.linkText;\n const attributes = getTelemetryAttributes(this._telemetryContent, payLoad);\n const linkId = index;\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: linkData.ariaLabel,\n className: 'msc-active-image__details__cta__link',\n linkText: linkData.linkText,\n linkUrl: linkData.linkUrl.destinationUrl,\n openInNewTab: linkData.willOpenInNewTab,\n role: 'button',\n additionalProperties: attributes\n };\n\n return (\n {\n this.handleLinkTextChange(index, event);\n },\n requestContext: this.props.context.request\n }}\n />\n );\n });\n };\n\n /**\n * RenderActiveImageDetailsHeading method - To render active image details heading.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsHeading = (): React.ReactNode | undefined => {\n const { heading } = this.props.config;\n\n return (\n heading && (\n \n )\n );\n };\n\n /**\n * RenderActiveImageDetailsParagraph method - To render active image details paragraph.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsParagraph = (): React.ReactNode | undefined => {\n const { paragraph } = this.props.config;\n\n return (\n paragraph && (\n \n )\n );\n };\n\n /**\n * GetActiveImageId - To get active image id from src.\n * @returns - String.\n */\n public getActiveImageId = (): string => {\n const { activeImage } = this.props.config;\n let activeImageId: string = '';\n if (activeImage?.src) {\n const activeImageSource = activeImage.src.split('/');\n const decrementOne: number = 1;\n const activeImageIdPart = activeImageSource[activeImageSource.length - decrementOne].split('?');\n activeImageId = activeImageIdPart[0] ?? '';\n }\n return activeImageId;\n };\n\n /**\n * Handle outside click method - To handle outside click of the active image product.\n * @param event - Mouse event.\n */\n private readonly _handleOutsideClick = (event: MouseEvent) => {\n if (this._productCardDivRef.current?.contains(event.target as Node)) {\n return;\n }\n this.resetState();\n };\n}\nexport default ActiveImage;\n","import { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion, SearchSuggestionCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getSearchSuggestionsAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\n\r\n// @ts-ignore\r\nexport const enum SuggestionType {\r\n Category = 'ScopedCategory',\r\n Keyword = 'Keyword',\r\n Product = 'Product',\r\n None = 'None'\r\n}\r\n\r\n/**\r\n * Input class for auto suggest search input\r\n */\r\nexport class AutoSuggestInput implements IActionInput {\r\n public searchQuery?: string;\r\n public topResultsCount?: number;\r\n public suggestionType?: string;\r\n public hitPrefix?: string;\r\n public hitSuffix?: string;\r\n\r\n constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\r\n this.searchQuery = searchText;\r\n this.topResultsCount = top;\r\n this.suggestionType = suggestionType;\r\n this.hitPrefix = hitPrefix;\r\n this.hitSuffix = hitSuffix;\r\n }\r\n\r\n public getCacheKey = () => `AutoSuggestSearchSuggestions`;\r\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext) => {\r\n return new AutoSuggestInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a auto-suggest suggestions\r\n */\r\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\r\n // If no input is provided fail out\r\n if (!input || !input.searchQuery) {\r\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\r\n }\r\n\r\n const autosuggest: Autosuggestions = {};\r\n\r\n const autoSuggestPromises = [\r\n _getAutoSuggest(input, autosuggest, ctx),\r\n ];\r\n return Promise.all(autoSuggestPromises).then(() => {\r\n return autosuggest;\r\n });\r\n}\r\n\r\nasync function _getAutoSuggest(\r\n input: AutoSuggestInput,\r\n autosuggest: Autosuggestions,\r\n ctx: IActionContext\r\n): Promise {\r\n const searchCriteria: SearchSuggestionCriteria = {\r\n ProductSearchCriteria: {\r\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n },\r\n HitPrefix: input.hitPrefix,\r\n HitSuffix: input.hitSuffix,\r\n SuggestionType: input.suggestionType\r\n };\r\n\r\n const searchSuggestions = await getSearchSuggestionsAsync(\r\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\r\n searchCriteria\r\n );\r\n\r\n if (searchSuggestions && searchSuggestions.length > 0) {\r\n // Generate image url\r\n searchSuggestions.map(\r\n (item: SearchSuggestion) =>\r\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\r\n );\r\n\r\n autosuggest.AllSearchResults = searchSuggestions;\r\n } else {\r\n ctx.telemetry.error(`[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`);\r\n }\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/citta-search/get-auto-suggest-suggestions',\r\n action: >getSearchSuggestionsAction,\r\n input: createInput\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { ICittaSearchData } from '../citta-search.data';\r\nimport { ICittaSearchProps } from '../citta-search.props.autogenerated';\r\n\r\nexport interface ISearchKeywordSuggestProps {\r\n searchKeywordSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ICittaSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchKeywordViewProps {\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * KeywordSuggestionsComponent\r\n */\r\nexport const KeywordSuggestionsComponent = (props: ISearchKeywordSuggestProps): ISearchKeywordViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitPrefix,\r\n hitSuffix\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, props));\r\n });\r\n\r\n return { text: reactNodes };\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = ariaLabel;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, hitPrefix, hitSuffix, props) &&\r\n _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps): string => {\r\n const { searchPageURL, searchQsp } = props;\r\n\r\n const formattedLink = (suggestion.Value as string)\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n const route = searchPageURL || '';\r\n return formattedLink && formattedLink.length > 0\r\n ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${formattedLink}`\r\n : route;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { getRichTextHtml, IActionContext, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, INodeProps, IPayLoad, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICittaSearchData } from '../citta-search.data';\r\nimport { ICittaSearchProps } from '../citta-search.props.autogenerated';\r\n\r\nexport interface ISearchProductSuggestProps {\r\n searchProductSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ICittaSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetry: ITelemetry;\r\n moduleType: string;\r\n moduleId: string;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchProductViewProps {\r\n title: React.ReactNode;\r\n items: ISearchProductItemViewProps[];\r\n}\r\n\r\nexport interface ISearchProductItemViewProps {\r\n text: React.ReactNode;\r\n price: React.ReactNode;\r\n LiProduct: INodeProps;\r\n AProduct: INodeProps;\r\n id: string | undefined;\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\nlet telemetryContent: ITelemetryContent | undefined;\r\n\r\n/**\r\n *\r\n * ProductSuggestionsComponent\r\n */\r\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitSuffix,\r\n hitPrefix,\r\n autoSuggestProps: {\r\n context: { actionContext },\r\n resources: { productSuggestionHeading }\r\n },\r\n moduleType,\r\n moduleId\r\n } = props;\r\n const reactNodes: ISearchProductItemViewProps[] = [];\r\n telemetryContent = props.telemetryContent;\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\r\n });\r\n\r\n const titleNode = _renderTitle(productSuggestionHeading);\r\n\r\n return { title: titleNode, items: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (productSuggestionHeading: string) => {\r\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\r\n\r\n return
  • {productAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (\r\n item: SearchSuggestion,\r\n hitPrefix: string,\r\n hitSuffix: string,\r\n actionContext: IActionContext,\r\n props: ISearchProductSuggestProps,\r\n moduleType: string,\r\n moduleId: string\r\n): ISearchProductItemViewProps => {\r\n return {\r\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\r\n price:\r\n item.Id &&\r\n item.Value3 &&\r\n item.Value3.Value &&\r\n item.Value3.Value.DecimalValue &&\r\n _renderPrice(item.Value3.Value.DecimalValue, item.Value3.Value.DecimalValue, moduleId, moduleType, props),\r\n LiProduct: _getLiWrapper(),\r\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext),\r\n id: item.Id\r\n };\r\n};\r\n\r\nconst _getLiWrapper = () => {\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'li' as NodeTag\r\n };\r\n};\r\n\r\nconst _getAWrapper = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n payLoad.contentAction.recid = item.Id;\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'a' as NodeTag,\r\n 'aria-label': ariaLabel,\r\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\r\n ...attribute\r\n };\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const formattedLink = (suggestion.Value as string).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n return suggestion.Value && suggestion.Id ?\r\n getProductPageUrlSync(formattedLink,suggestion.Id as unknown as number, actionContext, undefined) : '';\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\nconst _renderPrice = (adjustedPrice: number, basePrice: number, moduleId: string, moduleType: string, props: ISearchProductSuggestProps): JSX.Element | null => {\r\n const {\r\n autoSuggestProps: { context }\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICittaSearchData } from '../citta-search.data';\r\nimport { ICittaSearchProps } from '../citta-search.props.autogenerated';\r\n\r\nexport interface ISearchCategorySuggestProps {\r\n searchCategorySuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ICittaSearchProps;\r\n searchText: string;\r\n searchRefiners: ProductRefiner[] | undefined;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchCategoryViewProps {\r\n title: React.ReactNode;\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * CategorySuggestionsComponent\r\n */\r\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\r\n const {\r\n suggestions,\r\n searchText,\r\n autoSuggestProps: {\r\n resources: { categorySuggestionHeading }\r\n }\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, props));\r\n });\r\n\r\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\r\n\r\n return { title: titleNode, text: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\r\n const categoryAutoSuggestionHeading = categorySuggestionHeading\r\n ? format(categorySuggestionHeading, searchText)\r\n : `Search \"${searchText}\" in categories`;\r\n\r\n return
  • {categoryAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\r\n const { searchText, hitPrefix, hitSuffix } = props;\r\n\r\n const splitValue = item.Value && item.Value.split('|').pop();\r\n const ariaLabel = splitValue\r\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\r\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = item.Value;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, searchText, props) && _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\r\n};\r\n\r\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n const { searchPageURL, searchQsp, searchRefiners } = props;\r\n\r\n const route = searchPageURL || '';\r\n const urlPath = `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${searchText}`;\r\n const categoryRefiners =\r\n searchRefiners &&\r\n searchRefiners.find(refiners => {\r\n return refiners.KeyName === 'Category';\r\n });\r\n const refiner =\r\n categoryRefiners &&\r\n categoryRefiners.Values &&\r\n categoryRefiners.Values.find(item => {\r\n return item.RefinerRecordId === parseInt(id, 10);\r\n });\r\n\r\n const encodedRefiner = refiner && encodeURIComponent(JSON.stringify(compressRefiners([refiner])));\r\n\r\n return encodedRefiner ? `${urlPath}&refiners=${encodedRefiner}` : urlPath;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n let formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n formattedText = formattedText.split('|').pop() || '';\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\r\n// or move this code to a common place\r\nconst compressedRefinerKeys = ['DataTypeValue', 'LeftValueBoundString', 'RefinerRecordId', 'RefinerSourceValue', 'RightValueBoundString', 'UnitText'];\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs\r\n * @param refiners The uncompressed refiners\r\n */\r\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach((refiner) => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach((refinerKey) => {\r\n // @ts-ignore: This line is intentionally not typesafe\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISearchFormProps {\r\n hideSearchLabel: boolean | undefined;\r\n isSearchFormExpanded: boolean | undefined;\r\n disableSubmitSearch: boolean | undefined;\r\n searchTextInput: React.RefObject;\r\n maxChars: number;\r\n searchQsp: string;\r\n searchPlaceholder: string;\r\n query: string;\r\n ariaLabelCancel: string;\r\n ariaLabelSearch: string;\r\n ariaLabelSubmit: string;\r\n handleCancelSearchChange(): void;\r\n handleInputChange(query: string): void;\r\n handleSearchClick(): void;\r\n}\r\n\r\nexport interface ISearchFormViewProps {\r\n input: React.ReactNode;\r\n submitBtn: React.ReactNode;\r\n cancelBtn: React.ReactNode;\r\n searchBtn: React.ReactNode;\r\n}\r\n\r\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\r\n const {\r\n searchQsp,\r\n searchPlaceholder,\r\n hideSearchLabel,\r\n isSearchFormExpanded,\r\n searchTextInput,\r\n handleInputChange,\r\n maxChars,\r\n disableSubmitSearch,\r\n handleCancelSearchChange,\r\n handleSearchClick,\r\n query,\r\n ariaLabelCancel,\r\n ariaLabelSearch,\r\n ariaLabelSubmit\r\n } = props;\r\n\r\n const onInputChange = (e: React.ChangeEvent): void => {\r\n handleInputChange(e.target.value || '');\r\n };\r\n\r\n const inputNode = !hideSearchLabel ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const submitBtnNode = !disableSubmitSearch && (\r\n \r\n );\r\n\r\n const cancelBtNoden = (\r\n \r\n );\r\n\r\n return {input: inputNode, cancelBtn: cancelBtNoden, submitBtn: submitBtnNode, searchBtn: searchBtnNode };\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 { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISearchLabelProps {\r\n isSearchFormExpanded: boolean;\r\n searchLabelClass: string;\r\n searchLabelArialLabel: string;\r\n searchtext: string;\r\n searchCollapsedLabel: React.RefObject;\r\n hideSearchLabel?: boolean;\r\n telemetryContent: ITelemetryContent;\r\n handleCancelSearchChange(): void;\r\n}\r\n\r\nexport const LabelComponent = (props: ISearchLabelProps) => {\r\n const { searchLabelClass, searchLabelArialLabel, isSearchFormExpanded, searchtext, searchCollapsedLabel, hideSearchLabel, handleCancelSearchChange, telemetryContent} = props;\r\n const payLoad = getPayloadObject('click', telemetryContent, searchtext, '');\r\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\r\n\r\n return (\r\n
    \r\n \r\n {!hideSearchLabel && {searchtext}}\r\n \r\n
    \r\n );\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classnames from 'classnames';\r\nimport { debounce } from 'lodash';\r\nimport * as React from 'react';\r\n\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\r\nimport { ICittaSearchData } from './citta-search.data';\r\nimport { ICittaSearchProps, ISuggestionTypeCriterionData } from './citta-search.props.autogenerated';\r\nimport {\r\n CategorySuggestionsComponent,\r\n FormComponent,\r\n ISearchCategoryViewProps,\r\n ISearchKeywordViewProps,\r\n ISearchProductViewProps,\r\n KeywordSuggestionsComponent,\r\n LabelComponent,\r\n ProductSuggestionsComponent\r\n} from './components';\r\n\r\nexport interface ISearchState {\r\n isSearchFormExpanded: boolean;\r\n searchText: string;\r\n searchKeywordSuggestClass: string;\r\n searchProductSuggestClass: string;\r\n searchCategorySuggestClass: string;\r\n suggestions: Autosuggestions | undefined;\r\n searchRefiners?: ProductRefiner[] | undefined;\r\n autoSuggestAriaLabel: string;\r\n isInitialState: boolean;\r\n inSearchMode: boolean;\r\n}\r\n\r\nexport interface ISearchViewProps extends ICittaSearchProps {\r\n Search: IModuleProps;\r\n AutoSuggestAriaLabel: INodeProps;\r\n AutoSuggestAriaLabelText: string;\r\n searchText: string;\r\n AutoSuggest: INodeProps;\r\n KeywordSuggest: INodeProps;\r\n ProductSuggest: INodeProps;\r\n CategorySuggest: INodeProps;\r\n SearchForm: INodeProps;\r\n SearchBtn: INodeProps;\r\n FormWrapper: INodeProps;\r\n BtnWrapper: INodeProps;\r\n UlKeyword: INodeProps;\r\n UlProduct: INodeProps;\r\n UlCategory: INodeProps;\r\n label: React.ReactNode;\r\n searchLabel: INodeProps;\r\n searchLabelText: string;\r\n form: React.ReactNode;\r\n autosuggestKeyword?: ISearchKeywordViewProps;\r\n autosuggestProduct?: ISearchProductViewProps;\r\n autosuggestCategory?: ISearchCategoryViewProps;\r\n callbacks: {\r\n handleCancelSearchChange(): void;\r\n handleSearchClick(): void;\r\n };\r\n isSearchFormExpanded: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Search module\r\n * @extends {React.Component, ISearchState>}\r\n */\r\nclass Search extends React.Component, ISearchState> {\r\n private searchTextInput: React.RefObject;\r\n private searchCollapsedLabel: React.RefObject;\r\n private formReference: React.RefObject;\r\n private maxChars: number;\r\n private inputSuggestionType?: ISuggestionTypeCriterionData[];\r\n private topResultsCount?: number;\r\n private hitPrefix: string = '{';\r\n private hitSuffix: string = '}';\r\n private waitTime: number = 500;\r\n private autoSuggestResultScreenReaderDiv: React.RefObject;\r\n private autoSuggestResultDiv: React.RefObject;\r\n private searchFormClass: string;\r\n private searchBtnClass: string;\r\n private searchLabelClass: string;\r\n private telemetryContent: ITelemetryContent;\r\n // @ts-ignore\r\n private cancellabelDebounce: debounce;\r\n\r\n constructor(props: ICittaSearchProps) {\r\n super(props);\r\n this.searchTextInput = React.createRef();\r\n this.searchCollapsedLabel = React.createRef();\r\n this.autoSuggestResultScreenReaderDiv = React.createRef();\r\n this.autoSuggestResultDiv = React.createRef();\r\n this.formReference = React.createRef();\r\n this.state = {\r\n isSearchFormExpanded: false,\r\n searchText: '',\r\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\r\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\r\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\r\n suggestions: undefined,\r\n searchRefiners: undefined,\r\n autoSuggestAriaLabel: '',\r\n isInitialState: true,\r\n inSearchMode: false\r\n };\r\n this.maxChars =\r\n (this.props.context &&\r\n this.props.context.app &&\r\n this.props.context.app.config &&\r\n this.props.context.app.config.searchInputMaxLength) ||\r\n 50;\r\n this.inputSuggestionType = this.props.config && this.props.config.suggestionTypeCriterion;\r\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\r\n this.searchFormClass = 'ms-search__form';\r\n this.searchBtnClass = 'ms-search__btn';\r\n this.searchLabelClass = 'ms-search__label';\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\r\n window && window.addEventListener('keyup', this._keyup);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\r\n window && window.removeEventListener('keyup', this._keyup, false);\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n const {\r\n config: { hideSearchLabel }\r\n } = this.props;\r\n const { isSearchFormExpanded, isInitialState } = this.state;\r\n\r\n if (!this.props.context.request.params.isEditor) {\r\n if (!hideSearchLabel && isSearchFormExpanded) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else if (!isInitialState) {\r\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\r\n }\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity max-func-body-length\r\n public render(): JSX.Element {\r\n const {\r\n context,\r\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\r\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, className = '' }\r\n } = this.props;\r\n\r\n const {\r\n isSearchFormExpanded,\r\n searchText,\r\n searchKeywordSuggestClass,\r\n searchProductSuggestClass,\r\n searchCategorySuggestClass,\r\n suggestions,\r\n searchRefiners\r\n } = this.state;\r\n\r\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\r\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\r\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\r\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : '';\r\n\r\n const keywordSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(\r\n i => i.SuggestionType === SuggestionType.Keyword || i.SuggestionType === SuggestionType.None\r\n );\r\n const productSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Product);\r\n const categorySuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Category);\r\n\r\n const viewProps: ISearchViewProps = {\r\n ...(this.props as ICittaSearchProps),\r\n\r\n Search: {\r\n moduleProps: this.props,\r\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`,\r\n },\r\n AutoSuggestAriaLabel: {\r\n tag: 'div',\r\n className: 'msc-autoSuggest__screen-reader',\r\n 'aria-live': 'assertive',\r\n ref: this.autoSuggestResultScreenReaderDiv\r\n },\r\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\r\n searchText: this.state.searchText,\r\n AutoSuggest: {\r\n ref: this.autoSuggestResultDiv,\r\n className: 'ms-search__autoSuggest'\r\n },\r\n KeywordSuggest: {\r\n className: searchKeywordSuggestClass\r\n },\r\n ProductSuggest: {\r\n className: searchProductSuggestClass\r\n },\r\n CategorySuggest: {\r\n className: searchCategorySuggestClass\r\n },\r\n SearchForm: {\r\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\r\n },\r\n SearchBtn: {\r\n className: `${this.searchBtnClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-show'}`\r\n },\r\n BtnWrapper: {\r\n className: 'ms-search__btnWrapper',\r\n 'aria-label': 'Search',\r\n },\r\n FormWrapper: {\r\n tag: 'form',\r\n ref: this.formReference,\r\n className: 'ms-search__searchForm',\r\n 'aria-label': 'Search',\r\n name: 'searchForm',\r\n role: 'Search',\r\n action: searchURL,\r\n autoComplete: 'off',\r\n onSubmit: this._handleSubmit\r\n },\r\n UlKeyword: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__keywordResults-items', className)\r\n },\r\n UlProduct: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__productResults-items', className)\r\n },\r\n UlCategory: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__categoryResults-items', className)\r\n },\r\n searchLabel: {\r\n tag: 'div',\r\n className: 'search-label',\r\n },\r\n searchLabelText: 'Search',\r\n label: LabelComponent({\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n searchLabelClass: `${this.searchLabelClass} 'bx-show'}`,\r\n searchtext: searchtext,\r\n searchLabelArialLabel: searchLabelArialLabel,\r\n searchCollapsedLabel: this.searchCollapsedLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n telemetryContent: this.telemetryContent\r\n }),\r\n // @ts-ignore\r\n form: FormComponent({\r\n ariaLabelCancel: cancelBtnAriaLabel,\r\n ariaLabelSearch: searchBtnAriaLabel,\r\n ariaLabelSubmit: submitBtnAriaLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n searchTextInput: this.searchTextInput,\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n disableSubmitSearch: disableSubmitSearch,\r\n handleInputChange: this._handleInputChange,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n handleSearchClick: this._handleSearchClick,\r\n maxChars: this.maxChars,\r\n searchQsp: searchQsp,\r\n searchPlaceholder: searchPlaceholder,\r\n query: searchText\r\n }),\r\n autosuggestKeyword:\r\n searchText && searchText.length > 0 && keywordSuggestions && keywordSuggestions.length > 0\r\n ? KeywordSuggestionsComponent({\r\n searchKeywordSuggestClass: searchKeywordSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: keywordSuggestions,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestProduct:\r\n searchText && searchText.length > 0 && productSuggestions && productSuggestions.length > 0\r\n ? ProductSuggestionsComponent({\r\n searchProductSuggestClass: searchProductSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: productSuggestions,\r\n telemetry: this.props.telemetry,\r\n moduleType: this.props.typeName,\r\n moduleId: this.props.id,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestCategory:\r\n searchText && searchText.length > 0 && categorySuggestions && categorySuggestions.length > 0\r\n ? CategorySuggestionsComponent({\r\n searchCategorySuggestClass: searchCategorySuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: categorySuggestions,\r\n searchRefiners: searchRefiners,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n callbacks: {\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n handleSearchClick: this._handleSearchClick\r\n },\r\n isSearchFormExpanded: this.state.isSearchFormExpanded\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _focusOutTarget = (e: any): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n e.target.closest('.ms-search') === null\r\n ) {\r\n this._clearAutoSuggestState();\r\n }\r\n };\r\n\r\n private _keyup = (e: KeyboardEvent): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\r\n this._clearAutoSuggestState();\r\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\r\n if (this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n window.document.body.classList.toggle('search-open', false);\r\n }\r\n }\r\n\r\n if (!((this.formReference.current && this.formReference.current.contains(e.target as unknown as Node)) ||\r\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains(e.target as unknown as Node)))) {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n if (this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n window.document.body.classList.toggle('search-open', false);\r\n }\r\n }\r\n };\r\n\r\n private _clearAutoSuggestState = (): void => {\r\n const {\r\n context: { actionContext },\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\r\n searchState.searchText = '';\r\n searchState.defaultBasicSearchUrl = '';\r\n searchState.searchQueryStringParameter = '';\r\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\r\n this.searchTextInput.current.value = '';\r\n }\r\n\r\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\r\n };\r\n\r\n private _handleSearchClick = (): void => {\r\n console.log('handle search click')\r\n const { isSearchFormExpanded } = this.state;\r\n const updatedIsSearchFormExpanded = !isSearchFormExpanded;\r\n const headerElem = document.querySelector('.ms-header');\r\n if (headerElem) {\r\n if (updatedIsSearchFormExpanded) {\r\n headerElem.classList.add('lock-opaque');\r\n // window.document.body.classList.toggle('menu-open', true);\r\n window.document.body.classList.toggle('search-open', true);\r\n } else {\r\n if (document.documentElement.scrollTop < 2) {\r\n headerElem.classList.remove('lock-opaque');\r\n }\r\n // window.document.body.classList.toggle('menu-open', false);\r\n window.document.body.classList.toggle('search-open', false);\r\n }\r\n }\r\n this.setState({ isSearchFormExpanded: updatedIsSearchFormExpanded });\r\n }\r\n\r\n private _handleInputChange = (query: string): void => {\r\n if (!query || query.length < this.maxChars) {\r\n this.setState({ searchText: query });\r\n }\r\n\r\n if (this.cancellabelDebounce) {\r\n this.cancellabelDebounce.cancel();\r\n }\r\n\r\n const {\r\n telemetry,\r\n context,\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (context) {\r\n if (query && query.length > 0) {\r\n if (query.length > this.maxChars) {\r\n return;\r\n }\r\n\r\n this.cancellabelDebounce = debounce(\r\n () => {\r\n getSearchSuggestionsAction(\r\n new AutoSuggestInput(\r\n query,\r\n this.topResultsCount,\r\n this._getSuggestionType(this.inputSuggestionType),\r\n this.hitPrefix,\r\n this.hitSuffix\r\n ),\r\n context.actionContext\r\n )\r\n .then(results => {\r\n this._getSearchRefiners(query)\r\n .then(refiners => {\r\n this.setState({\r\n suggestions: results, searchRefiners: refiners,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results)\r\n });\r\n })\r\n .catch(error => {\r\n this.setState({\r\n suggestions: results, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results)\r\n });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get refiners results');\r\n });\r\n })\r\n .catch(error => {\r\n this.setState({\r\n suggestions: undefined, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount()\r\n });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get auto suggest results');\r\n });\r\n },\r\n this.waitTime\r\n );\r\n\r\n setTimeout(\r\n () => {\r\n this.cancellabelDebounce();\r\n },\r\n 0\r\n );\r\n\r\n searchState.searchText = query;\r\n } else {\r\n this.setState({ suggestions: undefined, searchRefiners: undefined });\r\n searchState.searchText = '';\r\n }\r\n context.actionContext.update(createSearchStateInput(searchState), searchState);\r\n }\r\n };\r\n\r\n private _getSuggestionType = (suggestionTypes?: ISuggestionTypeCriterionData[]): string => {\r\n if (suggestionTypes && suggestionTypes.length > 0) {\r\n const distinctSuggestionTypes: string[] = [];\r\n suggestionTypes && suggestionTypes.forEach((suggestionTypeItem, index) => {\r\n suggestionTypeItem.SuggestionType && distinctSuggestionTypes.push(suggestionTypeItem.SuggestionType.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType.slice(1));\r\n });\r\n return distinctSuggestionTypes.join(',');\r\n }\r\n return 'Keyword, Product, ScopedCategory';\r\n };\r\n\r\n private async _getSearchRefiners(searchText: string): Promise {\r\n const { actionContext: ctx } = this.props.context;\r\n return getProductSearchRefinersAsync(\r\n { callerContext: ctx },\r\n {\r\n SearchCondition: searchText,\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n }\r\n );\r\n }\r\n\r\n private _handleSubmit = (\r\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\r\n ): void => {\r\n const {\r\n config: { disableSubmitSearch },\r\n context: {\r\n actionContext,\r\n app: {\r\n config: { searchQueryStringParameter }\r\n }\r\n }\r\n } = this.props;\r\n\r\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\r\n e.preventDefault();\r\n\r\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else {\r\n const searchQsp = searchQueryStringParameter || 'q';\r\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\r\n document.location.href = searchURL;\r\n }\r\n };\r\n\r\n private _handleCancelSearchChange = (): void => {\r\n const { isSearchFormExpanded, suggestions } = this.state;\r\n\r\n if (!isSearchFormExpanded) {\r\n this.setState({\r\n isSearchFormExpanded: true,\r\n searchText: '',\r\n isInitialState: false\r\n });\r\n } else {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n this.setState({ isSearchFormExpanded: false });\r\n window.document.body.classList.toggle('search-open', false);\r\n }\r\n };\r\n\r\n private _appendQueryParams = (route: string, query: string, qsp: string): string => {\r\n if (route && route.length > 0) {\r\n return query && query.length > 0 ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${qsp}=${query}` : route;\r\n }\r\n return '';\r\n };\r\n\r\n private _setAutoSuggestResultCount = (result?: Autosuggestions) => {\r\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\r\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\r\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\r\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\r\n ariaLiveRegion.innerText = result && (result.AllSearchResults && result.AllSearchResults.length > 0) ? suggestResultString : emptyResultString;\r\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\r\n return ariaLiveRegion.innerText;\r\n } else {\r\n return '';\r\n }\r\n };\r\n}\r\n\r\nexport default Search;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\nexport enum ReviewConcernCategory {\n OffensiveContent = '1',\n ReviewResponse = '7',\n SpamAdvertising = '8',\n Profanity = '9'\n}\n\n/**\n * ReportReviewConcern Input Action.\n */\nexport class ReportReviewConcernInput implements IActionInput {\n public reviewId: string;\n\n public tenantId: string;\n\n public locale: string;\n\n public serviceEndpoint: string;\n\n public concernCategory: string;\n\n public authToken: string;\n\n constructor(reviewId: string, tenantId: string, locale: string, concernCategory: string, authToken: string, serviceEndpoint: string) {\n this.reviewId = reviewId;\n this.tenantId = tenantId;\n this.locale = locale;\n this.concernCategory = concernCategory;\n this.authToken = authToken;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'ReportReviewConcern';\n\n public getCacheObjectType = () => 'ReportReviewConcern';\n\n public dataCacheType = (): CacheType => 'none';\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPromoBannerCloseButton {\n closeButtonAriaLabel?: string;\n label?: string;\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const PromoBannerCloseButton: React.FC = ({ closeButtonAriaLabel, label, telemetryContent, onClose }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PromoBannerClose);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../promo-banner.props.autogenerated';\n\nexport interface IPromoBannerLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nexport const PromoBannerLinks: React.FC = ({ links, requestContext, onTextChange, telemetryContent }) => {\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n};\n\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-promo-banner__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nexport interface IPromoBannerText {\n text: string;\n requestContext: Msdyn365.IRequestContext;\n onTextChange(event: Msdyn365.ContentEditableEvent): void;\n}\n\nexport const PromoBannerText: React.FC = ({ text, onTextChange, requestContext }) => {\n return ;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { PromoBannerCloseButton, PromoBannerLinks, PromoBannerText } from './components';\nimport { IBannerMessagesData, IPromoBannerProps, IPromoBannerResources } from './promo-banner.props.autogenerated';\n\nexport interface IPromoBannerState {\n animating: boolean;\n isVisible: boolean;\n activeIndex: number;\n}\n\nexport interface IPromoBannerViewProps extends IPromoBannerProps<{}>, IPromoBannerState {\n promoBannerProps: IModuleProps;\n contentProps: INodeProps;\n bannerMessages: IBannerMessagesData[];\n promoBannerTextProps: INodeProps;\n promoBannerLinksProps: INodeProps;\n carouselProps: INodeProps;\n closeButton?: React.ReactNode;\n className: string;\n promoBannerText: string;\n resources: IPromoBannerResources;\n onDismiss(): void;\n handleText(): void;\n handleLinks(): void;\n}\n\n/**\n *\n * PromoBannerModule component.\n * @extends {React.PureComponent>}\n */\nclass PromoBanner extends React.PureComponent, IPromoBannerState> {\n public state: IPromoBannerState = {\n animating: false,\n isVisible: true,\n activeIndex: 0\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public render(): JSX.Element | null {\n const { bannerMessages, dismissEnabled, interval, hideFlipper, autoplay, className = '' } = this.props.config;\n const { closeButtonAriaLabel, closeButtonLabel, bannerText, bannerAriaLabel } = this.props.resources;\n const { isVisible, activeIndex } = this.state;\n\n if (!isVisible) {\n this.props.context.telemetry.error('Promo banner content is empty, module wont render.');\n return null;\n }\n\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n className: classnames('ms-promo-banner', className),\n isVisible, // State data\n onDismiss: this._onDismiss, // Methods\n handleLinks: this.handleLinkTextChange,\n handleText: this.handleTextChange,\n\n promoBannerProps: {\n className: classnames('ms-promo-banner', className),\n moduleProps: this.props,\n role: 'banner',\n 'aria-label': bannerAriaLabel\n },\n promoBannerTextProps: {\n tag: PromoBannerText\n },\n promoBannerLinksProps: {\n tag: PromoBannerLinks,\n telemetryContent: this.telemetryContent\n },\n contentProps: { className: 'ms-promo-banner__content' },\n promoBannerText: bannerText,\n bannerMessages,\n activeIndex,\n carouselProps: {\n tag: Carousel,\n className: 'ms-promo-banner__carousel',\n activeIndex,\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n hideIndicator: hideFlipper,\n interval,\n hideFlipper,\n autoplay\n },\n closeButton: dismissEnabled && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.bannerMessages && this.props.config.bannerMessages[0]) {\n this.props.config.bannerMessages[0].text = event.target.value;\n }\n };\n\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.bannerMessages && this.props.config.bannerMessages[1]) {\n const links = this.props.config.bannerMessages[1].links;\n if (links) {\n links[linkIndex].linkText = event.target.value;\n }\n }\n };\n\n private readonly _next = (): void => {\n const nextIndex = this._isLastItem() ? 0 : this.state.activeIndex + 1;\n this._goToIndex(nextIndex);\n };\n\n private readonly _previous = (): void => {\n const nextIndex = this._isFirstItem()\n ? this.props.config.bannerMessages\n ? this.props.config.bannerMessages.length - 1\n : 0\n : this.state.activeIndex - 1;\n this._goToIndex(nextIndex);\n };\n\n private readonly _goToIndex = (index: number): void => {\n if (this.state.animating) {\n return;\n }\n this.setState({ activeIndex: index });\n };\n\n private readonly _isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly _isLastItem = () =>\n this.props.config.bannerMessages && this.state.activeIndex === this.props.config.bannerMessages.length - 1;\n\n private readonly _onDismiss = (): void => {\n this.setState({ isVisible: false });\n };\n}\n\nexport default PromoBanner;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISocialShareItemViewProps } from './social-share-item';\n\nexport const SocialShareItemView: React.FC = props => {\n const { SocialShareItem, SocialShareItemElement } = props;\n\n if (!SocialShareItemElement) {\n props.context.telemetry.error('Social media is not valid, module wont render');\n return null;\n }\n return {SocialShareItemElement};\n};\n\nexport default SocialShareItemView;\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 { format, INodeProps, Progress } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface IHistogramItemsProps {\n ratingsSummary: RatingsSummary;\n resources: IHistogramItemsResources;\n locale: string;\n onClick(stars: number): void;\n}\n\nexport interface IHistogramItemsResources {\n barItemAriaLabel: string;\n}\n\nexport interface IHistogramItemViewProps {\n starLabel: React.ReactElement;\n bar: React.ReactElement;\n percentage: React.ReactElement;\n buttonProps: INodeProps;\n}\n\n/**\n * CartLineItems component.\n */\n\nexport const HistogramItems = (props: IHistogramItemsProps): IHistogramItemViewProps[] => {\n const { ratingsSummary } = props;\n const totalRatingsCount: number = ratingsSummary.totalRatingsCount || 0;\n if (totalRatingsCount === 0) {\n return [];\n }\n return [\n renderItem(props, 5, ratingsSummary.star5Count, totalRatingsCount),\n renderItem(props, 4, ratingsSummary.star4Count, totalRatingsCount),\n renderItem(props, 3, ratingsSummary.star3Count, totalRatingsCount),\n renderItem(props, 2, ratingsSummary.star2Count, totalRatingsCount),\n renderItem(props, 1, ratingsSummary.star1Count, totalRatingsCount)\n ];\n};\n\nconst renderItem = (props: IHistogramItemsProps, stars: number, count?: number, totalCount?: number): IHistogramItemViewProps => {\n count = count || 0;\n totalCount = totalCount || 0;\n const percentage = totalCount === 0 ? 0 : count / totalCount;\n const formattedPercent = new Intl.NumberFormat(props.locale, { style: 'percent' }).format(percentage);\n const ariaLabel = format(props.resources.barItemAriaLabel, stars, formattedPercent);\n\n return {\n starLabel: (\n \n ),\n percentage: (\n \n ),\n bar: ,\n buttonProps: {\n tag: 'button',\n className: 'ms-ratings-histogram__item',\n onClick: () => {\n props.onClick(stars);\n }\n }\n };\n};\n\nexport const AverageRatingNumber: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return (\n

    \n {props.summary.averageRating}\n {` `}/ 5\n

    \n );\n};\n\nexport const TotalReviews: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return

    {props.summary.totalRatingsCount}

    ;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IReviewModalViewProps } from '../../common/review-modal';\nimport { IReportReviewModalViewProps } from './components/report-review-modal';\nimport { IReviewCardViewProps } from './components/review-card';\nimport { IReviewsListState, IReviewsListViewProps } from './reviews-list';\n\nconst ReviewsListview: React.FC = props => {\n const {\n averageRating,\n filterByDropdown,\n heading,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n reviewCount,\n reviewModal,\n sortByDropdown,\n state,\n userReview\n } = props;\n\n if (!userReview && reviewCards.length === 0 && !state.isFilterApplied) {\n return {noReviewsMessage};\n }\n\n return (\n \n {heading}\n {averageRating}\n {reviewCount}\n \n {sortByDropdown}\n {filterByDropdown}\n \n \n {userReview && buildReviewCard(userReview)}\n {reviewCards.map(review => {\n return buildReviewCard(review);\n })}\n \n {reviewCards.length === 0 && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(reviewModal, moduleProps)}\n {createReportModal(reportReviewModal, state)}\n \n );\n};\n\nconst buildReviewCard = (props: IReviewCardViewProps) => {\n return (\n \n \n {props.rating}\n {props.name}\n \n \n \n {props.reviewTitle}\n {props.date}\n {props.reviewText}\n \n \n {props.responseName}\n {props.responseDate}\n {props.responseText}\n \n \n {props.ratingHelpfulLabel}\n {props.like}\n {props.dislike}\n {props.edit}\n {props.report}\n \n \n \n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n \n {props.modalHeader}\n \n \n \n {props.rating}\n {props.ratingLabel}\n \n \n {props.titleLabel}\n {props.titleInput}\n \n \n {props.textLabel}\n {props.textInput}\n \n {props.privacyPolicyUrl}\n {props.error}\n \n \n \n {props.submitButton}\n {props.cancelButton}\n \n \n );\n};\n\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n \n {state.reported ? props.headerSubmitted : props.header}\n \n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n \n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\n \n );\n};\n\nexport default ReviewsListview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './get-product-reviews';\nexport * from './get-user-review';\nexport * from './inputs/get-product-reviews-input';\nexport * from './inputs/get-user-review-input';\nexport * from './inputs/report-review-concern-input';\nexport * from './inputs/submit-helpfulness-vote-input';\nexport * from './inputs/submit-user-review-input';\nexport * from './inputs/submit-user-review-input-data';\nexport * from './ratings-reviews-state-data-action';\nexport * from './report-review-concern';\nexport * from './submit-helpfulness-vote';\nexport * from './submit-user-review';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { ProductDimensionsMatrix } from '@msdyn365-commerce/components';\nimport { RichTextComponent } from '@msdyn365-commerce/core';\nimport { ICoreContext } from '@msdyn365-commerce/core-internal';\nimport { ArrayExtensions, IDimensionsApp } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Collapse, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IBulkPurchaseData } from './bulk-purchase.data';\nimport { IBulkPurchaseProps } from './bulk-purchase.props.autogenerated';\n\n/**\n * Additional optional props for the bulk purchase.\n */\nexport interface IBulkPurchaseExtendedProps extends IBulkPurchaseProps {\n productDimensions?: IProductDimensionsWithAvailabilitiesFull[];\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseViewProps extends IBulkPurchaseProps {\n container: IModuleProps;\n content: React.ReactElement;\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseState {\n isExpanded: boolean;\n}\n\n/**\n * Bulk-purchase module.\n */\nexport class BulkPurchase extends React.PureComponent {\n public static readonly className = 'ms-bulk-purchase';\n private readonly collapseRef: React.RefObject = React.createRef();\n\n public constructor(props: IBulkPurchaseExtendedProps) {\n super(props);\n\n this.state = {\n isExpanded: false\n };\n }\n\n public render(): React.ReactElement | null {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const hasDimensionsInData = ArrayExtensions.hasElements(this.props.data.productDimensions?.result);\n if (!hasDimensionsInProps && !hasDimensionsInData) {\n return null;\n }\n\n const viewProps: IBulkPurchaseViewProps = {\n ...this.props,\n container: {\n moduleProps: this.props,\n className: classnames(BulkPurchase.className, this.props.config.className)\n },\n content: this._renderCollapseContent(`${BulkPurchase.className}__content`)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderCollapseContent(className: string): React.ReactElement {\n return (\n
    \n {this._renderCollapseButton(`${className}__collapse-button`)}\n {this._renderCollapse(`${className}__collapse`)}\n
    \n );\n }\n\n private _renderCollapseButton(className: string): React.ReactElement {\n return (\n \n {this.props.resources.bulkPurchaseHeaderTitle}\n \n );\n }\n\n /**\n *This function is being used to handel variant change dropdown.\n */\n private _dimensionDropDownChange = () => {\n this.collapseRef.current?.reEvaluateHeight();\n };\n\n private _renderCollapse(className: string): React.ReactElement {\n return (\n \n {this._renderMainContent(`${className}__main-content`)}\n \n );\n }\n\n private _renderMainContent(className: string): React.ReactElement {\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n\n return (\n
    \n {!isMobileDevice && (\n
    \n \n
    \n )}\n {this._renderMatrix(`${className}__matrix-container`)}\n
    \n );\n }\n\n private _renderMatrix(className: string): React.ReactElement {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n\n return (\n }\n data={{\n dimensions: hasDimensionsInProps ? this.props.productDimensions! : this.props.data.productDimensions!.result!,\n orderTemplates: this.props.data.orderTemplates?.result,\n customerInformation: this.props.data.customerInformation?.result\n }}\n resources={this.props.resources}\n dimensionOnChange={this._dimensionDropDownChange}\n />\n );\n }\n\n /**\n * Callback which toggles collapse mode.\n */\n private readonly _toggleCollapse = () => {\n this.setState(state => ({\n isExpanded: !state.isExpanded\n }));\n };\n}\n\nexport default BulkPurchase;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselData } from './carousel.data';\nimport { ICarouselProps } from './carousel.props.autogenerated';\nimport { ICarouselState } from './carousel.state';\n\nexport interface ICarouselViewProps extends ICarouselProps<{}>, ICarouselState {\n closeAnimation: string;\n carouselContainer: IModuleProps;\n telemetryContent: ITelemetryContent;\n next(): void;\n previous(): void;\n onIndicatorsClickHandler(): void;\n handleDismissCarousel(): void;\n handleOnExited(): void;\n handleOnExiting(): void;\n}\n\n/**\n *\n * CarouselModule component.\n * @extends {React.PureComponent>}\n */\nclass CarouselModule extends React.PureComponent, ICarouselState> {\n private animating: boolean;\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: ICarouselProps, state: ICarouselState) {\n super(props);\n this.state = { activeIndex: 0, closeNow: false, dismissCarousel: false };\n this.animating = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n if (this.props.context.request.cookies.get(`CarouselDismiss_${this.props.id}`) === undefined) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'false');\n this.setState({ dismissCarousel: false });\n }\n }\n }\n\n public render(): JSX.Element | null {\n if (this.state.dismissCarousel) {\n return null;\n }\n\n const { className } = this.props.config;\n\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n ...this.state,\n telemetryContent: this.telemetryContent,\n carouselContainer: {\n moduleProps: this.props,\n className: classnames('ms-carousel', className)\n },\n closeAnimation: this.state.closeNow ? 'close-now' : '',\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n handleDismissCarousel: this._handleDismissCarousel,\n handleOnExited: this._onExited,\n handleOnExiting: this._onExiting\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Function implementation to dismiss the Carousel.\n */\n private readonly _handleDismissCarousel = (): void => {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'true');\n this.setState({ dismissCarousel: true });\n }\n };\n\n /**\n * Function implementation to move to next slide.\n */\n private readonly _next = (): void => {\n const { slots } = this.props;\n const nextIndex = this.state.activeIndex === (slots && slots.content && slots.content.length - 1) ? 0 : this.state.activeIndex + 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n /**\n * Function implementation to move to previous slide.\n */\n private readonly _previous = (): void => {\n const slots = this.props.slots && this.props.slots.content;\n const nextIndex = this.state.activeIndex === 0 ? (slots ? slots.length - 1 : 0) : this.state.activeIndex - 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n private readonly _onExiting = (): void => {\n this.animating = true;\n };\n\n private readonly _onExited = (): void => {\n this.animating = false;\n this.setState({ closeNow: false });\n };\n\n /**\n * Function implementation to move to a given slide.\n * @param newIndex\n */\n private readonly _goToIndex = (newIndex: number): void => {\n if (this.animating) {\n return;\n }\n this.setState({ activeIndex: newIndex });\n };\n}\n\nexport default CarouselModule;\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 { IHistogramItemViewProps } from './component/components';\nimport { IRatingsHistogramViewProps } from './ratings-histogram';\n\nconst RatingsHistogramView: React.FC = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n\n return (\n \n {heading}\n \n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n \n \n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n \n {props.starLabel}\n {props.bar}\n {props.percentage}\n \n );\n};\n\nexport default RatingsHistogramView;\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IPromoBannerViewProps } from './citta-promo-banner';\r\n\r\nconst PromoBannerView: React.FC = props => {\r\n const {\r\n promoBannerProps,\r\n contentProps,\r\n closeButton,\r\n bannerMessages,\r\n PromoBannerTextProps,\r\n PromoBannerLinksProps,\r\n CarouselProps,\r\n handleLinks,\r\n handleText\r\n } = props;\r\n const slides = bannerMessages && bannerMessages.map((message, index) => {\r\n if (message.links?.length) {\r\n return ( \r\n \r\n {message.text && }\r\n {message.links && message.links.length > 0 && }\r\n \r\n );\r\n }\r\n return (\r\n \r\n {message.text && }\r\n {message.links && message.links.length > 0 && }\r\n \r\n );\r\n });\r\n if(bannerMessages.length > 0){\r\n return (\r\n \r\n \r\n {closeButton}\r\n \r\n );\r\n }\r\n return null;\r\n};\r\nexport default PromoBannerView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport RatingsHistogram from './ratings-histogram';\nimport RatingsHistogramView from './ratings-histogram.view';\n\nexport * from './component/components';\nexport * from './ratings-histogram';\nexport * from './ratings-histogram.data';\nexport { IRatingsHistogramConfig, IRatingsHistogramProps, IRatingsHistogramResources } from './ratings-histogram.props.autogenerated';\nexport * from './ratings-histogram.view';\n\nexport { RatingsHistogram, RatingsHistogramView };\n","import { __assign } from \"tslib\";\r\nimport { msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nvar PriceComponentActions = {};\r\nvar Price = function (props: any) {\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n return (React.createElement(\"span\", { className: classnames('msc-price', props.className) }, showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)));\r\n};\r\nvar showStrikethroughPricing = function (props: any) {\r\n var originalPrice = getOriginalPrice(props);\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n return originalPrice > props.data.price.CustomerContextualPrice;\r\n }\r\n return false;\r\n};\r\nvar getOriginalPrice = function (props: any) {\r\n return Math.max(props.data.price.BasePrice || 0, props.data.price.TradeAgreementPrice || 0, props.data.price.AdjustedPrice || 0);\r\n};\r\nvar renderCurrentPrice = function (props: any) {\r\n var initialPrice = formatCurrency(props, props.data.price.CustomerContextualPrice);\r\n return (React.createElement(\"span\", { className: 'msc-price__actual', itemProp: 'price' }, initialPrice));\r\n};\r\nvar formatCurrency = function (props: any, price: any) {\r\n if (price === undefined) {\r\n return undefined;\r\n }\r\n if (price === 0 && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n let returnPrice = `$${price}`;\r\n try {\r\n var formatter = new Intl.NumberFormat(props.context.cultureFormatter.locale, {\r\n style: 'currency',\r\n currency: props.context.cultureFormatter.currencyCode,\r\n currencyDisplay: 'narrowSymbol'\r\n });\r\n returnPrice = formatter.format(price)\r\n\r\n } catch {}\r\n return returnPrice;\r\n};\r\nvar renderCurrentPriceWithOriginalPrice = function (props: any) {\r\n var originalPrice = getOriginalPrice(props);\r\n var initialPrice = formatCurrency(props, originalPrice);\r\n return (React.createElement(React.Fragment, null,\r\n React.createElement(\"span\", { className: 'sr-only' },\r\n ' ',\r\n props.originalPriceText,\r\n ' ',\r\n initialPrice,\r\n ' ',\r\n props.currentPriceText,\r\n ' ',\r\n renderCurrentPrice(props)),\r\n React.createElement(\"span\", { className: 'msc-price__strikethrough', \"aria-hidden\": 'true' }, initialPrice),\r\n React.createElement(\"span\", { \"aria-hidden\": 'true' }, renderCurrentPrice(props)),\r\n props.savingsText && React.createElement(\"span\", { className: 'msc-price__savings' }, props.savingsText)));\r\n};\r\n\r\nconst PriceComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'Product',\r\n { component: msdyn365Commerce.createComponent('Price', __assign({ component: Price }, PriceComponentActions)) }\r\n);\r\n\r\nexport default PriceComponent","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { SearchSuggestion, SearchSuggestionCriteria } from '@msdyn365-commerce/retail-proxy';\nimport { getSearchSuggestionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\n\nexport enum SuggestionType {\n Category = 'ScopedCategory',\n Keyword = 'Keyword',\n Product = 'Product',\n None = 'None'\n}\n\n/**\n * Input class for auto suggest search input.\n */\nexport class AutoSuggestInput implements IActionInput {\n public searchQuery?: string;\n\n public topResultsCount?: number;\n\n public suggestionType?: string;\n\n public hitPrefix?: string;\n\n public hitSuffix?: string;\n\n public constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\n this.searchQuery = searchText;\n this.topResultsCount = top;\n this.suggestionType = suggestionType;\n this.hitPrefix = hitPrefix;\n this.hitSuffix = hitSuffix;\n }\n\n public getCacheKey = () => 'AutoSuggestSearchSuggestions';\n\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new AutoSuggestInput();\n};\n\n/**\n * Calls the Retail API and returns a auto-suggest suggestions.\n * @param input\n * @param ctx\n */\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\n // If no input is provided fail out\n if (!input || !input.searchQuery) {\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\n }\n\n const autosuggest: Autosuggestions = {};\n\n const autoSuggestPromises = [_getAutoSuggest(input, autosuggest, ctx)];\n return Promise.all(autoSuggestPromises).then(() => {\n return autosuggest;\n });\n}\n\nasync function _getAutoSuggest(input: AutoSuggestInput, autosuggest: Autosuggestions, ctx: IActionContext): Promise {\n const catalogId = getCatalogId(ctx.requestContext);\n const searchCriteria: SearchSuggestionCriteria = {\n ProductSearchCriteria: {\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n },\n HitPrefix: input.hitPrefix,\n HitSuffix: input.hitSuffix,\n SuggestionType: input.suggestionType\n };\n\n const searchSuggestions = await getSearchSuggestionsAsync(\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\n searchCriteria\n );\n\n if (searchSuggestions && searchSuggestions.length > 0) {\n // Generate image url\n searchSuggestions.map(\n (item: SearchSuggestion) =>\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\n );\n\n autosuggest.AllSearchResults = searchSuggestions;\n } else {\n ctx.telemetry.error(\n `[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`\n );\n }\n}\n\nexport const getSearchSuggestionsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\n action: >getSearchSuggestionsAction,\n input: createInput\n});\n\nexport default getSearchSuggestionsActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchCategorySuggestProps {\n searchCategorySuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n searchRefiners: ProductRefiner[] | undefined;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n shouldShowFullPath?: boolean;\n}\n\nexport interface ISearchCategoryViewProps {\n title: React.ReactNode;\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * CategorySuggestionsComponent.\n * @param props\n */\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\n const {\n suggestions,\n searchText,\n autoSuggestProps: {\n resources: { categorySuggestionHeading }\n }\n } = props;\n\n const reactNodes: React.ReactNode[] = [];\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, props));\n });\n\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\n\n return { title: titleNode, text: reactNodes };\n};\n\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\n const categoryAutoSuggestionHeading = categorySuggestionHeading\n ? format(categorySuggestionHeading, searchText)\n : `Search \"${searchText}\" in categories`;\n\n return
  • {categoryAutoSuggestionHeading}
  • ;\n};\n\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\n const { searchText, hitPrefix, hitSuffix, shouldShowFullPath } = props;\n\n const splitValue = shouldShowFullPath ? item.Value : item.Value && item.Value.split('|').pop();\n const ariaLabel = splitValue\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = item.Value;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n
  • \n \n {_generateLink(item, searchText, props) && _getHighlightedText(splitValue ? splitValue : '', hitPrefix, hitSuffix)}\n \n
  • \n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\n};\n\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\n const { searchPageURL, searchQsp, searchRefiners } = props;\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n\n if (searchQsp && searchText) {\n queryUrl.searchParams.set(searchQsp, searchText);\n }\n\n const categoryRefiners = searchRefiners?.find(refiners => {\n return refiners.SourceValue === ProductRefinerSource.Category;\n });\n const refiner = categoryRefiners?.Values?.find(item => {\n return item.RefinerRecordId === Number.parseInt(id, 10);\n });\n\n const encodedRefiner = refiner && JSON.stringify(compressRefiners([refiner]));\n if (encodedRefiner) {\n queryUrl.searchParams.set('refiners', encodedRefiner);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n // eslint-disable-next-line react/no-danger\n return ;\n};\n\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\n// or move this code to a common place\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchFormProps {\n hideSearchLabel: boolean | undefined;\n isSearchFormExpanded?: boolean | undefined;\n disableSubmitSearch: boolean | undefined;\n searchTextInput: React.RefObject;\n maxChars: number;\n searchQsp: string;\n searchPlaceholder: string;\n query: string;\n ariaLabelCancel: string;\n ariaLabelSearch: string;\n ariaLabelSubmit: string;\n handleCancelSearchChange(): void;\n handleInputChange(query: string): void;\n}\n\nexport interface ISearchFormViewProps {\n input: React.ReactNode;\n submitBtn: React.ReactNode;\n cancelBtn: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Set updated input value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\n const {\n searchQsp,\n searchPlaceholder,\n hideSearchLabel,\n searchTextInput,\n handleInputChange,\n maxChars,\n disableSubmitSearch,\n handleCancelSearchChange,\n query,\n ariaLabelCancel,\n ariaLabelSearch,\n ariaLabelSubmit\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const inputNode = !hideSearchLabel ? (\n \n ) : (\n \n );\n\n const submitBtnNode = !disableSubmitSearch && \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 { PriceComponent } from '@msdyn365-commerce/components';\nimport { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\n/**\n * Search product suggest resources.\n */\nexport interface ISearchProductSuggestResources {\n freePriceText: string;\n}\n\nexport interface ISearchProductSuggestProps {\n searchProductSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetry: ITelemetry;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n resources?: ISearchProductSuggestResources;\n}\n\nexport interface ISearchProductViewProps {\n title: React.ReactNode;\n items: ISearchProductItemViewProps[];\n}\n\nexport interface ISearchProductItemViewProps {\n text: React.ReactNode;\n thumbnail: React.ReactNode;\n price: React.ReactNode;\n LiProduct: INodeProps;\n AProduct: INodeProps;\n id: string | undefined;\n}\n\nlet payLoad: IPayLoad;\nlet telemetryContent: ITelemetryContent | undefined;\n\n/**\n * ProductSuggestionsComponent.\n * @param props\n */\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\n const {\n suggestions,\n hitSuffix,\n hitPrefix,\n autoSuggestProps: {\n context: { actionContext },\n resources: { productSuggestionHeading }\n },\n moduleType,\n moduleId\n } = props;\n const reactNodes: ISearchProductItemViewProps[] = [];\n telemetryContent = props.telemetryContent;\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\n });\n\n const titleNode = _renderTitle(productSuggestionHeading);\n\n return { title: titleNode, items: reactNodes };\n};\n\nconst _renderTitle = (productSuggestionHeading: string) => {\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\n\n return
  • {productAutoSuggestionHeading}
  • ;\n};\n\nconst _assembleNode = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps,\n moduleType: string,\n moduleId: string\n): ISearchProductItemViewProps => {\n const altText =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n const price = item.Value3?.Value?.DecimalValue;\n return {\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\n price: !ObjectExtensions.isNullOrUndefined(price) && _renderPrice(price, price, moduleId, moduleType, props),\n LiProduct: _getLiWrapper(),\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext, props),\n id: item.Id\n };\n};\n\nconst _getLiWrapper = () => {\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'li' as NodeTag\n };\n};\n\nconst _getAWrapper = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps\n) => {\n const {\n autoSuggestProps: { context }\n } = props;\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n payLoad.contentAction.recid = item.Id;\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const productPrice = context.cultureFormatter.formatCurrency(item.Value3!.Value!.DecimalValue!);\n\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'a' as NodeTag,\n 'aria-label': `${ariaLabel!} ${productPrice}`,\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\n ...attribute\n };\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n return suggestion.Value && suggestion.Id\n ? getProductPageUrlSync(formattedLink, (suggestion.Id as unknown) as number, actionContext, undefined)\n : '';\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n return (\n // eslint-disable-next-line react/no-danger\n \n );\n};\n\nconst _renderPrice = (\n adjustedPrice: number,\n basePrice: number,\n moduleId: string,\n moduleType: string,\n props: ISearchProductSuggestProps\n): JSX.Element | null => {\n const {\n autoSuggestProps: { context }\n } = props;\n\n return (\n \n );\n};\n\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\n const {\n autoSuggestProps: {\n context: {\n request: { gridSettings }\n },\n config: { imageSettings }\n }\n } = props;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (!suggestion || !suggestion.ImageUrl) {\n props.telemetry.error('Search suggestion content is empty, module wont render.');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=40&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\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 { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, getUrlSync } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\nimport * as React from 'react';\n\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\nimport {\n CategorySuggestionsComponent,\n FormComponent,\n ISearchCategoryViewProps,\n ISearchKeywordViewProps,\n ISearchProductViewProps,\n KeywordSuggestionsComponent,\n LabelComponent,\n ProductSuggestionsComponent\n} from './components';\nimport { ISearchData } from './search.data';\nimport { ISearchProps, ISuggestionTypeCriterionData, SuggestionTypeCriterionSuggestionType } from './search.props.autogenerated';\n\nexport interface ISearchState {\n isSearchFormExpanded: boolean;\n searchText: string;\n searchKeywordSuggestClass: string;\n searchProductSuggestClass: string;\n searchCategorySuggestClass: string;\n suggestions: Autosuggestions | undefined;\n searchRefiners?: ProductRefiner[] | undefined;\n autoSuggestAriaLabel: string;\n isInitialState: boolean;\n isLoadingAutoSuggest?: boolean;\n}\n\nexport interface ISearchViewProps extends ISearchProps {\n Search: IModuleProps;\n AutoSuggestAriaLabel: INodeProps;\n AutoSuggestAriaLabelText: string;\n searchText: string;\n AutoSuggest: INodeProps;\n KeywordSuggest: INodeProps;\n ProductSuggest: INodeProps;\n CategorySuggest: INodeProps;\n SearchForm: INodeProps;\n FormWrapper: INodeProps;\n UlKeyword: INodeProps;\n UlProduct: INodeProps;\n UlCategory: INodeProps;\n label: React.ReactNode;\n form: React.ReactNode;\n autosuggestKeyword?: ISearchKeywordViewProps;\n autosuggestProduct?: ISearchProductViewProps;\n autosuggestCategory?: ISearchCategoryViewProps;\n callbacks: {\n handleCancelSearchChange(): void;\n handleCancelSearchFocused?(): void;\n };\n isSearchFormExpanded: boolean;\n isLoadingAutoSuggest?: boolean;\n isLoadingNode?: React.ReactNode;\n}\n\n/**\n *\n * Search module.\n * @extends {React.Component, ISearchState>}\n */\nclass Search extends React.Component, ISearchState> {\n private readonly searchTextInput: React.RefObject;\n\n private readonly searchCollapsedLabel: React.RefObject;\n\n private readonly formReference: React.RefObject;\n\n private readonly maxChars: number;\n\n private readonly topResultsCount?: number;\n\n private readonly hitPrefix: string = '{';\n\n private readonly hitSuffix: string = '}';\n\n private readonly waitTime: number = 500;\n\n private readonly autoSuggestResultScreenReaderDiv: React.RefObject;\n\n private readonly autoSuggestResultDiv: React.RefObject;\n\n private readonly searchFormClass: string;\n\n private readonly searchLabelClass: string;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private loadSuggestionsRequestId?: string;\n\n private inputSuggestionType: ISuggestionTypeCriterionData[];\n\n // @ts-expect-error\n private cancellabelDebounce: debounce;\n\n public constructor(props: ISearchProps) {\n super(props);\n this.searchTextInput = React.createRef();\n this.searchCollapsedLabel = React.createRef();\n this.autoSuggestResultScreenReaderDiv = React.createRef();\n this.autoSuggestResultDiv = React.createRef();\n this.formReference = React.createRef();\n this.state = {\n isSearchFormExpanded: false,\n searchText: '',\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\n suggestions: undefined,\n searchRefiners: undefined,\n autoSuggestAriaLabel: '',\n isInitialState: true,\n isLoadingAutoSuggest: false\n };\n this.maxChars =\n (this.props.context &&\n this.props.context.app &&\n this.props.context.app.config &&\n this.props.context.app.config.searchInputMaxLength) ||\n 50;\n\n this.inputSuggestionType = [];\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\n this.searchFormClass = 'ms-search__form';\n this.searchLabelClass = 'ms-search__label';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this._initSuggestionTypes();\n }\n\n public async componentDidMount(): Promise {\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\n window && window.addEventListener('keyup', this._keyup);\n }\n\n public componentWillUnmount(): void {\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\n window && window.removeEventListener('keyup', this._keyup, false);\n }\n\n public componentDidUpdate(): void {\n const {\n config: { hideSearchLabel }\n } = this.props;\n const { isSearchFormExpanded, isInitialState } = this.state;\n\n if (!this.props.context.request.params.isEditor) {\n if (!hideSearchLabel && isSearchFormExpanded) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else if (!isInitialState) {\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: ISearchProps, nextState: ISearchState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- ignore complexity.\n public render(): JSX.Element {\n const {\n context,\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, shouldShowFullCategoryPath, className = '' }\n } = this.props;\n\n const {\n isSearchFormExpanded,\n searchText,\n searchKeywordSuggestClass,\n searchProductSuggestClass,\n searchCategorySuggestClass,\n suggestions,\n searchRefiners,\n isLoadingAutoSuggest\n } = this.state;\n\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\n\n const keywordSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Keyword || suggestion.SuggestionType === SuggestionType.None\n );\n const productSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Product\n );\n const categoryRefiners = searchRefiners?.find(refiner => {\n return refiner.SourceValue === ProductRefinerSource.Category;\n });\n const categorySuggestions = suggestions?.AllSearchResults?.filter(suggestion => {\n if (suggestion.SuggestionType !== SuggestionType.Category) {\n return false;\n }\n const refiner = categoryRefiners?.Values?.find(item => {\n return `${item.RefinerRecordId ?? 0}` === suggestion.Id;\n });\n\n return !ObjectExtensions.isNullOrUndefined(refiner);\n });\n\n const viewProps: ISearchViewProps = {\n ...(this.props as ISearchProps),\n\n Search: {\n moduleProps: this.props,\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`\n },\n AutoSuggestAriaLabel: {\n tag: 'div',\n className: 'msc-autoSuggest__screen-reader',\n 'aria-live': 'assertive',\n ref: this.autoSuggestResultScreenReaderDiv\n },\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\n searchText: this.state.searchText,\n AutoSuggest: {\n ref: this.autoSuggestResultDiv,\n className: 'ms-search__autoSuggest'\n },\n KeywordSuggest: {\n className: searchKeywordSuggestClass\n },\n ProductSuggest: {\n className: searchProductSuggestClass\n },\n CategorySuggest: {\n className: searchCategorySuggestClass\n },\n SearchForm: {\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\n },\n FormWrapper: {\n tag: 'form',\n ref: this.formReference,\n className: 'ms-search__searchForm',\n 'aria-label': 'Search',\n name: 'searchForm',\n role: 'search',\n action: searchURL,\n autoComplete: 'off',\n onSubmit: this._handleSubmit\n },\n UlKeyword: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__keywordResults-items', className)\n },\n UlProduct: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__productResults-items', className)\n },\n UlCategory: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__categoryResults-items', className)\n },\n label: LabelComponent({\n isSearchFormExpanded,\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\n searchtext,\n searchLabelArialLabel,\n searchCollapsedLabel: this.searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange: this._handleCancelSearchChange,\n telemetryContent: this.telemetryContent\n }),\n form: FormComponent({\n ariaLabelCancel: cancelBtnAriaLabel,\n ariaLabelSearch: searchBtnAriaLabel,\n ariaLabelSubmit: submitBtnAriaLabel,\n hideSearchLabel,\n searchTextInput: this.searchTextInput,\n disableSubmitSearch,\n handleInputChange: this._handleInputChange,\n handleCancelSearchChange: this._handleCancelSearchChange,\n maxChars: this.maxChars,\n searchQsp,\n searchPlaceholder,\n query: searchText\n }),\n autosuggestKeyword:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (keywordSuggestions && ArrayExtensions.hasElements(keywordSuggestions)))\n ? KeywordSuggestionsComponent({\n searchKeywordSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: keywordSuggestions,\n telemetryContent: this.telemetryContent\n })\n : undefined,\n autosuggestProduct:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (productSuggestions && ArrayExtensions.hasElements(productSuggestions)))\n ? ProductSuggestionsComponent({\n searchProductSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: productSuggestions,\n telemetry: this.props.telemetry,\n moduleType: this.props.typeName,\n moduleId: this.props.id,\n telemetryContent: this.telemetryContent,\n resources: this.props.resources\n })\n : undefined,\n autosuggestCategory:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (categorySuggestions && ArrayExtensions.hasElements(categorySuggestions)))\n ? CategorySuggestionsComponent({\n searchCategorySuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: categorySuggestions,\n searchRefiners,\n telemetryContent: this.telemetryContent,\n shouldShowFullPath: shouldShowFullCategoryPath\n })\n : undefined,\n callbacks: {\n handleCancelSearchChange: this._handleCancelSearchChange,\n handleCancelSearchFocused: this._handleCancelSearchFocused\n },\n isSearchFormExpanded: this.state.isSearchFormExpanded,\n isLoadingAutoSuggest,\n isLoadingNode: this._isLoadingNode()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initSuggestionTypes() {\n const suggestionTypes = this.props.config.suggestionTypeCriterion;\n\n const suggestions = ArrayExtensions.unique(ArrayExtensions.validValues(suggestionTypes));\n if (!ArrayExtensions.hasElements(suggestions)) {\n this.inputSuggestionType = [\n { SuggestionType: SuggestionTypeCriterionSuggestionType.keyword },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.product },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.scopedCategory }\n ];\n return;\n }\n\n const validSuggestions = suggestions.filter(suggestion => suggestion.SuggestionType);\n if (ArrayExtensions.hasElements(validSuggestions)) {\n this.inputSuggestionType = validSuggestions;\n return;\n }\n\n this.inputSuggestionType = [];\n }\n\n /**\n * Function to create the ReactNode for loading Autosuggest result.\n * @returns ReachNode for loading Autosuggest result.\n */\n private readonly _isLoadingNode = (): React.ReactNode => {\n const loadingText = this.props.resources.autoSuggestResultLoadingMessage;\n return ;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _focusOutTarget = (e: any): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.target.closest('.ms-search') === null) {\n this._clearAutoSuggestState();\n }\n };\n\n private readonly _keyup = (e: KeyboardEvent): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\n this._clearAutoSuggestState();\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n\n if (\n !(\n (this.formReference.current && this.formReference.current.contains((e.target as unknown) as Node)) ||\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains((e.target as unknown) as Node))\n )\n ) {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n };\n\n private readonly _clearAutoSuggestState = (): void => {\n const {\n context: { actionContext },\n data: { searchState }\n } = this.props;\n\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\n searchState.searchText = '';\n searchState.defaultBasicSearchUrl = '';\n searchState.searchQueryStringParameter = '';\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\n this.searchTextInput.current.value = '';\n }\n\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\n };\n\n private async _getSearchSuggestions(loadSuggestionsRequestId: string, query: string) {\n try {\n const searchSuggestions = await getSearchSuggestionsAction(\n new AutoSuggestInput(query, this.topResultsCount, this._getSuggestionType(), this.hitPrefix, this.hitSuffix),\n this.props.context.actionContext\n );\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n return searchSuggestions;\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n this.setState({ suggestions: undefined, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get auto suggest results');\n return undefined;\n }\n }\n\n private async _updateSearchRefiners(loadSuggestionsRequestId: string, query: string, suggestions: Autosuggestions | undefined) {\n try {\n const refiners = await this._getSearchRefiners(query);\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({\n suggestions,\n searchRefiners: refiners,\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions),\n isLoadingAutoSuggest: false\n });\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({ suggestions, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions) });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get refiners results');\n }\n }\n\n private _loadSuggestions(query: string) {\n this.cancellabelDebounce = debounce(async () => {\n this.setState({ isLoadingAutoSuggest: true });\n const loadSuggestionsRequestId = Random.Guid.generateGuid();\n this.loadSuggestionsRequestId = loadSuggestionsRequestId;\n const searchSuggestions = await this._getSearchSuggestions(loadSuggestionsRequestId, query);\n await this._updateSearchRefiners(loadSuggestionsRequestId, query, searchSuggestions);\n }, this.waitTime);\n\n setTimeout(() => {\n this.cancellabelDebounce();\n }, 0);\n }\n\n private readonly _handleInputChange = (query: string): void => {\n if (!query || query.length <= this.maxChars) {\n this.setState({ searchText: query });\n }\n\n if (this.cancellabelDebounce) {\n this.cancellabelDebounce.cancel();\n }\n\n const {\n context,\n data: { searchState }\n } = this.props;\n\n if (context) {\n if (query && query.length > 0) {\n if (query.length > this.maxChars) {\n return;\n }\n\n if (ArrayExtensions.hasElements(this.inputSuggestionType)) {\n this._loadSuggestions(query);\n }\n\n searchState.searchText = query;\n } else {\n this.setState({ suggestions: undefined, searchRefiners: undefined });\n searchState.searchText = '';\n }\n context.actionContext.update(createSearchStateInput(searchState), searchState);\n }\n };\n\n private _getSuggestionType(): string {\n const distinctSuggestionTypes: string[] = this.inputSuggestionType.map(\n suggestionTypeItem => suggestionTypeItem.SuggestionType!.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType!.slice(1)\n );\n return distinctSuggestionTypes.join(',');\n }\n\n private async _getSearchRefiners(searchText: string): Promise {\n const { actionContext: ctx } = this.props.context;\n const catalogId = getCatalogId(ctx.requestContext);\n validateCatalogId(catalogId);\n return ProductsDataActions.getProductSearchRefinersAsync(\n { callerContext: ctx },\n {\n SearchCondition: searchText,\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n }\n );\n }\n\n private readonly _handleSubmit = (\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\n ): void => {\n const {\n config: { disableSubmitSearch },\n context: {\n actionContext,\n app: {\n config: { searchQueryStringParameter }\n }\n }\n } = this.props;\n\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\n e.preventDefault();\n\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else {\n const searchQsp = searchQueryStringParameter || 'q';\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\n document.location.href = searchURL;\n }\n };\n\n private readonly _handleCancelSearchChange = (): void => {\n const { isSearchFormExpanded, suggestions } = this.state;\n\n if (!isSearchFormExpanded) {\n this.setState({\n isSearchFormExpanded: true,\n searchText: '',\n isInitialState: false\n });\n } else {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _handleCancelSearchFocused = (): void => {\n const { suggestions } = this.state;\n if (!(suggestions && suggestions.AllSearchResults)) {\n this._clearAutoSuggestState();\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _appendQueryParams = (route: string, query: string, qsp: string): string => {\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(route, window.location.href);\n if (qsp && query) {\n queryUrl.searchParams.set(qsp, query);\n }\n\n return queryUrl.href;\n };\n\n private readonly _setAutoSuggestResultCount = (result?: Autosuggestions) => {\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\n ariaLiveRegion.innerText =\n result && result.AllSearchResults && result.AllSearchResults.length > 0 ? suggestResultString : emptyResultString;\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\n return ariaLiveRegion.innerText;\n }\n return '';\n };\n}\n\nexport default Search;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionContext, sendRequest } from '@msdyn365-commerce/core';\n\nimport { SubmitUserReviewInput } from './inputs/submit-user-review-input';\n\n/**\n * This data action allows submitting review to the reviews service.\n * @param input This user review submission text.\n * @param ctx The data action context.\n */\nasync function submitReview(input: SubmitUserReviewInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n ctx.trace(`[SubmitUserReview] Failed to submit reviews for product due to bad input ${input}`);\n return '';\n }\n\n const requestUrl =\n `${input.serviceEndpoint}/v2.0/reviews/product/${input.productId}/user?` +\n `tenantId=${input.tenantId}&` +\n `channelId=${input.channelId}&` +\n `locale=${input.locale}`;\n\n return sendRequest(requestUrl, 'post', input.userReviewData, { headers: { Authorization: `id_token ${input.authorization}` } })\n .then(response => {\n if (response.status !== 200 && response.status !== 201) {\n ctx.trace('[SubmitUserReview] Failed to submit reviews for product');\n ctx.trace(response.data);\n return '';\n }\n return response.data;\n })\n .catch(error => {\n ctx.trace('[SubmitUserReview] Failed to submit reviews for product');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[SubmitUserReview] Failed to submit reviews for product');\n ctx.trace(error);\n return '';\n });\n}\n\nfunction inputIsValid(input: SubmitUserReviewInput): boolean {\n return input && !!input.productId && !!input.tenantId;\n}\n\nexport const submitReviewDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/submit-user-review',\n action: >submitReview\n});\n\nexport default submitReviewDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IReviewModalViewProps } from '../../common/review-modal';\nimport { IWriteReviewViewProps } from './write-review';\n\nconst WriteReviewView: React.FC = props => {\n const { heading, signInMessage, signInButton, modalToggle, reviewModal, moduleProps } = props;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n return (\n \n {heading}\n {!isAuthenticated ? (\n <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {modalToggle}\n {createReviewModal(reviewModal, moduleProps)}\n \n )}\n \n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n \n {props.modalHeader}\n \n \n \n {props.rating}\n {props.ratingLabel}\n \n \n {props.titleLabel}\n {props.titleInput}\n \n \n {props.textLabel}\n {props.textInput}\n \n {props.privacyPolicyUrl}\n {props.error}\n \n \n \n {props.submitButton}\n {props.cancelButton}\n \n \n );\n};\n\nexport default WriteReviewView;\n"],"sourceRoot":""}