{"version":3,"sources":["webpack:///src/modules/quick-order-grid/quick-order-grid.tsx?92ff","webpack:///src/modules/header/header.view.tsx?40e5","webpack:///src/modules/order-template-list/components/order-template-list.tsx?f2fd","webpack:///src/modules/order-template-list/components/orderTemplateList-status-message.tsx?dbea","webpack:///src/modules/bulk-purchase/bulk-purchase.view.tsx?2550","webpack:///./src/themes/citta/utilities/quantity/index.ts?7b62","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/order-template/order-template.tsx?4281","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/quick-order-grid/components/quick-order-grid-drawer.tsx?4c7d","webpack:///./src/themes/citta/views/components/promocode.component.tsx?4fb6","webpack:///src/modules/product-collection/product-collection.view.tsx?9eb3","webpack:///src/modules/quick-order-grid/components/quick-order-grid-form.tsx?a8cc","webpack:///src/search-state.ts?b5d7","webpack:///src/modules/active-image/active-image.view.tsx?b3e2","webpack:///./src/themes/citta/views/components/cartlineitem.component.tsx?cc01","webpack:///src/modules/product-collection/product-collection.tsx?b9b8","webpack:///src/modules/order-template/components/add-line/spinner.tsx?28dd","webpack:///src/modules/promo-banner/promo-banner.view.tsx?d069","webpack:///src/modules/quick-order-grid/components/quick-order-grid-actions.tsx?cd72","webpack:///src/modules/order-template/components/add-line/add-line.tsx?add3","webpack:///src/modules/order-template/components/add-line/dropdown.tsx?40af","webpack:///src/modules/order-template/components/add-line/not-found.tsx?00ed","webpack:///src/modules/order-template/components/common/order-template-quantity.tsx?dfc0","webpack:///src/modules/order-template/components/add-line/product-configuration.tsx?ac81","webpack:///src/modules/order-template/components/add-line/product-list.tsx?5107","webpack:///src/modules/order-template/components/order-template-actions.tsx?5f39","webpack:///src/modules/order-template/components/order-template-lines.tsx?cdf6","webpack:///src/modules/order-template/components/order-template-lines-status-message.tsx?0022","webpack:///src/modules/order-template/components/order-template-table-heading.tsx?606c","webpack:///src/modules/quick-order-grid/components/quick-order-grid-product.ts?7530","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/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-header-component.tsx?75dd","webpack:///src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-row-component.tsx?ebf6","webpack:///src/modules/quick-order-grid/components/quick-order-grid-table/quick-order-grid-table-component.tsx?5943","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/modules/order-template-list/components/create-order-template.tsx?81ed","webpack:///src/modules/order-template-list/order-template-list.tsx?bc4a","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/ratings-histogram/component/components.tsx?2a0b","webpack:///src/modules/quick-order-grid/components/add-to-list/add-to-cart-selected-items.tsx?bb15","webpack:///src/index.ts?c6ae","webpack:///src/modules/quick-order-grid/components/index.ts?aeb7","webpack:///src/modules/order-template/order-template.view.tsx?f2c8","webpack:///src/modules/bulk-purchase/bulk-purchase.tsx?d704","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/quick-order-grid/quick-order-grid.view.tsx?2f4c","webpack:///./src/themes/citta/utilities/quantity/Quantity.tsx?c0d4","webpack:///./src/components/price-component.tsx?ebb9","webpack:///src/modules/order-template/components/bulk-actions.tsx?f343","webpack:///src/modules/order-template-list/order-template-list.view.tsx?20f7"],"names":["QuickOrderGrid","React","constructor","props","super","_waitTime","_dimensionUpdateQueueMaxLength","_errorCssClass","_errorCssGlyphClass","_dimensionUpdateQueue","FinitePromiseQueue","this","_dimensions","_cssClassNameConfigure","_className","_quickOrderGridCallbacks","dimensionSelectedAsync","async","selectedDimensionId","selectedDimensionValueId","enqueue","_updateDimensions","catch","error","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","Error","getDropdownName","dimensionType","resources","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","setState","_quickOrderGridRowCallbacks","onRemoveItem","line","_removeItemRowFromTable","productLine","onChangeQuantity","productListLineId","quantity","_changeRowQuantity","_removeProductList","context","data","telemetry","quickOrderTemplate","request","user","isAuthenticated","token","result","ProductListsDataActions","deleteAsync","callerContext","actionContext","productList","then","window","location","reload","warning","_updateStatusState","quickOrderGridDeleteProductListFailedText","_handleInputChange","query","length","productDimensions","productResponse","undefined","_cancellabelDebounce","cancel","StringExtensions","isNullOrEmpty","isQuickOrderGridFormExpanded","_debounce","getScanResult","GetScanResultInput","requestContext","apiSettings","channelId","results","Product","ProductDimensionFull","exception","debug","setTimeout","_handleQuantityChange","value","currentValue","Number","parseInt","inputElement","_quantityInput","current","HTMLInputElement","isNaN","state","setAttribute","toString","_this$state$productRe","isGiftCard","IsGiftCard","ProductDimensionType","Color","productDimensionTypeColor","Configuration","productDimensionTypeConfiguration","Size","productDimensionTypeSize","Style","productDimensionTypeAmount","productDimensionTypeStyle","hasProductDimensions","ArrayExtensions","hasElements","dimensionsToUpdate","_objectSpread","console","log","productDimensionErrorState","otherError","clearOtherErrorState","dimensionKey","Object","keys","configureErrors","errorState","mappedDimensions","map","dimension","_this$_updateDimensio","DimensionTypeValue","DimensionValue","_updateDimensionValue","ExtensionProperties","filter","selectedProduct","Promise","newProduct","getSelectedVariant","SelectedVariantInput","MasterProductId","RecordId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","resolve","variantProduct","productDimensionFull","newValueId","DimensionValues","find","_getDimensionErrorString","dimensionTypeValue","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","_validateCart","_productResponse$Dime","missingDimensions","Dimensions","Value","userMessage","_getConfigureErrors","quickOrderGridWrongQuantityErrorMsg","itemKey","quickOrderTemplateLinesData","quickOrderTemplateLines","orderLineIndex","findIndex","lines","productListLine","LineId","newProductListLine","Quantity","previousQuantity","fullProduct","_objectWithoutProperties","_excluded","updateProductListLinesAsync","Id","list","newLine","updatedLines","updatedProductList","ProductListLines","update","ActiveProductListInput","message","removeProductListLinesAsync","ProductListId","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","productListId","_productResponse$Defa","isNullOrWhitespace","_createProductList","input","AddItemToProductListInput","DefaultUnitOfMeasure","addItemToProductListAction","name","CreateProductListInput","ProductListType","QuickOrder","createProductList","messageText","statusCssString","messageGlyph","isOpen","stateMessage","_productTextInput","_telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","isMobile","products","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","variant","VariantType","Viewport","render","customerInformation","className","maxQuantity","config","customerInfo","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","productConfigureResources","selectDimensionFormatString","headerClassName","header","Heading","text","viewProps","quickOrderGridProps","classnames","moduleProps","contentProps","isB2bCustomer","IsB2b","actions","tag","drawer","QuickOrderGridDrawer","collapseProps","moduleHeadingText","moduleDescriptionText","telemetryContent","bulkPurchase","_renderBulkPurchase","quickOrderGridForm","quickOrderGridFormProductContent","quickOrderGridFormMsgContent","form","QuickOrderGridFormComponent","productTextInput","quantityTextInput","isAddtoListDisabled","ariaLabelAddtoCart","ariaLabelProduct","ariaLabelQuantity","maxChars","moduleClassName","quickOrderGridState","handleInputChange","handleQuantityChange","handleAddProductListClick","configure","getProductConfigure","isMobileView","container","_renderListContainer","orderActions","_renderQuickOrderGridActions","renderView","typeName","quickOrderGridDeleteButtonText","quickOrderGridBuySelectedButtonText","quickOrderGridBuySelectedButtonAriaLabel","quickOrderGridBuySelectedAddingToCartErrorNotificationTitle","quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel","quickOrderGridGoToCartText","quickOrderGridDialogCloseText","quickOrderGridSingleItemText","quickOrderGridMultiLineItemFormatText","quickOrderGridMultiLinesFormatText","quickOrderGridHeaderMessageText","addedQuantityText","originalPriceText","currentPriceText","freePriceText","quickOrderGridActions","id","handlers","removeProductList","QuickOrderGridActionsView","app","isBulkPurchaseEnabled","slots","bulkPurchaseSlots","containerClass","_renderQuickOrderTable","_initQuickOrderGridProducts","quickOrderGridProduct","product","QuickOrderGridProduct","validValues","tableClassName","QuickOrderGridTableComponent","moduleId","moduleTypeName","key","quickOrderGridProducts","callBacks","dimensions","__decorate","computed","_renderReactFragment","items","slot","index","headerView","HeaderTag","HeaderContainer","HeaderTopBarContainer","MobileMenuContainer","MobileMenuBodyContainer","MobileMenuLinksContainer","Divider","Module","assign","Node","navIcon","logo","search","preferredStore","currentDistributor","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","accountInfoDropdownButton","signOutLink","signInLink","accountLinks","link","_renderDesktopAccountBlock","wishListIconDesktop","cartIcon","siteOptions","MobileMenuHeader","menuBar","wishListIconMobile","OrderTemplateActions","onRemoveOrderTemplate","removeOrderTemplateActionHandler","OrderTemplateRender","orderTemplate","removeFromOrderTemplateListText","orderTemplateState","imageSettings","enableImageProductLink","onDismiss","orderTemplateImage","_renderOrderTemplateImages","orderTemplateLines","orderTemplateAriaLabel","_renderAriaLabel","orderTemplateName","href","_getOrderTemplatePageUrl","_getUrlSync","url","getUrlSync","separator","includes","totalLines","color","addToCartButton","AddOrderTemplateToCartComponent","addToCartText","addToBagText","dialogStrings","isMultipleCatalogFeatureEnabledInHq","removeButton","Button","onClick","orderTemplateStatusMessage","Alert","toggle","onClickHandler","productUrl","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","count","slice","_line$productListLine","_line$fullProduct$Pro","_line$fullProduct","_line$fullProduct2","_line$fullProduct$Pro2","_line$fullProduct3","_getFallbackImageUrl","_line$fullProduct4","_context$request$app","_updateProductUrlCatalog","ProductDetails","CatalogId","Image","altText","Name","src","PrimaryImageUrl","fallBackSrc","getFallbackImageUrl","ItemId","OmniChannelMedia","gridSettings","loadFailureBehavior","productDetails","catalogId","getProductUrlSync","fullUrl","URL","searchParams","set","OrderTemplateListStatusMessage","_ref","errorType","BulkPurchaseViewComponent","content","HeaderPreferredStore","modalCloseButtonRef","handleClick","_findPreferredStoreOnClick","storeSelectorStateManager","storeSelector","storeName","StoreName","headerPreferredStoreText","headerPreferredStoreAriaLabel","ref","modules","storeSelectorId","openDialog","showMapViewLink","parentElementRef","onLocationSelected","orgUnitLocation","observer","Logo","payLoad","getPayloadObject","TelemetryConstant","attributes","getTelemetryAttributes","_renderLogo","linkUrl","destinationUrl","ariaLabel","target","openInNewTab","rel","_renderImage","Msdyn365","image","editProps","moduleType","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","title","mobileHamburgerAriaLabel","isExpanded","targetId","Header","isB2BSite","handleLinkTextChange","linkIndex","event","_this$props$config$my","myAccountLinks","linkText","popOverRef","_toggleNavbar","bind","_togglePopover","_keydown","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","isChannelTypeB2B","_this$props$context$r","MsDyn365","workerName","customerName","_this$props$data$empl","worker","employee","_this$props$data$acco","customer","accountInformation","FirstName","componentDidMount","isBrowser","addEventListener","reaction","cart","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","signInCustomerNotAuthorizedTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","componentWillUnmount","removeEventListener","wishlists","cartLabel","cartQtyLabel","logoLink","logoImage","shouldShowWishlistCount","disableTooltip","headerToggleClass","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","currentDistributorSlot","CommerceListLines","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","CartIconComponent","headerAriaLabel","Modal","wrapClassName","ModalHeader","ModalBody","displayName","Popover","placement","_getSigninButton","_getSignOutButton","isOBORequest","switchCustomerLink","_getSwitchCustomerButton","_getAccountInfoDropdownButton","_getAccountLinks","slotName","SignIn","signInLinkText","signInUrl","signInLinkAriaText","onTelemetryClick","_user$signOutUrl","SignOut","signOutLinkText","signOutUrl","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","cookies","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","role","removeAccountSelectionCookie","format","shoppingAsText","route","forEach","param","delete","retailServerErrorCode","signUpCustomerNotFound","signUpMultipleCustomerFound","signInCustomerNotAuthorized","retailServerErrorMessage","MyProfile","innerRef","cta","contentAction","etext","editableLink","additionalProperties","onTextChange","keyCode","KeyCodes","Escape","OrderTemplateLines","_isChannelMultipleCatalogsFeatureEnabled","_this$props$data$feat","featureState","feature","IsEnabled","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","productSelection","productListLines","isChecked","maxWaitTimeInMilliSeconds","_this$props$data$orde","substr","indexOf","_onAddSelectionToBag","selectedLines","_productLine$fullProd","_productLine$fullProd2","_productLine$fullProd3","_productLine$fullProd4","_productLine$productL","ProductTypeValue","BasePrice","Price","AdjustedPrice","_addItemToBag","_getCurrentUrl","reqContext","requestUrl","onCloseHandler","isItemAddedToOrderTemplateOpen","_renderItemAddedToCartDialog","_this$props$data$feat2","itemAddedToCartDialogData","ItemAddedToCartDialog","_generateItemAddedToCartDialogResources","modalOpen","onClose","_renderPagination","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","isDetailsDisplayed","detailedProductView","OrderTemplateMobileLineView","absoluteUrl","_onDismiss","_changeQuantity","orderTemplateLinesData","prevQuantity","isQuantityDisabledForUpdate","updatedOrderTemplate","ActiveOrderTemplateLinesInput","editOrderTemplateLineQuantityError","maxQuantityLimitText","addedToCartFailureMessage","addProductToCartInput","addProductToCart","status","getPriceForSelectedVariant","PriceForSelectedVariantInput","priceResult","AsyncResult","reject","isMiniCart","addToCartBehavior","productPrice","substatus","maxQuantityForCartLineItem","_cart$result","_cart$result2","cartLineQuantity","CartLines","ProductId","defaultMessage","replace","_removeItemFromOrderTemplateLines","userToken","featureStates","getFeatureState","createGetFeatureStateInput","_featureStates$find","getCatalogId","_renameTemplate","_removeTemplate","_orderTemplate$result","deleteOrderTemplateFailedText","newLink","_getViewport","device","Type","innerWidth","sm","md","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","params","isEditor","heading","shouldComponentUpdate","nextProps","nextState","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","ObjectExtensions","isNullOrUndefined","errorProps","statusMessage","Spinner","msg","progressNotificationText","OrderTemplateLinesStatusMessage","orderTemplateResult","_isFirstPage","emptyViewProps","_renderOrderTemplateActions","bulkOrderLineActions","_getOrderTemplateLineActions","productsStatusMessage","ProductsTable","ProductsTableRow","ProductsTableHeading","_renderProductListHeader","orderLines","_renderProductList","callbacks","updateQuantity","debounce","pagination","itemAddedToCartDialog","toggleDetailsDisplayed","onSelect","updated","_product$fullProduct","onSelectAll","productImage","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","productActionsText","selectAllRowsText","productLineCatalogName","headers","productNumber","productName","productUnitPrice","productUOM","productQuantity","productActions","clickHandler","OrderTemplateTableHeading","orderTemplateId","OrderTemplateBulkActions","onAddSelectionToBag","onRemoveSelection","isMinifiedView","_generateLinesAddedToCartDialogResources","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","addTemplateToBagButtonText","renameTemplateButtonText","deleteTemplateButtonText","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","orderTemplateActions","onRenameTemplate","onRemoveTemplate","renameOrderTemplateDialogStrings","_generateOrderTemplateNameDialogResources","linesAddedToCartDialogResources","OrderTemplateActionsView","orderTemplateHeaderLabel","renameOrderTemplateTitleText","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","renameOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelBtnLabel","skip","selectOneRowText","moreButtonText","viewProductDetailsText","priceFree","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","inputQuantityAriaLabel","deleteButtonText","incrementButtonAriaLabel","decrementButtonAriaLabel","unavailableProductErrorMessage","outOfStockProductErrorMessage","catalogs","currentProductProps","orderTemplateLine","price","ProductPrice","shouldDisable","onAddToBag","removeFromOrderTemplateLinesText","addToBagButtonText","OrderTemplateLineView","observable","action","RatingsHistogram","handleHeadingChange","selectFilterBy","ratingsSummary","ratingCount","totalRatingsCount","completeClass","classname","histogramItems","HistogramItems","locale","averageRating","RatingComponent","avgRating","averageRatingAriaLabel","readOnly","hideCount","averageNumber","AverageRatingNumber","summary","totalReviews","TotalReviews","ratingsSummaryProps","onEdit","histogramProps","stars","filterKey","createRatingsReviewsStateInput","renderLabel","arguments","rating","ratingAriaLabel","ratingLabel","roundedRating","toFixed","ProductComponent","msdyn365Commerce","createComponent","component","savingsText","imageOrientation","AttributeValues","property","TextValue","getProductPageUrlSync","productImageSettings","disableLazyLoad","cmsImageSettings","attribute","setTelemetryAttribute","pid","pname","mname","createElement","cultureFormatter","formatCurrency","AverageRating","imageUrl","img","imageProps","renderProductPlacementImage","basePrice","adjustedPrice","CustomerContextualPrice","PriceComponent","renderPrice","description","Description","totalRatings","numRatings","renderRating","TotalRatings","_renderCarousel","carouselContainer","PropDetails","item","_renderProduct","_renderGrid","gridContainer","orientationClass","_property$Name","toLowerCase","getImageOrientation","ProductCollectionView","ProductCollectionContainer","SingleSlideCarouselComponentProps","GridComponentProps","isCarousel","productCollection","_props$collapseProps$","_props$collapseProps","preventDefault","_isManuallyToggled","onToggle","previousState","_drawerGlyphClass","toggleGlyphClassName","closeGlyph","isAnimateGlyph","_drawerOpenGlyph","openGlyph","_drawerCloseGlyph","children","drawerClass","drawerButtonClassName","toggleButtonProps","block","disabled","isDisabled","_generateDrawerButtonInnerMarkup","Collapse","isCollapseState","drawerButtonTextClass","toggleButtonClassName","headingDrawerClass","descriptionDrawerClass","_generateGlyphMarkup","glyphClass","PromoCode","_onInputChange","e","promoCodeInputValue","canApply","_applyPromotion","cartState","appliedPromo","addPromoCode","promoCode","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","_renderForm","promoPlaceholderText","promoCodeApplyButtonText","onSubmit","onChange","placeholder","_removePromotion","code","currentTarget","getAttribute","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_calculateDiscount","discountAmount","DiscountLines","discountLine","DiscountCode","DiscountCost","_renderAppliedPromoCode","Coupons","appliedPromoCodeHeadingText","DiscountAmount","coupon","removePromoAriaLabelFormat","removePromoText","Code","isCollapseOpen","promoCodeHeadingText","ProductContainer","productComponent","seeAllButton","onInputChange","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","type","quantityNode","pattern","maxLength","addToListBtn","SearchState","activeImageView","activePointContainer","activePointDetailsContainer","imageMapper","detailsContainer","additionalContent","additionalContentNode","additionalContentContainer","additionalContentItemLinks","links","detailsContainerCta","style","top","productCardtopPosition","left","productCardleftPosition","overlay","productCard","CartLineItemFunctions","renderProductDimensions","DimensionStrings","productDimension","colorString","configString","sizeString","DimensionLine","defaultValue","styleString","_props$context","CartLine","cartLine","isB2B","platform","enableDefaultOrderQuantityLimits","OfferId","OfferName","discountStringText","isSalesLine","PeriodicDiscount","DiscountAmountWithoutTax","Percentage","actionInput","AttributesForSelectedVariantInput","getAttributesForSelectedVariant","res","destructDimensionStrings","fallbackImageUrl","productSKU","renderDisountLines","newValue","quantityOnChange","_generateErrorMessage","errorMessage","primaryImageUrl","TaxAmount","NetAmountWithoutTax","_generateQuantityandPrice","_props$context3","nodes","isQuantityEditable","IsGiftCardLine","_props$context2","_props$data","eoqQuantity","Behavior","MultipleOfQuantity","push","quantityDisplayString","max","currentCount","currentQuantity","min","salesLineSkuText","ProductCollection","_getProductsDimensionsAvailabilities","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","DimensionTypes","none","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","initProductState","productCollectionProducts","equals","_getProduct","_this$state$productsD","trace","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","validateCatalogId","searchPageLink","seeAllButtonText","productPrices","enableAffiliationBasedPricing","shouldDisplaySeeAllButton","recommendationListId","layout","headingComponent","updatedProducts","getProductData","productCollectionViewProps","SingleSlideCarousel","flipperPrevLabel","flipperNextLabel","parentId","PromoBannerView","promoBannerProps","closeButton","bannerMessages","promoBannerTextProps","promoBannerLinksProps","carouselProps","promoBannerText","handleLinks","handleText","slides","getQuickOrderGridAddToCartDialog","AddToCartProductListComponent","removeActionHandler","removeQuickOrderList","addProductListToBag","CONTENT","AddLineToTemplate","Component","productCatalogs","Search","selectedCatalogId","searchTextInput","createRef","addLineButtonRef","_renderSearchForm","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","autoComplete","_onSearchSubmit","Fragment","htmlFor","_onCatalogSelectionChange","_getCatalogNodes","autoFocus","_get","Loading","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","_onSelectItem","varianteInput","productVariant","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","RegExp","dangerouslySetInnerHTML","__html","_resultCountText","searchResultsCountVerbage","searchResultsCountSubject","_addItemToTemplateHandler","AddItemToOrderTemplateInput","addItemToOrderTemplate","reloadPage","_toggleModalHandler","_getCatalogs","focus","onComponentDidMount","_this$searchTextInput","onComponentDidUpdate","_this$searchTextInput2","addLineModalLinkText","backToResultsText","modalProps","showBackArrow","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","renderResultCountText","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","productCatalog","isSelected","selected","searchText","searchCriteriaInput","Context","ChannelId","IncludeAttributes","SearchCondition","searchByCriteriaAsync","Dropdown","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","selectedValue","innerText","dropdownList","dropdownName","OrderTemplateQuantity","inputRef","_validateMin","minValue","currentInput","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","incDisabled","extraClass","getChangeHandler","amount","_onIncrementalChange","tabIndex","onBlur","updatedQuantity","defaultProps","selectedDimensions","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","isBusy","showAddConfirmation","errors","add","addToTemplateDuplicateError","addToTemplateGenericError","_onQuantityChange","totalPrice","_onDimensionChanged","_this$state$errors","remainingDimensionsErrors","selection","buttonDisabled","dimensionInput","variantDimensions","availabilityInput","ProductAvailabilitiesForSelectedVariantInput","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","priceInput","productAvailableQuantity","unitPrice","sort","a","b","_product$Name","_product$PrimaryImage","_product$Name2","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","isMultipleCatalogSelect","_formatPrice","_getDimensionsNodes","ModalFooter","_getConfirmationMessage","selectedDimensionNames","_dimension$DimensionV","addToTemplateConfirmation","values","join","_this$state$errors2","unshift","assertive","currencyCode","selectProductButtonText","_generateImageUrl","_props$context$reques","primaryImageSource","generateImageUrl","fallBackImg","ProductSelectButton","buttonText","setBusy","useState","getClickHandler","useCallback","removeOrderActionHandler","_removeOrderTemplate","addTemplateToBag","_getOrderTemplateAddToCartDialog","renameTemplate","_getOrderTemplateRenameControl","removeTemplate","actionsSplitButton","ActionsSplitButton","RenameOrderTemplateComponent","buttonEventReference","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","onToggleDropdown1","popoverReference","renderModalPopup","OrderTemplateNameDialog","existingOrderTemplate","isUpdateDialog","setModalOpen","onCancel","onOrderTemplateNameCancel","_buttonEventReference","onSuccess","requestStatementDropdownString","Random","Guid","generateGuid","OrderTemplateLineActions","getAddToBag","getRemoveItem","PopUp","showMobile","setShowMobile","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","checked","UnitOfMeasure","fallbackImage","selectLine","productLineCatalog","renderProductCatalog","_renderProductImage","productInfo","renderProductInfo","_renderPrice","_renderProductError","productUnitOfMeasure","productQuantityView","_generateQuantity","addToBagButton","extraActionsPopup","ExtraActionsPopup","popUp","showActions","setShowActions","_context$request$app2","onChangeHandler","_context$actionContex","_context$request","isB2b","catalog","OOS","UNASSORTED","NONE","_orderTemplateLine$fu","_renderProductDimensions","dimensionsLine","componentClassName","getOnChange","checkedLines","scope","PromoBannerCloseButton","closeButtonAriaLabel","label","PromoBannerClose","PromoBannerLinks","editableLinks","_mapEditableLinks","linkdata","PromoBannerText","PromoBanner","animating","isVisible","activeIndex","handleTextChange","handleLinkClick","_next","nextIndex","_isLastItem","_goToIndex","_previous","_isFirstItem","dismissEnabled","interval","hideFlipper","autoplay","closeButtonLabel","PromoBannerTextProps","PromoBannerLinksProps","CarouselProps","Carousel","next","previous","onIndicatorsClickHandler","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","orderSummary","subtotal","_props$data$checkout$10","checkout","checkoutCart","OrderSubTotal","subTotalLabel","_renderSubTotal","totalDiscounts","_props$data$checkout$6","chargeLines","ChargeLines","chargeAmountInclTax","_props$orderSummary","chargeLine","IsShipping","chargeAmountInclTaxLocal","GrossAmount","shipping","shippingLabel","_renderShippingInclTaxes","_props$data$checkout$","_props$data$checkout$2","_props$data$checkout$3","_props$data$checkout$4","_props$data$checkout$5","ChargeAmount","shippingCharges","ShippingChargeAmount","otherChargesAmountFromLines","totalChargeAmountFromLines","chargesOverriden","displayOtherChargesAmount","shippingChargesFromLines","freightChargeCode","CalculatedAmount","ChargeCode","_renderOtherCharges","hideTaxLine","tax","_props$data$checkout$11","OrderTotal","TotalAmount","totalAmountLabel","_renderTotalOrder","loyalty","giftCard","orderTotal","_props$data$checkout$7","totalSavingsLabel","_renderTotalSavings","_props$data$checkout$8","_props$data$checkout$9","shippingAmount","DeliveryModeChargeAmount","AmountDue","freeShippingAmount","Math","ceil","_renderFreeShippingMessage","_getCheckoutSummaryText","paragraph","CheckoutView","canShow","checkoutProps","headerProps","hasSalesOrder","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","orderConfirmation","loading","alert","guidedForm","placeOrderButton","termsAndConditions","keepShoppingButton","decodeURI","urlParams","URLSearchParams","get","has","orderToken","QuickOrderGridDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","rowClassName","headerCells","cropFocalRegion","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_props$imageSettings","containerClassName","setShowPreviousActions","onRemoveHandler","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","onClickViewDetails","shouldShowActionsNewValue","actionsContainerClassName","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_product$Dimensions","_productListLine$Line","dimensionValue","quickOrderGridProductDimensionsSeparator","renderProductPrice","renderUnitOfMeasure","IncrementalQuantity","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","setIsMobile","updateViewport","quickOrderProduct","_quickOrderProduct$pr","_quickOrderProduct$pr2","_renderButton","SearchBtn","BtnWrapper","searchBtn","SearchForm","FormWrapper","searchLabel","searchLabelText","cancelBtn","_renderKeywordSuggestions","KeywordSuggest","UlKeyword","keywordSuggestions","_renderProductSuggestions","ProductSuggest","UlProduct","productSuggestions","LiProduct","AProduct","_renderCategorySuggestions","CategorySuggest","UlCategory","categorySuggestions","SearchView","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","autosuggestCategory","autosuggestKeyword","autosuggestProduct","ratingId","_totalRatings$toStrin","numberRatings","getRatingAriaLabel","ActiveProductComponent","imgData","productId","hideRating","assembleNode","_item$links","renderHeading","additionalContentHeading","handleAdditionalTextChange","subtext","renderParagraph","additionalContentParagraphText","ctaLink","renderLinks","isOpenInNewTab","handleAdditionalLinkTextChange","activeImageAdditionalContent","CanvasCalculations","CanvasStyles","ImageMapper","_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","document","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","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","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","areaId","updateClientWidth","viewport","Browser","renderImageMapper","_this$props$config$ac","productResults","activePoints","configProduct","itemId","_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","handleParagraphChange","renderActiveImageDetailsLinks","linkData","linkId","willOpenInNewTab","renderActiveImageDetailsHeading","_heading$tag","renderActiveImageDetailsParagraph","getActiveImageId","activeImageId","_activeImageIdPart$","activeImageSource","split","decrementOne","_handleOutsideClick","_this$_productCardDiv","contains","timeoutInterval","images","getElementsByClassName","Array","from","removeAttribute","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","handleAdditionalLinkText","_this$props$config$ad","SuggestionType","AutoSuggestInput","suggestionType","hitPrefix","hitSuffix","getCacheKey","getCacheObjectType","dataCacheType","searchQuery","topResultsCount","_getAutoSuggest","autosuggest","ctx","searchCriteria","ProductSearchCriteria","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","queryResultSettings","Paging","Top","ImageUrl","AllSearchResults","createObservableDataAction","autoSuggestPromises","all","inputData","KeywordSuggestionsComponent","suggestions","reactNodes","_assembleNode","_generateLink","_getHighlightedText","suggestion","searchPageURL","searchQsp","formattedLink","formattedText","getRichTextHtml","ProductSuggestionsComponent","autoSuggestProps","productSuggestionHeading","_renderTitle","productAutoSuggestionHeading","Value3","DecimalValue","_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","disableSubmitSearch","handleCancelSearchChange","handleSearchClick","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","inputNode","submitBtnNode","searchBtnNode","submitBtn","LabelComponent","searchLabelClass","searchLabelArialLabel","searchtext","searchCollapsedLabel","waitTime","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","classList","formReference","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","createSearchStateInput","_handleSearchClick","updatedIsSearchFormExpanded","headerElem","querySelector","documentElement","scrollTop","remove","cancellabelDebounce","getSearchSuggestionsAction","_getSuggestionType","inputSuggestionType","_getSearchRefiners","autoSuggestAriaLabel","_setAutoSuggestResultCount","suggestionTypes","distinctSuggestionTypes","suggestionTypeItem","charAt","toUpperCase","_handleSubmit","searchURL","_appendQueryParams","_handleCancelSearchChange","isInitialState","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","inSearchMode","searchInputMaxLength","suggestionTypeCriterion","searchFormClass","searchBtnClass","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","i","Keyword","None","Category","getProductSearchRefinersAsync","modalCloseButtonReference","CreateOrderTemplateButton","onCancelHandler","isCreateOrderTemplateDialogOpen","onCreateButtonClick","createOrderTemplateText","createOrderTemplateDialogResources","onOrderTemplateCreated","OrderTemplateList","_reloadPage","_onRemoveFromOrderTemplateList","orderTemplates","p","headerStatusMessage","_heading$text","_heading$tag3","emptyOrderTemplateText","createNewTemplateButtonText","orderTemplatesData","orderTemplateListHeading","orderTemplateListTitle","_heading$tag2","createOrderTemplateButton","CreateNewTemplateButtonComponent","templateHeaderStatusMessage","OrderTemplates","OrderTemplate","_renderOrderTemplateList","createOrderTemplateHeader","createOrderTemplateDescription","createOrderTemplateButtonText","cancelNewOrderTemplateCreationButtonText","currentTemplateProps","bannerText","bannerAriaLabel","renderItem","star5Count","star4Count","star3Count","star2Count","star1Count","totalCount","percentage","formattedPercent","Intl","NumberFormat","barItemAriaLabel","starLabel","bar","Progress","buttonProps","_quickOrderTemplate$q","_quickOrderTemplate$q2","buttonLabel","buttonAriaLabel","_props$resources$quic","_props$resources$quic2","_props$resources$quic3","_props$resources$quic4","_props$resources$quic5","_props$resources$quic6","_props$resources$quic7","_props$resources$free","_props$resources$orig","_props$resources$curr","_props$resources$adde","_props$resources$quic8","_props$resources$quic9","goToCartText","continueShoppingText","headerItemOneText","headerItemFormatText","headerLinesFormatText","headerMessageText","buyAgainNotificationTitle","buyAgainNotificationCloseAriaLabel","getDialogStrings","orderDetailProducts","quickOrder","orderDetails","quickLine","_quickLine$fullProduc","salesLine","OrderDetailsProduct","getOrderDetails","AddToCartComponent","outOfStockText","addToCartArialLabel","navigationUrl","shouldSkipSiteSettings","orderDetailsProducts","_renderItem","quantityLabel","disableElement","pointerEvents","opacity","OrderTemplateLinesView","toggleDetails","fade","applicationNode","BulkPurchase","collapseRef","_dimensionDropDownChange","_this$collapseRef$cur","reEvaluateHeight","_toggleCollapse","_this$props$data$prod","hasDimensionsInProps","hasDimensionsInData","_renderCollapseContent","_renderCollapseButton","_renderCollapse","bulkPurchaseHeaderTitle","_renderMainContent","isMobileDevice","RichTextComponent","bulkPurchaseDescriptionText","_renderMatrix","_featureState$result","_this$props$data$cust","isMultipleCatalogsFeatureEnabled","ProductDimensionsMatrix","dimensionOnChange","histogramItem","RatingsHistogramView","_message$links","renderConfigureDropdown","dropdown","containerProps","labelContainerProps","select","renderConfigure","dropdowns","quickOrderGridView","renderForm","quickOrderForm","quickOrderProductContent","quickOrderMessageContent","_onIncrement","_onDecrement","invokeCallback","prevState","showStrikethroughPricing","originalPrice","getOriginalPrice","TradeAgreementPrice","renderCurrentPrice","initialPrice","itemProp","returnPrice","currency","currencyDisplay","_unused","renderCurrentPriceWithOriginalPrice","__assign","isAddDisabled","isRemoveDisabled","addHandler","removeHandler","_this$props$data$cata","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","OrderTemplateListView","_renderOrderTemplate"],"mappings":"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","file":"static/js/4.2beadb9a14e0e3b0dcdd.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getProductConfigure,\n IProductDimensionCallbacks,\n IProductDimensionConfigureResources,\n IProductDimensionConfigureViewProps\n} from '@msdyn365-commerce/components';\nimport {\n ProductDimension,\n ProductDimensionType,\n ProductDimensionValue,\n ProductListsDataActions,\n ProductListType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n addItemToProductListAction,\n AddItemToProductListInput,\n ArrayExtensions,\n createProductList,\n CreateProductListInput,\n FinitePromiseQueue,\n FinitePromiseQueueError,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getScanResult,\n GetScanResultInput,\n getSelectedVariant,\n IDimensionForSelectedVariant,\n IPromiseQueue,\n QuickOrderTemplate,\n QuickOrderTemplateLine,\n SelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { ActiveProductListInput } from './actions';\nimport {\n IQuickOrderGridActionsProps,\n IQuickOrderGridActionsViewProps,\n IQuickOrderGridRowCallbacks,\n IQuickOrderGridState,\n QuickOrderGridActionsView,\n QuickOrderGridDrawer,\n QuickOrderGridFormComponent,\n QuickOrderGridProduct,\n QuickOrderGridTableComponent\n} from './components';\nimport { IQuickOrderGridData } from './quick-order-grid.data';\nimport { IQuickOrderGridProps, IQuickOrderGridResources } from './quick-order-grid.props.autogenerated';\n\n/**\n * QuickOrder Grid View props.\n */\nexport interface IQuickOrderGridViewProps extends IQuickOrderGridProps {\n header: JSX.Element;\n actions?: INodeProps;\n isB2bCustomer?: boolean;\n isQuickOrderGridFormExpanded: boolean;\n contentProps: INodeProps;\n drawer: INodeProps;\n loading?: React.ReactNode;\n quickOrderGridForm: INodeProps;\n quickOrderGridFormProductContent: INodeProps;\n quickOrderGridFormMsgContent: INodeProps;\n quickOrderGridProps: IModuleProps;\n form: React.ReactNode;\n configure?: IProductDimensionConfigureViewProps;\n isMobileView: boolean;\n container?: JSX.Element;\n orderActions?: IQuickOrderGridActionsViewProps | null;\n bulkPurchase?: React.ReactNode;\n}\n\n/**\n * QuickOrder Grid View port.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * QuickOrderGrid component.\n * @extends {React.PureComponent>}\n */\nclass QuickOrderGrid extends React.PureComponent, IQuickOrderGridState> {\n private readonly _productTextInput: React.RefObject;\n\n private readonly _quantityInput: React.RefObject;\n\n private readonly _waitTime: number = 500;\n\n private readonly _dimensionUpdateQueueMaxLength: number = 2;\n\n private readonly _errorCssClass: string = 'danger';\n\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n\n private readonly _quickOrderGridFormClass: string;\n\n private readonly _quickOrderGridFormProductContent: string;\n\n private readonly _quickOrderGridFormMsgContent: string;\n\n private readonly _telemetryContent: ITelemetryContent;\n\n private readonly _dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(this._dimensionUpdateQueueMaxLength);\n\n private _dimensions: { [id: number]: string } = {};\n\n private readonly _cssClassNameConfigure: string = 'ms-quick-order_grid__content-form-main';\n\n private readonly _className: string = 'ms-quick-order-grid';\n\n // @ts-expect-error: Debouce needs to be used as type.\n private _cancellabelDebounce: debounce;\n\n private readonly _quickOrderGridCallbacks: IProductDimensionCallbacks = {\n /**\n * Get Dropdown name.\n * @param selectedDimensionId - Dimension type.\n * @param selectedDimensionValueId - Resources.\n * @returns Dropdown name.\n */\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this._dimensions[selectedDimensionId] = selectedDimensionValueId;\n return this._dimensionUpdateQueue\n .enqueue(async () => {\n return this._updateDimensions();\n })\n .catch((error: string) => {\n // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw new Error(error);\n }\n });\n },\n\n /**\n * Get Dropdown name.\n * @param dimensionType - Dimension type.\n * @param resources - Resources.\n * @returns Dropdown name.\n */\n getDropdownName: (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n\n /**\n * Method to call on dimension change.\n * @param isUpdatingDimension - Flag to update dimension.\n */\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n }\n };\n\n private readonly _quickOrderGridRowCallbacks: IQuickOrderGridRowCallbacks = {\n /**\n * Method to call remove button.\n * @param line - Grid row product.\n */\n onRemoveItem: (line: QuickOrderGridProduct): void => {\n this._removeItemRowFromTable(line.productLine);\n },\n\n /**\n * Method to call on change quantity button.\n * @param productListLineId - Grid row product list line id.\n * @param quantity - Product quantity.\n * @returns - Falg to get confirmation for action.\n */\n onChangeQuantity: (productListLineId: string | undefined, quantity: number): boolean => {\n return this._changeRowQuantity(productListLineId, quantity);\n }\n };\n\n public constructor(props: IQuickOrderGridProps) {\n super(props);\n this._productTextInput = React.createRef();\n this._quantityInput = React.createRef();\n\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.state = {\n isQuickOrderGridFormExpanded: false,\n quantity: 1,\n productResponse: undefined,\n productDimensions: undefined,\n productDimensionErrorState: {\n configureErrors: {}\n },\n isMobile: this.isMobile,\n products: [],\n isUpdatingDimension: false,\n productListId: ''\n };\n\n this._quickOrderGridFormClass = 'ms-quick-order-grid__content-form';\n this._quickOrderGridFormProductContent = 'ms-quick-order-grid__content-form-main';\n this._quickOrderGridFormMsgContent = 'ms-quick-order-grid__content-form-msg';\n }\n\n @computed public get isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public render(): JSX.Element | null {\n const { data } = this.props;\n if (!data.customerInformation.result) {\n return null;\n }\n const quickOrderTemplate = data.quickOrderTemplate;\n\n if (quickOrderTemplate?.result !== undefined) {\n this.setState({\n products: quickOrderTemplate.result.quickOrderTemplateLines,\n productListId: quickOrderTemplate.result.productList.Id\n });\n }\n const { className = '', maxQuantity } = this.props.config;\n const customerInfo = this.props.data.customerInformation.result;\n const {\n quickOrderGridModuleHeading,\n quickOrderGridModuleDescription,\n quickOrderGridAddtogrid,\n quickOrderGridProductQuantityInputLabel,\n quickOrderGridProductInputLabel,\n quickOrderGridProductDimensionTypeColor,\n quickOrderGridProductDimensionTypeConfiguration,\n quickOrderGridSelectDimensionFormatString,\n quickOrderGridProductDimensionTypeSize,\n quickOrderGridProductDimensionTypeStyle,\n quickOrderGridProductDimensionTypeAmount,\n quickOrderGridModulePageHeading\n } = this.props.resources;\n\n const productConfigureResources: IProductDimensionConfigureResources = {\n selectDimensionFormatString: quickOrderGridSelectDimensionFormatString,\n productDimensionTypeColor: quickOrderGridProductDimensionTypeColor,\n productDimensionTypeConfiguration: quickOrderGridProductDimensionTypeConfiguration,\n productDimensionTypeSize: quickOrderGridProductDimensionTypeSize,\n productDimensionTypeStyle: quickOrderGridProductDimensionTypeStyle,\n productDimensionTypeAmount: quickOrderGridProductDimensionTypeAmount\n };\n\n const { isQuickOrderGridFormExpanded, productDimensionErrorState, productResponse, productDimensions } = this.state;\n\n const headerClassName = `${this._className}__header`;\n\n const header = (\n
\n \n
\n );\n\n const viewProps: IQuickOrderGridViewProps = {\n ...(this.props as IQuickOrderGridProps),\n\n quickOrderGridProps: { className: classnames('ms-quick-order-grid', className), moduleProps: this.props },\n contentProps: { className: 'ms-quick-order-grid__content' },\n isB2bCustomer: customerInfo?.IsB2b,\n header,\n actions: {\n className: `${this._className}-action-bar`,\n tag: 'div'\n },\n drawer: {\n tag: QuickOrderGridDrawer,\n className: `${this._className}__drawer`,\n collapseProps: { isOpen: this.state.isQuickOrderGridFormExpanded },\n moduleHeadingText: quickOrderGridModuleHeading,\n moduleDescriptionText: quickOrderGridModuleDescription,\n requestContext: this.props.context.request,\n telemetryContent: this._telemetryContent\n },\n bulkPurchase: this._renderBulkPurchase(),\n quickOrderGridForm: {\n className: `${this._quickOrderGridFormClass} ${isQuickOrderGridFormExpanded ? 'qo-show' : 'qo-hide'}`\n },\n quickOrderGridFormProductContent: {\n className: this._quickOrderGridFormProductContent\n },\n quickOrderGridFormMsgContent: {\n className: this._quickOrderGridFormMsgContent\n },\n form: QuickOrderGridFormComponent({\n productTextInput: this._productTextInput,\n quantityTextInput: this._quantityInput,\n isAddtoListDisabled: !productResponse,\n ariaLabelAddtoCart: quickOrderGridAddtogrid,\n ariaLabelProduct: quickOrderGridProductInputLabel,\n ariaLabelQuantity: quickOrderGridProductQuantityInputLabel,\n maxChars: 50,\n maxQuantity,\n moduleClassName: this._className,\n quickOrderGridState: this.state,\n handleInputChange: this._handleInputChange,\n handleQuantityChange: this._handleQuantityChange,\n handleAddProductListClick: this._addItemToProductListLine\n }),\n configure:\n productResponse && productDimensions\n ? getProductConfigure(\n this._cssClassNameConfigure,\n this.props.context,\n this.props.friendlyName,\n this.props.telemetry,\n quickOrderGridSelectDimensionFormatString,\n productConfigureResources,\n this._quickOrderGridCallbacks,\n productResponse,\n productDimensions,\n productDimensionErrorState\n )\n : undefined,\n isQuickOrderGridFormExpanded: this.state.isQuickOrderGridFormExpanded,\n isMobileView: this.state.isMobile,\n container: ArrayExtensions.hasElements(this.state.products) ? this._renderListContainer() : undefined,\n orderActions: this._renderQuickOrderGridActions(quickOrderTemplate?.result)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderQuickOrderGridActions(quickOrderTemplate: QuickOrderTemplate | undefined): IQuickOrderGridActionsViewProps | null {\n const { typeName, context, resources } = this.props;\n const {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n } = resources;\n if (ArrayExtensions.hasElements(quickOrderTemplate?.quickOrderTemplateLines)) {\n const quickOrderGridActions: IQuickOrderGridActionsProps = {\n data: { quickOrderTemplate },\n moduleClassName: this._className,\n id: 'quick-order-grid',\n typeName,\n context,\n handlers: {\n removeProductList: this._removeProductList\n },\n resources: {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n }\n };\n\n return QuickOrderGridActionsView(quickOrderGridActions);\n }\n return null;\n }\n\n /**\n * Renders bulk purchase module.\n * @returns Bulk purchase module react node.\n */\n private _renderBulkPurchase(): React.ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\n return null;\n }\n\n if (!ArrayExtensions.hasElements(this.props.slots.bulkPurchaseSlots)) {\n return null;\n }\n\n const containerClass = `${this._className}__bulk-purchase`;\n return (\n
\n {React.cloneElement(this.props.slots.bulkPurchaseSlots[0] as React.ReactElement, {\n productDimensions: this.state.productDimensions\n })}\n
\n );\n }\n\n /**\n * Render list container.\n * @returns JSX element.\n */\n private _renderListContainer(): JSX.Element {\n const containerClass = `${this._className}__table-content`;\n return
{this._renderQuickOrderTable(this._className)}
;\n }\n\n /**\n * Initial the products on quick order.\n * @returns List of quick order products or undefined.\n */\n private _initQuickOrderGridProducts(): QuickOrderGridProduct[] {\n const products: QuickOrderTemplateLine[] = this.state.products;\n\n const quickOrderGridProduct: QuickOrderGridProduct[] = products.map((product: QuickOrderTemplateLine) => {\n return new QuickOrderGridProduct(product);\n });\n\n return ArrayExtensions.validValues(quickOrderGridProduct);\n }\n\n /**\n * Method to call on clear button.\n */\n private readonly _removeProductList = () => {\n const { context, data, telemetry, resources } = this.props;\n const { quickOrderTemplate } = data;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && quickOrderTemplate && quickOrderTemplate.result) {\n ProductListsDataActions.deleteAsync({ callerContext: context.actionContext }, quickOrderTemplate.result.productList)\n .then(() => {\n window.location.reload();\n })\n .catch((error: string) => {\n telemetry.warning('[quick-order-grid] Unable to delete product list.');\n telemetry.error(error);\n this._updateStatusState(\n resources.quickOrderGridDeleteProductListFailedText,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n });\n } else {\n telemetry.warning('[quick-order-grid] Failed to delete product list. Product List was not found');\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param className - Class name.\n * @returns JSX element.\n */\n private _renderQuickOrderTable(className: string): JSX.Element {\n const tableClassName = `${className}__table-list`;\n\n return (\n \n );\n }\n\n /**\n * Method to called on product input change.\n * @param query - Product inventory info.\n */\n private readonly _handleInputChange = (query: string): void => {\n const queryMinLength = 4;\n if (!query || query.length > queryMinLength) {\n this.setState({ quantity: 0, productDimensions: [], productResponse: undefined });\n this._updateStatusState('', '', '', false);\n }\n if (this._cancellabelDebounce) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call -- existing code.\n this._cancellabelDebounce.cancel();\n }\n\n const { telemetry, context } = this.props;\n const zeroNumber = 0;\n if (!StringExtensions.isNullOrEmpty(query)) {\n this._cancellabelDebounce = debounce(() => {\n getScanResult(\n new GetScanResultInput(\n context.actionContext.requestContext.apiSettings,\n query,\n context.actionContext.requestContext.apiSettings.channelId\n ),\n this.props.context.actionContext\n )\n .then(results => {\n this.setState({\n productResponse: results?.Product,\n productDimensions: results?.ProductDimensionFull,\n isQuickOrderGridFormExpanded: true\n });\n })\n .catch((error: Error) => {\n telemetry.exception(error);\n telemetry.debug('Unable to get scan results');\n });\n }, this._waitTime);\n\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- Existing code.\n this._cancellabelDebounce();\n }, zeroNumber);\n this.setState({ isQuickOrderGridFormExpanded: true });\n } else {\n this.setState({ productResponse: undefined, isQuickOrderGridFormExpanded: true });\n }\n };\n\n /**\n * Method to called on quantity change.\n * @param value - Quantity value.\n */\n private readonly _handleQuantityChange = (value: string): void => {\n const currentValue = Number.parseInt(value, 10);\n const inputElement = this._quantityInput.current instanceof HTMLInputElement && this._quantityInput.current;\n const quantityChangeDebounceTimeout = 200;\n const minimumQuantity = 0;\n\n this.setState({ quantity: currentValue }, () => {\n debounce(() => {\n if (!Number.isNaN(this.state.quantity) && !(this.state.quantity < minimumQuantity) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }, quantityChangeDebounceTimeout)();\n });\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionType - Dimension Type.\n * @param resources - String resources.\n * @returns Dropdwon label.\n */\n private readonly _getDropdownName = (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n const isGiftCard = this.state.productResponse?.IsGiftCard;\n\n switch (dimensionType) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n /**\n * Method to update dimension and product in UI.\n */\n private readonly _updateDimensions = async (): Promise => {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { productDimensions, productResponse } = this.state;\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\n if (!productResponse || !hasProductDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this._dimensions };\n this.setState({ isUpdatingDimension: true });\n\n // eslint-disable-next-line no-console -- Testing.\n console.log(this.state.isUpdatingDimension);\n\n // Step 1: Update state to indicate which dimensions are selected\n if (this.state.productDimensionErrorState.otherError) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const clearOtherErrorState = { ...this.state.productDimensionErrorState };\n clearOtherErrorState.otherError = undefined;\n this.setState({ productDimensionErrorState: clearOtherErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const dimensionKey of Object.keys(dimensionsToUpdate)) {\n if (this.state.productDimensionErrorState.configureErrors[dimensionKey]) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors[dimensionKey] = undefined;\n\n this.setState({ productDimensionErrorState: errorState });\n }\n }\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, dimensionsToUpdate[dimension.DimensionTypeValue]) ?? dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension.DimensionValue;\n });\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n // eslint-disable-next-line no-async-promise-executor -- existing code\n const selectedProduct = new Promise(async resolve => {\n const newProduct = await getSelectedVariant(\n new SelectedVariantInput(\n productResponse.MasterProductId ? productResponse.MasterProductId : productResponse.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n if (newProduct) {\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n newProduct.MasterProductId ? newProduct.MasterProductId : newProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n ),\n actionContext\n );\n }\n\n resolve(newProduct);\n });\n\n const variantProduct = await selectedProduct;\n this.setState({ productResponse: variantProduct !== null ? variantProduct : undefined });\n };\n\n /**\n * Method to get updated dimension value.\n * @param productDimensionFull - Product dimension full.\n * @param newValueId - New Dimension value.\n * @returns Dimension Value.\n */\n private readonly _updateDimensionValue = (\n productDimensionFull: IDimensionForSelectedVariant,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionTypeValue - Dimension Type.\n * @param resources - String resources.\n * @param isGiftCard - Flag to check if its a giftcard product.\n * @returns Dropdwon error label.\n */\n private readonly _getDimensionErrorString = (\n dimensionTypeValue: number,\n resources: IQuickOrderGridResources,\n isGiftCard?: boolean\n ): string => {\n const amountErrorMessage = resources.quickOrderGridproductDimensionTypeAmountErrorMessage;\n\n switch (dimensionTypeValue) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.quickOrderGridproductDimensionTypeColorErrorMessage;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.quickOrderGridproductDimensionTypeConfigurationErrorMessage;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.quickOrderGridproductDimensionTypeSizeErrorMessage;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? amountErrorMessage : resources.quickOrderGridproductDimensionTypeStyleErrorMessage;\n default:\n return '';\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param productResponse - Simple Product.\n * @param quantity - Product Quantity.\n * @returns Flag to validate productlistline.\n */\n private readonly _validateCart = (productResponse: SimpleProduct, quantity: number): boolean => {\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- existing code\n const missingDimensions = productResponse.Dimensions?.filter(\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\n );\n const minimumQuantity = 0;\n if (ArrayExtensions.hasElements(missingDimensions)) {\n const userMessage = this._getConfigureErrors(missingDimensions, false);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code\n if (this.state.productDimensionErrorState.configureErrors) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors = userMessage;\n\n this.setState({ productDimensionErrorState: errorState });\n return false;\n }\n }\n\n if (quantity <= minimumQuantity) {\n const resources = this.props.resources;\n this._updateStatusState(resources.quickOrderGridWrongQuantityErrorMsg, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n }\n return true;\n };\n\n /**\n * Initial the products on quick order.\n * @param result - Simple Product.\n * @param isGiftCard - Product Quantity.\n * @returns Flag to validate cart.\n */\n private _getConfigureErrors(\n result: ProductDimension[] | undefined,\n isGiftCard?: boolean\n ): { [configureId: string]: string | undefined } {\n if (!result) {\n return {};\n }\n const dimensions: { [configureId: string]: string | undefined } = {};\n const resources = this.props.resources;\n for (const dimension of result) {\n dimensions[dimension.DimensionTypeValue] = this._getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\n }\n return dimensions;\n }\n\n /**\n * Method to call on quantity change in row.\n * @param itemKey - Product Key.\n * @param quantity - Product quantity.\n * @returns Flag to update status.\n */\n private readonly _changeRowQuantity = (itemKey: string | undefined, quantity: number): boolean => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n if (quickOrderTemplate?.result) {\n const quickOrderTemplateLinesData = quickOrderTemplate.result.quickOrderTemplateLines;\n if (ArrayExtensions.hasElements(quickOrderTemplateLinesData)) {\n const orderLineIndex = quickOrderTemplateLinesData.findIndex(\n (lines: QuickOrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...quickOrderTemplateLinesData[orderLineIndex] };\n if (quickOrderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return true;\n }\n const previousQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n ProductListsDataActions.updateProductListLinesAsync(\n { callerContext: context.actionContext },\n quickOrderTemplate.result.productList.Id,\n [line.productListLine]\n )\n .then(list => {\n if (ArrayExtensions.hasElements(list)) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n quickOrderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...quickOrderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedProductList = { ...quickOrderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveProductListInput(context.actionContext.requestContext),\n updatedProductList\n );\n return true;\n }\n\n return false;\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable to update product quantity.');\n telemetry.error(error.message);\n const userMessage = 'Failed to update quantity value.';\n newProductListLine.productListLine.Quantity = previousQuantity;\n this._updateStatusState(userMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n });\n }\n return false;\n }\n\n return false;\n };\n\n /**\n * Method to call on remove item from table.\n * @param line - Order Template Line.\n */\n private readonly _removeItemRowFromTable = (line: QuickOrderTemplateLine): void => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n\n if (quickOrderTemplate?.result) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken) {\n ProductListsDataActions.removeProductListLinesAsync(\n { callerContext: context.actionContext },\n line.productListLine.ProductListId!,\n [line.productListLine]\n )\n .then(() => {\n window.location.reload(false);\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable remove item from product list grid');\n telemetry.error(error.message);\n });\n } else {\n telemetry.warning('[quick-order-grid] Unable remove items from product list grid user token was not found');\n }\n }\n };\n\n /**\n * Method to call on add item from form.\n */\n private readonly _addItemToProductListLine = async (): Promise => {\n const {\n context: { actionContext },\n resources,\n telemetry\n } = this.props;\n const {\n quickOrderGridAddedToGridSuccessMessage,\n quickOrderGridAddedToGridFailureMessage,\n quickOrderGridAddedToGridDuplicateError\n } = resources;\n const { productResponse, quantity, productListId } = this.state;\n\n this._updateStatusState('', '', '', false);\n\n if (productResponse !== undefined && this._validateCart(productResponse, quantity)) {\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n await this._createProductList();\n }\n\n if (StringExtensions.isNullOrWhitespace(this.state.productListId)) {\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return;\n }\n const input = new AddItemToProductListInput(\n this.state.productListId,\n productResponse.RecordId,\n quantity,\n productResponse.DefaultUnitOfMeasure ?? 'ea'\n );\n\n await addItemToProductListAction(input, actionContext)\n .then(result => {\n if (result.ProductListId) {\n this._updateStatusState(quickOrderGridAddedToGridSuccessMessage, 'success', 'fas fa-check', true);\n window.location.reload();\n this.setState({});\n }\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error trying to Update Grid Line from the quick order grid');\n if (error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n this._updateStatusState(\n quickOrderGridAddedToGridDuplicateError,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n } else {\n this._updateStatusState(\n quickOrderGridAddedToGridFailureMessage,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n }\n });\n }\n };\n\n /**\n * Method to create product list.\n * @returns - ProductListId.\n */\n private _createProductList = async (): Promise => {\n const {\n context: { actionContext },\n telemetry,\n resources\n } = this.props;\n const { productListId } = this.state;\n const { quickOrderGridAddedToGridFailureMessage } = resources;\n\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n const input = new CreateProductListInput('', ProductListType.QuickOrder);\n\n await createProductList(input, actionContext)\n .then(result => {\n if (!StringExtensions.isNullOrWhitespace(result.Id)) {\n this.setState({ productListId: result.Id });\n return result.Id;\n }\n return '';\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error on creating productlist from quick order grid');\n telemetry.error(error.message);\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return '';\n });\n return '';\n }\n\n return productListId;\n };\n\n /**\n * Method to create product list.\n * @param messageText - Message Text.\n * @param statusCssString - Css class names.\n * @param messageGlyph - Glyph string.\n * @param isOpen - Flag to show.\n */\n private readonly _updateStatusState = (messageText: string, statusCssString: string, messageGlyph: string, isOpen: boolean): void => {\n this.setState({\n // eslint-disable-next-line react/no-unused-state -- Showing user message in Form component.\n stateMessage: {\n messageText,\n statusCssString,\n messageGlyph,\n isOpen\n }\n });\n };\n}\nexport default QuickOrderGrid;\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 { IHeaderViewProps } from './header';\n\nconst headerView: React.FC = props => {\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n MobileMenuContainer,\n MobileMenuBodyContainer,\n MobileMenuLinksContainer,\n Divider\n } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {props.currentDistributor}\n {_renderDesktopAccountBlock(props)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n \n \n {props.MobileMenuHeader}\n {_renderReactFragment(props.menuBar)}\n \n {props.accountLinks ? props.accountLinks.map(link => link) : false}\n {props.siteOptions}\n {props.wishListIconMobile}\n {props.signInLink}\n {props.signOutLink}\n \n \n \n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n {accountLinks ? accountLinks.map(link => link) : false}\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return {signInLink};\n }\n }\n props.context.telemetry.error('Header content is empty, module wont render.');\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddOrderTemplateToCartComponent, ILinesAddedToCartDialogResources } from '@msdyn365-commerce/components';\nimport { getUrlSync, ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductList, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getFallbackImageUrl,\n getProductUrlSync,\n OrderTemplate,\n OrderTemplateLine,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateActionMessageState } from '../order-template-list';\n\nexport interface ISingleOrderTemplateProps extends ProductList {\n orderTemplateState: IOrderTemplateActionMessageState;\n name?: string;\n orderTemplate: OrderTemplate;\n context: ICoreContext;\n imageSettings?: IImageSettings;\n enableImageProductLink?: boolean;\n removeFromOrderTemplateListText: string;\n addToBagText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n handlers: {\n onRemoveOrderTemplate(id: string): void | undefined;\n onDismiss(): void;\n };\n resources: {\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n telemetryContent?: ITelemetryContent;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n}\n\nexport interface ISingleOrderTemplateViewProps {\n key: string;\n orderTemplateImage: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n orderTemplateStatusMessage?: React.ReactNode;\n orderTemplateName?: React.ReactNode;\n orderTemplateAriaLabel?: string;\n orderTemplateHeaderDivider?: React.ReactNode;\n}\n\nconst _removeItemFromOrderTemplateList = (props: ISingleOrderTemplateProps): void => {\n const { onRemoveOrderTemplate } = props.handlers;\n const { itemKey } = props;\n\n onRemoveOrderTemplate && itemKey && onRemoveOrderTemplate(itemKey);\n};\n\nconst OrderTemplateActions = {\n removeOrderTemplate: _removeItemFromOrderTemplateList\n};\n\n/**\n * Remove order template action.\n * @param input -Single order template props.\n * @returns Set remove order template.\n */\nconst removeOrderTemplateActionHandler = (input: ISingleOrderTemplateProps) => () => {\n OrderTemplateActions.removeOrderTemplate(input);\n};\n\nexport const OrderTemplateRender = (input: ISingleOrderTemplateProps): ISingleOrderTemplateViewProps | null => {\n const {\n Id,\n orderTemplate,\n removeFromOrderTemplateListText,\n orderTemplateState,\n handlers,\n name,\n imageSettings,\n context,\n telemetryContent,\n enableImageProductLink\n } = input;\n\n if (!Id) {\n return null;\n }\n\n const _getOrderTemplatePageUrl = (): string => {\n const url = getUrlSync('ordertemplate', context.actionContext) ?? '';\n const separator = url.includes('?') ? '&' : '?';\n if (Id) {\n return `${url}${separator}id=${Id}`;\n }\n return '';\n };\n\n const { onDismiss } = handlers;\n\n return {\n key: `${Id}-template`,\n orderTemplateImage: _renderOrderTemplateImages(context, orderTemplate.orderTemplateLines, imageSettings, enableImageProductLink),\n orderTemplateAriaLabel: _renderAriaLabel(input),\n orderTemplateName: (\n
\n \n
\n {orderTemplate.totalLines}\n {` `}\n line items\n
\n
\n
\n ),\n addToCartButton: (\n
\n \n
\n ),\n removeButton: (\n \n ),\n orderTemplateStatusMessage: orderTemplateState && orderTemplateState.isOpen && orderTemplateState.userMessage && (\n
\n \n {orderTemplateState.userMessage}\n \n
\n )\n };\n};\n\n/**\n * On image click handler.\n * @param productUrl -Product url value.\n * @returns Assign window location.\n */\nconst onClickHandler = (productUrl: string) => () => {\n window.location.assign(productUrl);\n};\n\nconst _renderOrderTemplateImages = (\n context: ICoreContext,\n orderTemplateLines?: OrderTemplateLine[],\n imageSettings?: IImageSettings,\n enableImageProductLink?: boolean\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n lg: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n xl: { q: 'w=140&h=140&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n if (orderTemplateLines) {\n const count = orderTemplateLines.length < 4 ? orderTemplateLines.length : 4;\n\n return (\n
\n {orderTemplateLines?.slice(0, count).map(line => {\n const productUrl = line.fullProduct\n ? _updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line?.productListLine?.CatalogId)\n : '';\n\n return (\n \n );\n })}\n
\n );\n }\n return
;\n};\n\n// This method is used to update the product url with the catalogId\nconst _updateProductUrlCatalog = (productDetails: SimpleProduct, context: ICoreContext, catalogId: number | undefined): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return fullUrl.href;\n }\n return productUrl;\n};\n\nconst _renderAriaLabel = (props: ISingleOrderTemplateProps): string => {\n const { name } = props;\n return `${name}`;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateListStatus } from '../order-template-list';\n\nexport interface IOrderTemplateListStatusMessageProps {\n className?: string;\n errorType: orderTemplateListStatus;\n text?: string;\n}\n\nexport const OrderTemplateListStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBulkPurchaseViewProps } from './bulk-purchase';\n\n/**\n * Bulk purchase view.\n * @param props - Bulk purchase view props.\n * @returns React node with a module.\n */\nexport const BulkPurchaseViewComponent: React.FC = props => {\n return {props.content};\n};\n\nexport default BulkPurchaseViewComponent;\n","import Quantity from './Quantity';\r\n\r\nexport * from './Quantity.props';\r\n\r\nexport {\r\n Quantity\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 { isChannelTypeB2B } from '@msdyn365-commerce/core';\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 currentDistributor?: 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 private isB2BSite: boolean = false;\n\n /**\n * The signed-in user name displayed in the header bar\n */\n @computed public get displayName(): Readonly {\n return (\n (MsDyn365.isOboRequest(this.props.context.request) ? this.workerName : this.customerName) ||\n this.props.context.request?.user?.name\n );\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 this.isB2BSite = isChannelTypeB2B(this.props.context.request);\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => {\n this.props.data.cart.result;\n },\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: { user }\n },\n resources: {\n signUpCustomerNotFoundTitle,\n signUpMultipleCustomerFoundTitle,\n signInCustomerNotAuthorizedTitle,\n closeNotificationLabel\n }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(\n user,\n signUpMultipleCustomerFoundTitle,\n signUpCustomerNotFoundTitle,\n signInCustomerNotAuthorizedTitle\n );\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 const currentDistributorSlot = this._getSlot('distributorSelector');\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 currentDistributor: this.isB2BSite && ArrayExtensions.hasElements(currentDistributorSlot) ? currentDistributorSlot : undefined\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 signInCustomerNotAuthorizedTitle: string\n ): string | undefined {\n if (!user?.retailServerErrorCode) {\n return undefined;\n }\n\n const { signUpCustomerNotFound, signUpMultipleCustomerFound, signInCustomerNotAuthorized } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n const accountAuthorizationError = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\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 } else if (user?.retailServerErrorCode === accountAuthorizationError) {\n return signInCustomerNotAuthorized !== undefined ? signInCustomerNotAuthorized : signInCustomerNotAuthorizedTitle;\n }\n return user?.retailServerErrorMessage;\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 (!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 {\n IItemAddedToCartDialogData,\n IItemAddedToCartDialogResources,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n ItemAddedToCartDialog\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { FeatureState, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n createGetFeatureStateInput,\n getFeatureState,\n getPriceForSelectedVariant,\n getProductUrlSync,\n ObjectExtensions,\n OrderTemplate,\n OrderTemplateLine,\n PriceForSelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n UncontrolledPagination\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n IOrderTemplateActionsProps,\n IOrderTemplateActionsViewProps,\n IOrderTemplateLineProps,\n IOrderTemplateLineViewProps,\n IOrderTemplateTableHeadingProps,\n OrderTemplateActionsView,\n OrderTemplateLinesStatusMessage,\n OrderTemplateLineView,\n OrderTemplateMobileLineView,\n OrderTemplateTableHeading\n} from '../..';\nimport { ActiveOrderTemplateLinesInput } from './actions/get-order-template';\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\nimport { IOrderTemplateData } from './order-template.data';\nimport { IOrderTemplateProps, IOrderTemplateResources } from './order-template.props.autogenerated';\nimport Spinner from './components/add-line/spinner';\n\nexport interface IOrderTemplateLineActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isItemAddedToOrderTemplateOpen: boolean;\n isConfirmAddSelectionToBagModalOpen: boolean;\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\n productSelection: IOrderTemplateLineViewModel[];\n isDetailsDisplayed: boolean;\n detailedProductView?: IOrderTemplateLineViewProps;\n isQuantityDisabledForUpdate?: boolean;\n}\n\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IOrderTemplateViewProps extends IOrderTemplateProps {\n OrderTemplateLines: IModuleProps;\n callbacks?: IOrderTemplateLinesCallbacks;\n status?: orderTemplateLinesStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplateActions?: INodeProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductDetails?: INodeProps;\n orderLines?: IOrderTemplateLineViewProps[];\n productListLines?: ProductListLine[];\n productsStatusMessage?: React.ReactNode;\n orderActions?: IOrderTemplateActionsViewProps | null;\n resources: IOrderTemplateResources;\n pagination?: React.ReactNode;\n itemAddedToCartDialog?: React.ReactNode;\n bulkOrderLineActions?: React.ReactNode;\n isDetailsDisplayed?: boolean;\n detailedProduct?: IOrderTemplateLineProps;\n detailedProductView?: IOrderTemplateLineViewProps;\n productQuantityView?: React.ReactNode;\n addButton?: React.ReactNode;\n isMobile?: boolean;\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\n}\n\nexport interface IOrderTemplateLinesCallbacks {\n updateQuantity(itemKey: string, quantity: number): void;\n}\n\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\n isChecked: boolean;\n productQuantityView: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateLines component.\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\n */\n@observer\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\n private readonly className: string;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\n super(props);\n this.className = 'ms-order-template';\n this._viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._updateViewport = this._updateViewport.bind(this);\n\n this.state = {\n itemKey: '',\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: false,\n isConfirmAddSelectionToBagModalOpen: false,\n productSelection: [],\n isDetailsDisplayed: false,\n isQuantityDisabledForUpdate: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\n window.location.assign(this.props.context.request.user.signInUrl || '/');\n }\n }\n\n @action\n public async componentDidMount(): Promise {\n this.setState({});\n const orderTemplate = await this.props.data.orderTemplate;\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\n this.setState({\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\n });\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateProps,\n nextState: IOrderTemplateLineActionMessageState\n ): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\n const { orderTemplate, cart } = this.props.data;\n if (cart.status === 'LOADING' || ObjectExtensions.isNullOrUndefined(orderTemplate) || orderTemplate.status === 'LOADING') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(this.className, className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || orderTemplate.status === 'FAILED') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'FAILED',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n\n return this.props.renderView(errorProps);\n }\n\n const orderTemplateResult = orderTemplate && orderTemplate.result;\n const orderTemplateLines = orderTemplateResult && orderTemplateResult.orderTemplateLines;\n\n if (!orderTemplateResult || !orderTemplateLines || orderTemplateLines.length === 0) {\n if (orderTemplateResult && !this._isFirstPage() && MsDyn365.isBrowser) {\n window.location.href = this._getOrderTemplatePageUrl();\n return null;\n }\n\n const emptyViewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'EMPTY',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources,\n orderActions:\n orderTemplateResult &&\n this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n bulkOrderLineActions: orderTemplateResult && this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n }\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'SUCCESS',\n productsStatusMessage: this.state.isOpen && (\n
\n \n {this.state.userMessage}\n \n
\n ),\n heading: heading && ,\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n },\n ProductsTable: {\n className: `${this.className}__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `${this.className}-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: this._renderProductListHeader(this.props.resources),\n ProductDetails: {\n className: `${this.className}-table-line__link`,\n tag: 'a'\n },\n orderLines: this._renderProductList(),\n callbacks: { updateQuantity: debounce(this._changeQuantity, 2000) },\n orderActions: this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n pagination: this._renderPagination(),\n itemAddedToCartDialog: this._renderItemAddedToCartDialog(),\n bulkOrderLineActions: this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n isDetailsDisplayed: this.state.isDetailsDisplayed,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n detailedProductView: this.state.detailedProductView,\n isMobile: this.isMobile\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void {\n line.isChecked = isChecked;\n\n const updated =\n this.state.productSelection.map(product => {\n if (product.fullProduct?.ProductDetails.ItemId === line.fullProduct?.ProductDetails.ItemId) {\n line.isChecked = isChecked;\n }\n return product;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n public onSelectAll(isChecked: boolean): void {\n const updated =\n this.state.productSelection.map(line => {\n line.isChecked = isChecked;\n return line;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n private _renderProductListHeader(resources: IOrderTemplateResources): React.ReactNode {\n const {\n productImage,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productActionsText,\n selectAllRowsText,\n productLineCatalogName\n } = resources;\n const headers: IOrderTemplateTableHeadingProps = {\n productImage: productImage,\n productNumber: productNumberText,\n productName: productText,\n productUnitPrice: productUnitPriceText,\n productUOM: productUOMText,\n productQuantity: productQuantityText,\n productActions: productActionsText,\n selectAllRowsText,\n lines: this.state.productSelection,\n isMobile: this.isMobile,\n clickHandler: (isChecked: boolean) => {\n this.onSelectAll(isChecked);\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n productLineCatalogName: productLineCatalogName\n };\n\n return ;\n }\n\n private _getOrderTemplateLineActions(orderTemplateId: string): React.ReactNode {\n return (\n line.isChecked)}\n onAddSelectionToBag={this._onAddSelectionToBag}\n onRemoveSelection={this._onRemoveSelection}\n isMinifiedView={this.isMobile}\n isMultipleCatalogFeatureEnabledInHq={this._isChannelMultipleCatalogsFeatureEnabled()}\n telemetryContent={this.telemetryContent}\n />\n );\n }\n\n private _generateLinesAddedToCartDialogResources(): ILinesAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n };\n }\n\n private _generateItemAddedToCartDialogResources(): IItemAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n itemAddedToCartHeaderItemOneText: this.props.resources.itemAddedToCartHeaderItemOneText,\n itemAddedToCartHeaderItemFormatText: this.props.resources.itemAddedToCartHeaderItemFormatText,\n itemAddedToCartHeaderMessageText: this.props.resources.itemAddedToCartHeaderMessageText,\n freePriceText: this.props.resources.freePriceText,\n originalPriceText: this.props.resources.originalPriceText,\n currentPriceText: this.props.resources.currentPriceText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private readonly _onRemoveSelection = (): void => {\n const { context, resources } = this.props;\n const { telemetry } = context;\n const { removeSelectedFailureMessage, removeSelectedSuccessMessage } = resources;\n const lines = this.state.productSelection;\n const productListLines = lines && lines.length && lines.filter(line => line.isChecked).map(line => line.productListLine);\n\n if (productListLines && productListLines.length > 0) {\n const productListId = productListLines[0].ProductListId;\n\n const maxWaitTimeInMilliSeconds: number = 1000;\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\n .then(async () => {\n this.setState({\n userMessage: removeSelectedSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n this.setState({\n userMessage: removeSelectedFailureMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n });\n }\n };\n\n private readonly _getOrderTemplatePageUrl = (): string => {\n let url = getUrlSync('ordertemplate', this.props.context.actionContext) || '';\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\n if (this.props.data.orderTemplate?.result?.productList.Id) {\n return `${url}?id=${this.props.data.orderTemplate.result.productList.Id}`;\n }\n return '';\n };\n\n private readonly _onAddSelectionToBag = async (): Promise => {\n const lines = this.state.productSelection;\n const selectedLines = lines.filter(line => line.isChecked);\n if (selectedLines.length > 0) {\n for (const productLine of selectedLines) {\n const itemKey = productLine.fullProduct?.ProductDetails.ItemId ?? '';\n const product = productLine.fullProduct?.ProductDetails ?? {\n RecordId: 0,\n ProductTypeValue: 0,\n BasePrice: 0,\n Price: 0,\n AdjustedPrice: 0\n };\n const quantity = productLine.productListLine.Quantity ?? 0;\n if (this._isChannelMultipleCatalogsFeatureEnabled()) {\n const catalogId = productLine.productListLine.CatalogId;\n await this._addItemToBag(product, quantity, itemKey, catalogId);\n } else {\n await this._addItemToBag(product, quantity, itemKey);\n }\n }\n }\n return Promise.resolve(void 0);\n };\n\n private _renderOrderTemplateActions(\n orderTemplate: OrderTemplate,\n isMultipleCatalogFeatureEnabledInHq: boolean\n ): IOrderTemplateActionsViewProps {\n const { id, typeName, context, resources } = this.props;\n const {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage\n } = resources;\n\n const orderTemplateActions: IOrderTemplateActionsProps = {\n data: { orderTemplate },\n id,\n typeName,\n context,\n telemetryContent: this.telemetryContent,\n handlers: {\n onRenameTemplate: this._renameTemplate,\n onRemoveTemplate: this._removeTemplate\n },\n isMultipleCatalogFeatureEnabledInHq,\n renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\n resources: {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n closeWindowButtonText,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources: this._generateLinesAddedToCartDialogResources()\n }\n };\n\n return OrderTemplateActionsView(orderTemplateActions);\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.renameOrderTemplateTitleText,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateTitle,\n orderTemplateDescription: '',\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n orderTemplateButtonLabel: resources.renameOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelBtnLabel\n };\n }\n\n private readonly _getCurrentUrl = (reqContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n return new URL(reqContext.url.requestUrl.href);\n };\n\n /**\n * On close handler.\n */\n private readonly onCloseHandler = () => {\n this.setState({\n itemKey: this.state.itemKey,\n userMessage: this.state.userMessage,\n statusCssString: this.state.statusCssString,\n messageGlyph: this.state.messageGlyph,\n isOpen: this.state.isOpen,\n isItemAddedToOrderTemplateOpen: false\n });\n };\n\n private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\n if (!this.state.itemAddedToCartDialogData) {\n return null;\n }\n const isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState?.result?.find(feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature')\n ?.IsEnabled || false;\n\n return (\n \n );\n };\n\n private _isFirstPage(): boolean {\n return this._getCurrentPageNumber() === 0;\n }\n\n private _getCurrentPageNumber(): number {\n const itemsPerPage = this.props.config.itemsPerPage || 50;\n return (this.props.context.request.query && +this.props.context.request.query.skip / itemsPerPage) || 0;\n }\n\n private readonly _renderPagination = (): React.ReactNode | null => {\n const { config, context, data, resources } = this.props;\n const orderTemplate = data && data.orderTemplate && data.orderTemplate.result;\n if (!orderTemplate) {\n return null;\n }\n\n const fullUrl = this._getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 50;\n const currentPageNumber = this._getCurrentPageNumber();\n const skipCount = currentPageNumber * itemsPerPage;\n const totalItems = orderTemplate && orderTemplate.totalLines;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n\n return (\n \n );\n };\n\n private _renderProductList(): IOrderTemplateLineViewProps[] {\n const {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n priceFree,\n originalPriceText,\n currentPriceText,\n addOrderTemplateItemToBagButtonText,\n removeItemFromOrderTemplateButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n inputQuantityAriaLabel,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n } = this.props.resources;\n\n const { context, telemetry, data } = this.props;\n const { catalogs } = data;\n const { imageSettings } = this.props.config;\n\n return this.state.productSelection.map((line, index) => {\n const currentProductProps: IOrderTemplateLineProps = {\n orderTemplateLine: line,\n productListLine: line.productListLine,\n price: line.fullProduct?.ProductPrice,\n error: line.error,\n shouldDisable: line.shouldDisable,\n context,\n isQuantityDisabledForUpdate: this.state.isQuantityDisabledForUpdate,\n productUrl: line.fullProduct\n ? this._updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line.productListLine.CatalogId)\n : '',\n imageSettings,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n quantity: line.productListLine.Quantity!,\n handlers: {\n onAddToBag: this._addItemToBag,\n onRemoveItem: this._removeItemFromOrderTemplateLines,\n onChangeQuantity: this._changeQuantity,\n onSelect: this.onSelect.bind(this)\n },\n resources: {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText,\n inputQuantityAriaLabel,\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n },\n index,\n isMobile: this.isMobile,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogs: catalogs && catalogs.result\n };\n\n return OrderTemplateLineView(currentProductProps)!;\n });\n }\n\n private readonly _toggleDetailsDisplayed = (props: IOrderTemplateLineProps): void => {\n let state = {\n isDetailsDisplayed: !this.state.isDetailsDisplayed\n };\n if (props) {\n state = {\n ...state,\n ...{\n detailedProductView: OrderTemplateMobileLineView(props)\n }\n };\n }\n this.setState(state);\n };\n\n // This method is used to update the product url with the catalogId\n private readonly _updateProductUrlCatalog = (\n productDetails: SimpleProduct,\n context: ICoreContext,\n catalogId: number | undefined\n ): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const absoluteUrl = new URL(productUrl, window.location.href);\n absoluteUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return absoluteUrl.href;\n }\n\n return productUrl;\n };\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _changeQuantity = async (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\n const { context, data, telemetry, config, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context) {\n if (orderTemplate?.result) {\n const orderTemplateLinesData = orderTemplate.result.orderTemplateLines;\n if (orderTemplateLinesData) {\n const orderLineIndex = orderTemplateLinesData.findIndex(\n (lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...orderTemplateLinesData[orderLineIndex] };\n if (orderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return;\n }\n const prevQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n // Update mobile modal\n if (props) {\n props.quantity = quantity;\n this.setState({\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n }\n\n this.setState({\n isQuantityDisabledForUpdate: true\n });\n\n updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [\n line.productListLine\n ])\n .then(list => {\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isQuantityDisabledForUpdate: false,\n isOpen: false\n });\n if (list) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n orderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...orderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedOrderTemplate = { ...orderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config),\n updatedOrderTemplate\n );\n }\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\n telemetry.error(error);\n const userMessage = resources.editOrderTemplateLineQuantityError;\n if (props) {\n props && (props.productListLine.Quantity = prevQuantity);\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true,\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n } else {\n newProductListLine.productListLine.Quantity = prevQuantity;\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true\n });\n }\n });\n }\n }\n }\n };\n\n private readonly _addItemToBag = async (\n product: SimpleProduct,\n quantity: number,\n itemKey: string,\n catalogId?: number | undefined\n ): Promise => {\n const { context, data, resources, telemetry } = this.props;\n const { cart } = data;\n const { maxQuantityLimitText, addedToCartFailureMessage } = resources;\n\n if (context) {\n if (cart.result) {\n const addProductToCartInput = {\n product,\n count: quantity,\n catalogId\n };\n\n await cart.result\n .addProductToCart(addProductToCartInput)\n .then((result: ICartActionResult) => {\n if (result.status === 'SUCCESS') {\n return getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(\n product.RecordId,\n this.props.context.actionContext.requestContext.apiSettings.channelId,\n product\n ),\n this.props.context.actionContext\n ).then(priceResult => {\n if (!priceResult) {\n return AsyncResult.reject('Failed to retrieve product price');\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n const isMiniCart = context.app.config.addToCartBehavior === 'showMiniCart';\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: !isMiniCart,\n itemAddedToCartDialogData: {\n product,\n productPrice: priceResult,\n quantity\n },\n isDetailsDisplayed: false\n });\n return AsyncResult.resolve();\n });\n } else if (result.substatus === 'MAXQUANTITY') {\n if (context.app.config.maxQuantityForCartLineItem) {\n const cartLineQuantity: number | undefined =\n cart.result?.cart.CartLines &&\n cart.result?.cart.CartLines.find(result => result.ProductId === product.RecordId)?.Quantity;\n const defaultMessage = `You can only add ${context.app.config.maxQuantityForCartLineItem} of this item to your shopping bag`;\n this.setState({\n itemKey,\n userMessage:\n cartLineQuantity !== undefined\n ? maxQuantityLimitText\n .replace('{curQuantity}', cartLineQuantity.toString())\n .replace('{maxQuantity}', context.app.config.maxQuantityForCartLineItem.toString()) ||\n defaultMessage\n : defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n } else {\n const defaultMessage = `Max quantity for cart line item is undefined. Please define in configuration settings.`;\n this.setState({\n itemKey,\n userMessage: defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n }\n telemetry.debug('[order-template-lines] Unable to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n })\n .catch((error: Error) => {\n telemetry.warning(error.message);\n telemetry.debug('[order-template-lines] Error trying to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n }\n }\n };\n\n private readonly _removeItemFromOrderTemplateLines = async (line: IOrderTemplateLineViewModel) => {\n const { context, data, telemetry } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const maxWaitTimeInMilliSeconds: number = 1000;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate?.result && line) {\n const featureStates = await getFeatureState(createGetFeatureStateInput(context.actionContext), context.actionContext);\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (ArrayExtensions.hasElements(featureStates)) {\n isMultipleCatalogFeatureEnabledInHq =\n featureStates.find(\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n const catalogId = getCatalogId(context.actionContext.requestContext);\n if (isMultipleCatalogFeatureEnabledInHq) {\n line.productListLine.CatalogId = catalogId;\n }\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [\n line.productListLine\n ])\n .then(async () => {\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\n );\n }\n }\n };\n\n private readonly _renameTemplate = async (_template: ProductList): Promise => {\n window.location.reload();\n return Promise.resolve();\n };\n\n private readonly _removeTemplate = () => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate && orderTemplate.result) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.result.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: orderTemplate.result?.productList.Id || '',\n userMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n const newLink = getUrlSync('ordertemplatelist', this.props.context.actionContext);\n if (newLink) {\n window.location.assign(newLink);\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template.');\n }\n };\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n }\n\n private readonly _getViewport = (): GridSize => {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n
\n
\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n
\n {paginationNextText}\n
\n );\n };\n}\n\nexport default OrderTemplateLines;\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 { Button, Collapse, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IQuickOrderGridDrawerProps } from './quick-order-grid-drawer-props';\n\n/**\n * Interface for drawer state.\n */\nexport interface IQuickOrderGridDrawerState {\n isOpen: boolean;\n}\n\n/**\n * Placement of glyph.\n */\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Quick Order Grid Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\nexport class QuickOrderGridDrawer extends React.Component {\n private readonly _drawerOpenGlyph: string;\n\n private readonly _drawerCloseGlyph: string;\n\n private readonly _drawerGlyphClass: string;\n\n private _isManuallyToggled: boolean;\n\n public constructor(props: IQuickOrderGridDrawerProps) {\n super(props);\n this._isManuallyToggled = false;\n this.state = { isOpen: props.collapseProps?.isOpen ?? false };\n this._drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n const closeGlyph = this.props.closeGlyph ? this.props.closeGlyph : '';\n if (this.props.isAnimateGlyph) {\n this._drawerOpenGlyph = classnames(this._drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : closeGlyph);\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, closeGlyph);\n }\n }\n\n /**\n * Method to call on click of drawer button.\n * @param event - Product DeliveryOption List.\n */\n public toggle = (event: React.MouseEvent | React.KeyboardEvent): void => {\n event.preventDefault();\n this._isManuallyToggled = true;\n if (this.props.onToggle) {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n this.props.onToggle(this.state);\n } else {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n }\n };\n\n public shouldComponentUpdate(nextProps: IQuickOrderGridDrawerProps, nextState: IQuickOrderGridDrawerState): 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: ICollapseProps = { ...this.props.collapseProps };\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 }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className);\n const drawerButtonClassName = `${this.props.className ? this.props.className : ''}__button`;\n this._isManuallyToggled = false;\n return (\n
    \n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen, drawerClass)}\n \n \n
    \n );\n }\n\n private _generateDrawerButtonInnerMarkup(isCollapseState: boolean, drawerClass: string): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n const headingDrawerClass = `${drawerClass}-heading`;\n const descriptionDrawerClass = `${drawerClass}-description`;\n return (\n <>\n

    {this.props.moduleHeadingText}

    \n {this.props.moduleDescriptionText}\n {this._generateGlyphMarkup('drawer__glyph__end', isCollapseState)}\n \n );\n }\n\n private _generateGlyphMarkup(location: string, isCollapseState: boolean): JSX.Element {\n let glyphClass = isCollapseState ? this._drawerOpenGlyph : this._drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return ;\n }\n}\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 { Alert, Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridState } from './utilities';\n\n/**\n * Interface quick order grid form props.\n */\nexport interface IQuickOrderGridFormProps {\n isAddtoListDisabled: boolean | undefined;\n productTextInput: React.RefObject;\n quantityTextInput: React.RefObject;\n maxChars: number;\n maxQuantity?: number;\n moduleClassName: string;\n ariaLabelQuantity: string;\n ariaLabelProduct: string;\n ariaLabelAddtoCart: string;\n quickOrderGridState: IQuickOrderGridState;\n handleInputChange(query: string): void;\n handleQuantityChange(query: string): void;\n handleAddProductListClick(): Promise;\n}\n\n/**\n * Interface quick order grid form view props.\n */\nexport interface IQuickOrderGridFormViewProps {\n product: React.ReactNode;\n quantity: React.ReactNode;\n addToListBtn: 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\n/**\n * Quick order grid form component.\n * @param props -Component form props.\n * @returns Quick order gridp view props..\n */\nexport const QuickOrderGridFormComponent = (props: IQuickOrderGridFormProps): IQuickOrderGridFormViewProps => {\n const {\n moduleClassName,\n productTextInput,\n quantityTextInput,\n quickOrderGridState,\n maxChars,\n maxQuantity,\n isAddtoListDisabled,\n ariaLabelQuantity,\n ariaLabelProduct,\n ariaLabelAddtoCart,\n handleQuantityChange,\n handleInputChange,\n handleAddProductListClick\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 addToListNode = (\n
    \n \n {ariaLabelAddtoCart}\n \n
    \n );\n\n const userMessageNode = quickOrderGridState.stateMessage ? (\n \n \n {quickOrderGridState.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToListBtn: addToListNode,\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 { 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 { 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","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { CartLine, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport * as React from 'react';\r\nimport { Quantity } from '../../utilities/quantity';\r\nimport getAttributesForSelectedVariant, { AttributesForSelectedVariantInput } from '../../../../data-actions/accordion/get-attributes-for-selected-variant';\r\n\r\n\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs\r\n */\r\nexport interface ICartlineResourceString {\r\n /** Display string for discount label */\r\n discountStringText: string;\r\n /** String for size key */\r\n sizeString: string;\r\n /** String for color key */\r\n colorString: string;\r\n /** String associated with the configuration product dimension */\r\n configString: string;\r\n /** String for style key */\r\n styleString: string;\r\n /** Display string for quantity label */\r\n quantityDisplayString: string;\r\n /** Display string for quantity label */\r\n inputQuantityAriaLabel: string;\r\n /** Aria label for the decrement button in quanitity component */\r\n decrementButtonAriaLabel: string;\r\n /** Aria label for the increment button in quanitity component */\r\n incrementButtonAriaLabel: string;\r\n salesLineSkuText: string;\r\n}\r\n\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product: SimpleProduct;\r\n imperilDimension: string;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n /** The flag to change the quantity component from interactible to static */\r\n disableQuantityInteractivity?: boolean;\r\n /** The primary image url */\r\n primaryImageUrl?: string;\r\n /** The product url */\r\n productUrl?: string;\r\n /** GridSettings for the product image in cartLine */\r\n gridSettings: IGridSettings;\r\n /** ImageSettings for the product image in cartLine */\r\n imageSettings: IImageSettings;\r\n /** Boolean flag to indicate if the item is out of stock */\r\n isOutOfStock?: boolean;\r\n /** Flag to make quantity section editable */\r\n isQuantityEditable?: boolean;\r\n /** Max quantity for line item */\r\n maxQuantity?: number;\r\n /** Current quantity for line item */\r\n currentQuantity?: number;\r\n /** Resource string for the component */\r\n resources: ICartlineResourceString;\r\n /** SalesLine flag */\r\n isSalesLine?: boolean;\r\n /** Error message to show in place of quantity */\r\n errorMessage?: string;\r\n /** Quantity onChange callback */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): void;\r\n\r\n}\r\n\r\ninterface IDimensionStrings {\r\n /** String for size key */\r\n sizeString: string;\r\n /** String for color key */\r\n colorString: string;\r\n /** String associated with the configuration product dimension */\r\n configString: string;\r\n /** String for style key */\r\n styleString: string;\r\n}\r\n\r\nconst CartLineItemFunctions = {\r\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings, props: any) => {\r\n if (!Product || !Product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return Product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === 1) {\r\n return (\r\n
    \r\n {DimensionStrings.colorString}\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
    \r\n );\r\n }\r\n if (productDimension.DimensionTypeValue === 2) {\r\n return (\r\n
    \r\n {DimensionStrings.configString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
    \r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 3) {\r\n return (\r\n
    \r\n {DimensionStrings.sizeString}\r\n {/* {productDimension.DimensionValue && productDimension.DimensionValue.Value} */}\r\n \r\n \r\n\r\n
    \r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 4) {\r\n return (\r\n
    \r\n {DimensionStrings.styleString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
    \r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n renderProductSKU:(props:ICartLineProps) => {\r\n var CartLine = props.data.cartLine;\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n if (!CartLine || !CartLine.ItemId) {\r\n return undefined;\r\n }\r\n if(CartLine && isB2B) {\r\n return(\r\n
    \r\n Sku:\r\n {CartLine.ItemId}\r\n
    \r\n );\r\n }\r\n return undefined;\r\n },\r\n\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\r\n return null;\r\n }\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
    \r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}:\r\n {` ${props.resources.discountStringText || 'Discount'} `}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountLine.Percentage : ''}%)`}\r\n \r\n
    \r\n );\r\n });\r\n }\r\n};\r\n\r\nclass DimensionLine extends React.Component {\r\n public dimension: string = '';\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n // dimension: props.data.product.result.Dimensions[1].DimensionValue.Value\r\n dimension: props.defaultValue\r\n };\r\n }\r\n public async componentDidMount(): Promise {\r\n const actionInput = new AttributesForSelectedVariantInput(\r\n this.props.product.RecordId,\r\n // @ts-ignore\r\n +this.props.context.actionContext.requestContext.apiSettings.channelId,\r\n this.props.product);\r\n\r\n await getAttributesForSelectedVariant(actionInput, this.props.context.actionContext).then((result) => {\r\n result!.forEach(res => {\r\n if (res.Name === \"Online size imperial\" && res.TextValue) {\r\n this.setState({ dimension: res.TextValue })\r\n }\r\n })\r\n }).catch(error => {\r\n console.log('error', error);\r\n });\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n {this.state.dimension}\r\n );\r\n }\r\n}\r\n\r\n\r\n// tslint:disable-next-line:max-func-body-length\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { product } = props.data;\r\n\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString\r\n };\r\n const fallbackImageUrl = getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings, props);\r\n const productSKU = CartLineItemFunctions.renderProductSKU(props);\r\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\r\n const onChange = (newValue: number) => {\r\n if (props.quantityOnChange) {\r\n props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n };\r\n\r\n const _generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
    \r\n \r\n {props.errorMessage}\r\n
    \r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n // if (props.isOutOfStock) {\r\n // const errorMessage = _generateErrorMessage();\r\n\r\n // if (errorMessage) {\r\n // return [errorMessage];\r\n // }\r\n\r\n // return null;\r\n // }\r\n if (props.isQuantityEditable && !props.data.cartLine.IsGiftCardLine) {\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n const eoqQuantity = isB2B ? props.data?.product?.Behavior?.MultipleOfQuantity : 1;\r\n nodes.push(\r\n
    \r\n
    {resources.quantityDisplayString}
    \r\n\r\n {_generateErrorMessage()}\r\n\r\n \r\n
    \r\n );\r\n } else {\r\n nodes.push(\r\n
    \r\n \r\n\r\n {_generateErrorMessage()}\r\n\r\n {props.data.cartLine.Quantity}\r\n
    \r\n );\r\n }\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n\r\n nodes.push(\r\n
    \r\n \r\n {\r\n props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 &&\r\n <>\r\n {` ${props.resources.discountStringText || 'Discount'} `}\r\n \r\n ||\r\n null\r\n }\r\n
    \r\n );\r\n\r\n return nodes;\r\n };\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {product.Name}\r\n {productDimensions.length > 0 ?\r\n
    \r\n {productDimensions}\r\n {productSKU}\r\n
    :\r\n ''\r\n }\r\n
    \r\n \r\n
    \r\n {renderDisountLines}\r\n
    \r\n {\r\n _generateQuantityandPrice()\r\n }\r\n {props.data.cartLine.ItemId &&\r\n

    \r\n {resources.salesLineSkuText || 'Sku:'} {props.data.cartLine.ItemId}\r\n

    \r\n }\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default CartLine;","/*!\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 * as React from 'react';\n\nexport default (props: { className: string; msg?: string }) => (\n <>\n
    \n {props?.msg &&
    {props?.msg}
    }\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { 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 { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { AddToCartProductListComponent } from './add-to-list';\nimport { IQuickOrderGridActionsViewProps } from './utilities';\n\n/**\n * Interface for quick order grid action data.\n */\nexport interface IQuickOrderGridActionsData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * Interface for quick order grid action props.\n */\nexport interface IQuickOrderGridActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n moduleClassName: string;\n typeName: string;\n handlers: {\n removeProductList(productListId: string): void;\n };\n resources: {\n quickOrderGridDeleteButtonText: string;\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n };\n}\n\n/**\n * Remove ProductList Action.\n * @param props -Quick order grid action props.\n */\nconst removeQuickOrderList = (props: IQuickOrderGridActionsProps): void => {\n const {\n data: { quickOrderTemplate },\n handlers\n } = props;\n const { removeProductList } = handlers;\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- Need to check data.\n if (quickOrderTemplate && quickOrderTemplate.productList.Id) {\n removeProductList(quickOrderTemplate.productList.Id);\n }\n};\n\n/**\n * Get Addtobag Button.\n * @param props -Order template action props.\n * @returns QuickOrderGrid actions view props.\n */\nconst getQuickOrderGridAddToCartDialog = (props: IQuickOrderGridActionsProps): React.ReactNode => {\n const {\n data: { quickOrderTemplate },\n context,\n moduleClassName,\n resources,\n typeName\n } = props;\n const buttonId = 'quick-order-grid';\n return (\n \n );\n};\n\n/**\n * Remove Quick order grid action.\n * @param props -Quick order grid action props.\n * @returns Remove order template.\n */\nconst removeActionHandler = (props: IQuickOrderGridActionsProps) => () => {\n removeQuickOrderList(props);\n};\n\n/**\n * Quick order grid action view.\n * @param props -Quick Order Grid template action props.\n * @returns QuickOrderGrid actions view props.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Name needs to be this.\nexport const QuickOrderGridActionsView = (props: IQuickOrderGridActionsProps): IQuickOrderGridActionsViewProps => {\n const { moduleClassName, resources } = props;\n const { quickOrderGridDeleteButtonText } = resources;\n\n return {\n addProductListToBag: getQuickOrderGridAddToCartDialog(props),\n removeProductList: (\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 { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n ArrayExtensions,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalHeader, getPayloadObject, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport React from 'react';\n\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\nimport Spinner from './spinner';\n\nexport interface IAddLineToTemplateProps {\n context: ICoreContext;\n resources: IAddLineToTemplateResources;\n orderTemplateId: string;\n imageSettings?: IImageSettings;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogs?: ProductCatalog[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: string;\n selectCatalogTitleText: string;\n selectProductButtonText: string;\n addItemToTemplateText: string;\n addLineProductUnitPricePrefix: string;\n backButtonText: string;\n decrementButtonAriaLabel: string;\n incrementButtonAriaLabel: string;\n quantitySelectLabel: string;\n addLineProductUnitOfMeasurePrefix: string;\n notFoundSearchErrorNotice: string;\n notFoundSearchErrorRedediation: string;\n searchErrorMessage: string;\n productDimensionTypeColor: string;\n productDimensionTypeConfiguration: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n searchResultsCountVerbage: string;\n searchResultsCountSubject: string;\n addToTemplateConfirmation: string;\n totalPriceLabel: string;\n progressNotificationText: string;\n addToTemplateDuplicateError: string;\n addToTemplateGenericError: string;\n dimensionMissingError: string;\n backToResultsText?: string;\n}\n\nenum CONTENT {\n Search,\n ProductList,\n ProductConfiguration,\n NotFound,\n Error,\n Loading\n}\n\ninterface IAddLineToTemplateState {\n isOpen: boolean;\n query: string;\n products: ProductSearchResult[];\n productCatalogs: ProductCatalog[] | null;\n content: number;\n selectedProduct: SimpleProduct | null;\n selectedCatalogId: number | undefined;\n selectedProductDimensions?: ProductDimensionFull[];\n selectedQuantity?: number;\n reloadPage?: boolean;\n}\n\n/**\n * Add Lines to order template.\n */\nexport class AddLineToTemplate extends React.Component {\n public state: IAddLineToTemplateState = {\n isOpen: false,\n query: '',\n products: [],\n productCatalogs: [],\n content: CONTENT.Search,\n selectedProduct: null,\n selectedCatalogId: 0\n };\n\n public defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n public searchTextInput: React.RefObject = React.createRef(); // @TODO public/private\n\n private readonly addLineButtonRef: React.RefObject = React.createRef();\n\n constructor(props: IAddLineToTemplateProps) {\n super(props);\n }\n\n public onComponentDidMount(): void {\n this.searchTextInput.current?.focus();\n }\n\n public componentDidMount(): void {\n this._getCatalogs();\n }\n\n public onComponentDidUpdate(): void {\n this.searchTextInput.current?.focus();\n }\n\n @computed get showBackArrow(): boolean {\n return this.state.content === CONTENT.ProductConfiguration;\n }\n\n public shouldComponentUpdate(nextProps: IAddLineToTemplateProps, nextState: IAddLineToTemplateState): 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 {\n resources: { addLineModalLinkText, backToResultsText }\n } = this.props;\n\n const modalProps = {\n ...this.props,\n className: 'msc-add-line-to-template',\n toggle: this._toggleModalHandler,\n isOpen: this.state.isOpen,\n ariaLabel: addLineModalLinkText\n };\n\n return (\n <>\n \n \n {this.showBackArrow && (\n \n )}\n {addLineModalLinkText}\n \n {this._renderContent()}\n \n \n \n {addLineModalLinkText}\n \n \n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchModalPlaceholderText, selectCatalogTitleText }\n } = this.props;\n\n return (\n \n {this.state.productCatalogs && ArrayExtensions.hasElements(this.state.productCatalogs) && (\n <>\n \n \n {this._getCatalogNodes()}\n \n \n )}\n
    \n \n
    \n \n );\n };\n\n private readonly _onSearchSubmit = (event: React.FormEvent): void => {\n event.preventDefault();\n\n const query = get(this, 'searchTextInput.current.value', null);\n\n if (!query) {\n return;\n }\n\n this.setState({\n content: CONTENT.Loading\n });\n\n this._getSearchResults(query)\n .then(result => {\n if (result.length === 0) {\n this.setState({\n products: result,\n content: CONTENT.NotFound\n });\n } else {\n this.setState({\n products: result,\n content: CONTENT.ProductList\n });\n }\n })\n .catch(error => {\n this.setState({\n content: CONTENT.Error\n });\n });\n };\n\n private readonly _onQuantityChangeHandler = (event: React.ChangeEvent) => {\n this.setState({\n selectedQuantity: +event.target.value\n });\n };\n\n private readonly _onSelectItem = async (product: ProductSearchResult): Promise => {\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = this.props.context;\n const varianteInput = new SelectedVariantInput(product.RecordId, channelId, [], undefined, this.props.context.request);\n const productVariant = await getSelectedVariant(varianteInput, actionContext);\n\n if (!productVariant) {\n this.props.context.telemetry.error('Error retrieving product variant');\n return Promise.resolve([]);\n }\n\n const dimensions = await this._getProductDimensions(product as SimpleProduct);\n\n this.setState({\n selectedProductDimensions: dimensions,\n content: CONTENT.ProductConfiguration,\n selectedProduct: productVariant\n });\n\n return dimensions;\n };\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n this.setState({\n query: event.target.value\n });\n };\n\n private readonly _onBackButtonClickHandler = (): void => {\n this.setState({\n content: CONTENT.ProductList\n });\n };\n\n private readonly _highlightSearchTerm = (name: string) => {\n const parsedName = name && unescape(name.replace(new RegExp(this.state.query, 'i'), '$&'));\n\n return (\n \n );\n };\n\n private readonly _resultCountText = (): string => {\n return this.props.resources.searchResultsCountVerbage\n .replace('{count}', this.state.products.length.toString())\n .replace('{subject}', `${this.props.resources.searchResultsCountSubject}${this.state.products.length > 1 ? 's' : ''}`);\n };\n\n private _renderContent(): React.ReactNode | null {\n switch (this.state.content) {\n case CONTENT.ProductConfiguration:\n const { selectedProduct, selectedProductDimensions } = this.state;\n const viewProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n product: selectedProduct!,\n dimensions: selectedProductDimensions!,\n addToTemplateHandler: this._addItemToTemplateHandler,\n onQuantityChangeHandler: this._onQuantityChangeHandler,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm()\n };\n\n return ;\n\n case CONTENT.ProductList:\n const productProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n clickHandler: this._onSelectItem,\n products: this.state.products,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm(),\n renderResultCountText: this._resultCountText\n };\n\n return (\n \n \n \n );\n\n case CONTENT.Loading:\n return (\n \n {this._renderSearchForm()}\n \n \n );\n\n case CONTENT.NotFound:\n const { notFoundSearchErrorNotice, notFoundSearchErrorRedediation } = this.props.resources;\n\n return (\n \n

    {this._resultCountText()}

    \n {this._renderSearchForm()}\n \n
    \n );\n\n case CONTENT.Error:\n return (\n \n {this._renderSearchForm()}\n
    \n {this.props.resources.searchErrorMessage}\n
    \n
    \n );\n\n default:\n return {this._renderSearchForm()};\n }\n }\n\n private readonly _addItemToTemplateHandler = async (config: IProductConfigurationState): Promise => {\n const {\n orderTemplateId,\n context: { actionContext },\n isMultipleCatalogFeatureEnabledInHq\n } = this.props;\n const catalogId = this.state.selectedCatalogId;\n const input = isMultipleCatalogFeatureEnabledInHq\n ? new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea',\n isMultipleCatalogFeatureEnabledInHq,\n catalogId\n )\n : new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea'\n );\n const result = await addItemToOrderTemplate(input, actionContext);\n this.setState({\n isOpen: false,\n reloadPage: true\n });\n // reload when closing\n window.location.reload();\n return result;\n };\n\n /**\n *\n * Get all active product catalogs.\n */\n private _getCatalogs(): void {\n const { isMultipleCatalogFeatureEnabledInHq, catalogs } = this.props;\n\n // if Channel Multiple Catalogs Feature is enabled then show all catalogs.\n const productCatalogs = isMultipleCatalogFeatureEnabledInHq && catalogs ? catalogs : [];\n\n // get the current catalog id.\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n // set the current catalog id as a default selected catalog id from the url\n this.setState({\n productCatalogs: productCatalogs,\n selectedCatalogId: catalogId\n });\n }\n\n private _getCatalogNodes(): JSX.Element[] | null {\n const { productCatalogs, selectedCatalogId } = this.state;\n if (productCatalogs && ArrayExtensions.hasElements(productCatalogs)) {\n return productCatalogs.map((productCatalog: ProductCatalog) => {\n // initially select default catalog in dropdown\n const isSelected = productCatalog.RecordId === selectedCatalogId;\n return (\n \n );\n });\n }\n return [];\n }\n\n private readonly _onCatalogSelectionChange = (event: React.ChangeEvent) => {\n this.setState({\n selectedCatalogId: Number.parseInt(event.target.value, 10)\n });\n };\n\n private _getSearchResults(searchText: string): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { selectedCatalogId } = this.state;\n const searchCriteriaInput: ProductSearchCriteria = {};\n\n searchCriteriaInput.Context = {\n ChannelId: channelId,\n CatalogId: selectedCatalogId\n };\n searchCriteriaInput.IncludeAttributes = true;\n searchCriteriaInput.SearchCondition = searchText;\n\n return searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\n }\n\n private async _getProductDimensions(product: SimpleProduct): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const id = product.MasterProductId ? product.MasterProductId : product.RecordId;\n\n return getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(id, channelId, [], this.props.context.request),\n actionContext\n );\n }\n\n private readonly _toggleModalHandler = () => {\n if (this.state.isOpen) {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'add-item-to-template', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'add-item-to-template');\n this._getCatalogs();\n this.addLineButtonRef.current!.focus();\n }\n\n this.setState({\n isOpen: !this.state.isOpen,\n content: CONTENT.Search\n });\n\n if (this.state.reloadPage) {\n window.location.reload();\n this.setState({\n reloadPage: 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 { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface IDropdownState {\n /**\n * @friendlyName selectedIndex\n * @description Selected index.\n */\n selectedIndex: string;\n}\n\nexport interface IDropdownProps {\n dropdownId: number;\n dropdownName: string;\n dropdownList: IDropdownItemProps[];\n telemetryContent?: ITelemetryContent;\n onChange?(selection: IDropdownOnSelection): void;\n}\n\nexport interface IDropdownItemProps {\n value: string;\n id: number;\n}\n\nexport interface IDropdownOnSelection {\n dropdownId: number;\n selectId: string;\n selectedValue: string;\n}\n\n/**\n *\n * DropDown component.\n * @extends {React.PureComponent}\n */\nexport class Dropdown extends React.PureComponent {\n private readonly selectMenu: React.RefObject = React.createRef();\n\n constructor(props: IDropdownProps, state: IDropdownState) {\n super(props);\n this.state = {\n selectedIndex: ''\n };\n }\n\n public componentDidMount(): void {\n if (this.selectMenu.current) {\n this.selectMenu.current.selectedIndex = 0;\n }\n }\n\n public render(): JSX.Element {\n const { dropdownId, dropdownList, dropdownName } = this.props;\n\n return (\n \n {dropdownList.map(\n (item: IDropdownItemProps) =>\n item && (\n \n {item.value}\n \n )\n )}\n \n );\n }\n\n private readonly _onChanged = (event: React.ChangeEvent): void => {\n this.setState({ selectedIndex: event.target.value });\n\n if (this.props.onChange) {\n this.props.onChange({\n dropdownId: this.props.dropdownId,\n selectId: event.target.value,\n selectedValue: event.target.innerText\n });\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport const NotFoundComponent = (props: { error: string; msg: string }) => (\n <>\n
    \n
    {props.error}
    \n
    {props.msg}
    \n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { debounce } from 'lodash';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\ninterface IQuantityProps {\n min?: number;\n max: number;\n currentCount?: number;\n disabled?: boolean;\n incrementGlyphClass?: string;\n decrementGlyphClass?: string;\n decrementButtonAriaLabel?: string;\n incrementButtonAriaLabel?: string;\n inputQuantityAriaLabel?: string;\n id?: string;\n onChange?(newValue: number): void;\n}\n\ninterface IQuantityState {\n currentInput: number;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class OrderTemplateQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n constructor(props: IQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount || 1 };\n this._handleChange = this._handleChange.bind(this);\n\n reaction(\n () => this.props.currentCount,\n () => {\n this.setState({ currentInput: this.props.currentCount || 1 });\n }\n );\n }\n\n public render(): JSX.Element {\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const disabled = this.props.currentCount === this.props.min;\n const incDisabled = this.props.currentCount === this.props.max;\n const currentValue = this.state.currentInput;\n let extraClass = '';\n if (disabled) {\n // The quantity has reached its boundaries (max or min)\n extraClass = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClass = 'transition';\n }\n const getChangeHandler = (amount: number) => () => {\n this._onIncrementalChange(amount);\n };\n\n return (\n
    \n \n \n \n \n \n \n \n
    \n );\n }\n\n private _onIncrementalChange(amount: number): void {\n const updatedQuantity = this.state.currentInput + amount;\n\n if (updatedQuantity >= 1 && updatedQuantity <= this.props.max) {\n this.props.onChange && this.props.onChange(updatedQuantity);\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n const currentValue = Number.parseInt(e.target.value, 10);\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState({ currentInput: this.props.max });\n } else {\n this.setState({ currentInput: currentValue }, () => {\n debounce(() => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }, 200)();\n });\n }\n }\n\n private readonly _validateMin = (): void => {\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\n this.props.onChange && this.props.onChange(minValue);\n } else {\n this.props.onChange && this.props.onChange(this.state.currentInput);\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 { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductDimensionValue, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getFallbackImageUrl,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getSelectedVariant,\n IProductInventoryInformation,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent, ModalBody, ModalFooter } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport OrderTemplateQuantity from '../common/order-template-quantity';\nimport { Dropdown, IAddLineToTemplateProps, IAddLineToTemplateResources, IDropdownItemProps, IDropdownOnSelection } from '.';\n\nexport interface IProductCnnfigurationProps extends IAddLineToTemplateProps {\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n imageSettings: IImageSettings;\n telemetryContent?: ITelemetryContent;\n searchForm: React.ReactNode;\n addToTemplateHandler(params: IProductConfigurationState): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n}\n\nexport interface IProductConfigurationState {\n quantity: number;\n unitPrice: number;\n totalPrice: number;\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n selectedDimensions: {};\n productAvailableQuantity?: IProductInventoryInformation;\n buttonDisabled: boolean;\n showAddConfirmation: boolean;\n errorMessage?: string;\n isBusy: boolean;\n errors: { dimension?: string[]; add?: string };\n}\n\n/**\n * Configure selected product for addition to order template.\n */\nexport class ProductConfiguration extends React.Component {\n private selectedDimensions: {} = {};\n\n constructor(props: IProductCnnfigurationProps) {\n super(props);\n\n this.state = {\n quantity: 1,\n unitPrice: props.product.Price,\n totalPrice: props.product.Price,\n product: props.product,\n dimensions: props.dimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n selectedDimensions: {},\n buttonDisabled: false,\n showAddConfirmation: false\n } as IProductConfigurationState;\n }\n\n public shouldComponentUpdate(nextProps: IProductCnnfigurationProps, nextState: IProductConfigurationState): 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 {\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings }\n },\n resources: {\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n totalPriceLabel\n },\n imageSettings,\n highlightSearchTerm\n } = this.props;\n const { buttonDisabled, product, quantity, unitPrice, totalPrice, showAddConfirmation, errors } = this.state;\n const isMultipleCatalogSelect = this.props.isMultipleCatalogFeatureEnabledInHq ? 'isMultipleCatalogSelect' : '';\n return (\n <>\n \n {this.props.searchForm}\n
    \n
    \n
    \n \n
    \n
    {product?.ItemId}
    \n {highlightSearchTerm(product?.Name ?? '')}\n
    \n {addLineProductUnitPricePrefix}\n {` `}\n {this._formatPrice(unitPrice)}\n
    \n
    \n {addLineProductUnitOfMeasurePrefix}\n {` `}\n {product?.DefaultUnitOfMeasure}\n
    \n
    \n
    \n
    {this._getDimensionsNodes()}
    \n
    \n
    \n
    {quantitySelectLabel}
    \n \n
    \n
    \n
    \n {totalPriceLabel}\n {` `}\n {this._formatPrice(totalPrice)}\n
    \n
    \n \n {showAddConfirmation && (\n \n
    \n )}\n {errors?.add && (\n
    \n
    \n )}\n \n {addItemToTemplateText}\n \n \n \n );\n }\n\n private _getConfirmationMessage(): string {\n const selectedDimensionNames = this.state.dimensions\n .map(dimension => {\n let variant = dimension.DimensionValues?.find(\n value => value.RecordId === this.selectedDimensions[dimension.DimensionTypeValue]\n )?.Value;\n if (dimension.DimensionTypeValue === 3) {\n variant = `size ${variant}`;\n }\n return variant;\n })\n .filter(value => value);\n\n return this.props.resources.addToTemplateConfirmation\n .replace('{count}', this.state.quantity.toString())\n .replace('{productAndDimensions}', `${this.state.product.Name}, ${Object.values(selectedDimensionNames).join(', ')}`);\n }\n\n private _getDimensionsNodes(): React.ReactElement[] {\n const { dimensions } = this.state;\n const { resources } = this.props;\n\n return dimensions?.map((dimension: ProductDimensionFull) => {\n const { DimensionValues, DimensionTypeValue } = dimension;\n const mapDimensions = (value: ProductDimensionValue): IDropdownItemProps => ({\n id: value.RecordId,\n value: value.Value || ''\n });\n const dimensionName = this._getDropdownName(DimensionTypeValue, resources);\n const dropdownList: IDropdownItemProps[] = DimensionValues ? DimensionValues.map(mapDimensions) : [];\n dropdownList.unshift({ id: 0, value: `Choose a ${dimensionName}` });\n\n return (\n
    \n
    {dimensionName}
    \n {this.state.errors?.dimension?.includes(DimensionTypeValue.toString()) && (\n \n \n \n )}\n \n
    \n );\n });\n }\n\n private readonly _getDimensionsError = (dimensionName: string) =>\n this.props.resources.dimensionMissingError.replace(/{dimensionName}/g, dimensionName);\n\n private readonly _addToTemplateHandler = async (event: React.MouseEvent) => {\n // Hide confirmation of previous addition when adding multiple items\n this.setState({\n isBusy: true,\n showAddConfirmation: false,\n errors: { ...this.state.errors, add: undefined }\n });\n\n const missingDimensions = this.state.dimensions\n .map(dimension => dimension.DimensionTypeValue.toString())\n .filter(type => !this.selectedDimensions[type]);\n\n this.setState({\n errors: { dimension: missingDimensions }\n });\n if (missingDimensions.length > 0) {\n this.setState({\n isBusy: false\n });\n return;\n }\n\n this.props\n .addToTemplateHandler({ ...this.state })\n .then(status => {\n // Validate against the existance of a ProductListId\n if (status.ProductListId) {\n this.setState({\n isBusy: false,\n showAddConfirmation: true\n });\n }\n })\n .catch(error => {\n const { addToTemplateDuplicateError, addToTemplateGenericError } = this.props.resources;\n let errorMessage;\n\n if (error.error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n errorMessage = addToTemplateDuplicateError;\n } else {\n errorMessage = addToTemplateGenericError;\n }\n\n this.setState({\n isBusy: false,\n errors: { ...this.state.errors, add: errorMessage }\n });\n this.props.context.telemetry.error('Error adding item to order template');\n });\n };\n\n private readonly _onQuantityChange = (newValue: number) => {\n this.setState({\n quantity: newValue,\n totalPrice: newValue * this.props.product.Price\n });\n };\n\n private readonly _updateDimensionValue = (\n productDimensionFull: ProductDimensionFull,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n // Rehydrate the selected variants price, available dimensions & sizes\n private readonly _onDimensionChanged = async (selection: IDropdownOnSelection): Promise => {\n const { product, dimensions, context } = this.props;\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = context;\n\n // Remaining error notifications for missing dimensions\n const remainingDimensionsErrors = this.state.errors?.dimension?.filter(id => id !== selection.dropdownId.toString());\n\n this.setState({\n isBusy: false,\n showAddConfirmation: false,\n buttonDisabled: true,\n errors: { add: undefined, dimension: remainingDimensionsErrors }\n });\n\n // Update currently selected dimensions\n this.selectedDimensions[selection.dropdownId] = +selection.selectId;\n\n const mappedDimensions = dimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, this.selectedDimensions[dimension.DimensionTypeValue]) ||\n dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension && dimension.DimensionValue;\n });\n\n const variantProduct = await getSelectedVariant(\n new SelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n\n if (!variantProduct) {\n this.props.context.telemetry.error(\n `Error retrieving variant product for product ${product.MasterProductId ? product.MasterProductId : product.RecordId}`\n );\n return;\n }\n\n const dimensionInput = new GetDimensionsForSelectedVariantInput(\n variantProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n );\n const variantDimensions = await getDimensionsForSelectedVariant(dimensionInput, actionContext);\n\n if (!variantDimensions) {\n this.props.context.telemetry.error('Error retrieving dimensions for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n const availabilityInput = new ProductAvailabilitiesForSelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId\n );\n\n // @TODO sync UX quantity w/ actual availability\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(availabilityInput, actionContext);\n const priceInput = new PriceForSelectedVariantInput(product.RecordId, channelId);\n const productPrice = await getPriceForSelectedVariant(priceInput, actionContext);\n\n if (!productPrice) {\n this.props.context.telemetry.error('Error retrieving price for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n this.setState({\n buttonDisabled: false,\n productAvailableQuantity: (newAvailableQuantity && newAvailableQuantity[0]) || undefined,\n unitPrice: +(productPrice.BasePrice || product.Price),\n dimensions: variantDimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n product: variantProduct\n });\n };\n\n private readonly _getDropdownName = (dimensionType: number, resources: IAddLineToTemplateResources): string => {\n switch (dimensionType) {\n case 1: // Color\n return resources.productDimensionTypeColor;\n case 2: // Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // Size\n return resources.productDimensionTypeSize;\n case 4: // Style\n return resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private _formatPrice(price: number): string {\n const {\n context: {\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n }\n } = this.props;\n\n return formatCurrency(price.toFixed(2), currencyCode);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport { IAddLineToTemplateProps } from '.';\n\nexport interface IProductListProps extends IAddLineToTemplateProps {\n products: ProductSearchResult[];\n imageSettings: IImageSettings;\n searchForm: React.ReactNode;\n clickHandler(product: ProductSearchResult): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n renderResultCountText(): string;\n}\n\nexport const ProductList = (props: IProductListProps) => {\n const {\n products,\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings },\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n },\n clickHandler,\n highlightSearchTerm,\n renderResultCountText,\n resources: { selectProductButtonText },\n imageSettings\n } = props;\n\n return (\n <>\n

    \n {renderResultCountText()}\n

    \n {props.searchForm}\n
    \n {products.map((product: ProductSearchResult, index: number) => {\n const { Price, ItemId, Name, PrimaryImageUrl } = product;\n const price = formatCurrency(Price.toFixed(2), currencyCode);\n const primaryImageSource = generateImageUrl(PrimaryImageUrl ?? '', apiSettings) ?? '';\n const fallBackImg = getFallbackImageUrl(ItemId, apiSettings, props.context.request.app?.config?.OmniChannelMedia) ?? '';\n\n return (\n
    \n
    \n \n
    \n
    {ItemId}
    \n {highlightSearchTerm(Name ?? '')}\n
    \n
    \n
    \n {price}\n \n
    \n
    \n );\n })}\n
    \n \n );\n};\n\ninterface IProductSelectButton {\n product: ProductSearchResult;\n buttonText: string;\n clickHandler(product: ProductSearchResult): Promise;\n}\n\nconst ProductSelectButton = (props: IProductSelectButton) => {\n const [isBusy, setBusy] = useState(false);\n const { product, buttonText, clickHandler } = props;\n const getClickHandler = React.useCallback(async () => {\n setBusy(!isBusy);\n await clickHandler(product);\n setBusy(!isBusy);\n }, [clickHandler, isBusy, product]);\n\n return (\n \n {buttonText}\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 AddOrderTemplateToCartComponent,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n RenameOrderTemplateComponent,\n OrderTemplateNameDialog\n} from '@msdyn365-commerce/components';\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy';\nimport { OrderTemplate, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent, Popover } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nexport interface IOrderTemplateActionsData {\n orderTemplate: OrderTemplate;\n}\n\nexport interface IOrderTemplateActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onRemoveTemplate(orderTemplateId: string): void;\n onRenameTemplate(orderTemplate: ProductList): Promise;\n };\n renameOrderTemplateDialogStrings: IOrderTemplateNameDialogResources;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n resources: {\n addTemplateToBagButtonText: string;\n renameTemplateButtonText: string;\n deleteTemplateButtonText: string;\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n}\n\nexport interface IOrderTemplateActionsViewProps {\n addTemplateToBag: React.ReactNode;\n renameTemplate?: React.ReactNode;\n removeTemplate?: React.ReactNode;\n isMultipleCatalogsFeatureEnabled?: boolean;\n actionsSplitButton?: React.ReactNode;\n}\n\n/**\n * Remove Order Action.\n * @param props -Order template action props.\n * @returns Remove order template.\n */\nconst removeOrderActionHandler = (props: IOrderTemplateActionsProps) => () => {\n _removeOrderTemplate(props);\n};\n\nexport const OrderTemplateActionsView = (props: IOrderTemplateActionsProps): IOrderTemplateActionsViewProps => {\n const { resources, isMultipleCatalogFeatureEnabledInHq } = props;\n const { deleteTemplateButtonText } = resources;\n\n return {\n addTemplateToBag: _getOrderTemplateAddToCartDialog(props),\n renameTemplate: !isMultipleCatalogFeatureEnabledInHq && _getOrderTemplateRenameControl(props),\n removeTemplate: !isMultipleCatalogFeatureEnabledInHq && (\n \n ),\n actionsSplitButton: isMultipleCatalogFeatureEnabledInHq && \n };\n};\n\nconst _removeOrderTemplate = (props: IOrderTemplateActionsProps): void => {\n const {\n data: { orderTemplate },\n handlers\n } = props;\n const { onRemoveTemplate } = handlers;\n\n if (onRemoveTemplate) {\n onRemoveTemplate(orderTemplate.productList.Id);\n }\n};\n\nconst _getOrderTemplateAddToCartDialog = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const {\n data: { orderTemplate },\n typeName,\n id,\n context,\n telemetryContent,\n resources,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n const {\n addTemplateToBagButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n } = resources;\n\n const dialogStrings = {\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n };\n\n return (\n \n );\n};\n\nconst _getOrderTemplateRenameControl = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const { renameOrderTemplateDialogStrings, resources, context, handlers } = props;\n return (\n \n );\n};\n\nlet buttonEventReference: HTMLButtonElement | undefined;\nexport const ActionsSplitButton: React.FC = (props: IOrderTemplateActionsProps) => {\n const [isStatementRequestAdminDropdownOpen, setIsStatementRequestAdminDropdownOpen] = useState(false);\n const [renameOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = React.useState(false);\n\n const onOrderTemplateNameCancel = () => {\n context.telemetry.debug('Rename of template was canceled.');\n buttonEventReference?.focus();\n };\n\n const onRenameButtonClick = (event: React.MouseEvent) => {\n buttonEventReference = event.target as HTMLButtonElement;\n setOrderTemplateNameDialogOpen(true);\n event.preventDefault();\n };\n const onToggleDropdown1 = () => {\n setIsStatementRequestAdminDropdownOpen(!isStatementRequestAdminDropdownOpen);\n };\n const {\n data: { orderTemplate },\n resources,\n renameOrderTemplateDialogStrings,\n context\n } = props;\n\n const className = 'ms-order-template-action-bar';\n\n const popoverReference = React.createRef();\n const renderModalPopup = (\n \n );\n const requestStatementDropdownString = `request-statement-dropdown-id-${Random.Guid.generateGuid()}`;\n\n return (\n
    \n {renderModalPopup}\n \n {'Options'}\n \n \n \n\n \n {'Delete'}\n \n \n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport OrderTemplateQuantity from './common/order-template-quantity';\n\nexport interface IOrderTemplateLineProps extends ProductListLine {\n orderTemplateLine: IOrderTemplateLineViewModel;\n productListLine: ProductListLine;\n price?: ProductPrice;\n context: ICoreContext;\n productUrl: string;\n imageSettings?: IImageSettings;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n quantity: number;\n isQuantityDisabledForUpdate?: boolean;\n handlers: {\n onAddToBag(product: SimpleProduct, quantity: number, itemKey: string, catalogId?: number | undefined): void;\n onRemoveItem(line: IOrderTemplateLineViewModel): void;\n onChangeQuantity(orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps): void;\n onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void;\n };\n resources: {\n selectOneRowText?: string;\n moreButtonText?: string;\n viewProductDetailsText?: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n inputQuantityAriaLabel: string;\n removeFromOrderTemplateLinesText: string;\n addToBagButtonText: string;\n deleteButtonText: string;\n incrementButtonAriaLabel?: string;\n decrementButtonAriaLabel?: string;\n editOrderTemplateLineQuantityError?: string;\n unavailableProductErrorMessage?: string;\n outOfStockProductErrorMessage?: string;\n };\n index: number;\n isMobile: boolean;\n productQuantityView?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n toggleDetailsDisplayed(props: IOrderTemplateLineProps): void;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n catalogs?: ProductCatalog[];\n error?: string;\n shouldDisable?: boolean;\n}\n\nexport interface IOrderTemplateLineViewProps {\n key?: string;\n productImage: React.ReactNode;\n productPrice?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productName?: string;\n productNumber?: React.ReactNode;\n productInfo?: React.ReactNode;\n productLabel?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n productQuantity?: number;\n productQuantityView?: React.ReactNode;\n productListId?: string;\n selectLine?: React.ReactNode;\n popUp?: JSX.Element;\n extraActionsPopup?: JSX.Element | null | undefined;\n isMobile?: boolean;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalog?: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface IEventHandlerFactory {\n getAddToBag(): (event: React.MouseEvent) => void;\n getRemoveItem(): (event: React.MouseEvent) => void;\n}\n\nconst OrderTemplateLineActions = (props: IOrderTemplateLineProps): IEventHandlerFactory => {\n const { orderTemplateLine, productListLine, quantity, handlers } = props;\n const { LineId, CatalogId } = productListLine;\n const { onAddToBag, onRemoveItem } = handlers;\n\n return {\n getAddToBag: () => (event: React.MouseEvent) => {\n LineId &&\n orderTemplateLine.fullProduct &&\n onAddToBag(orderTemplateLine.fullProduct.ProductDetails, quantity, LineId, CatalogId);\n },\n getRemoveItem: () => (event: React.MouseEvent) => LineId && onRemoveItem(props.orderTemplateLine)\n };\n};\n\ninterface IPopupProps extends IOrderTemplateLineProps {\n addButtonClassName: string;\n removeButtonClassName: string;\n}\n\nconst PopUp = (props: IPopupProps): JSX.Element | null => {\n const { addToBagButtonText, removeFromOrderTemplateLinesText, moreButtonText, viewProductDetailsText } = props.resources;\n const [showMobile, setShowMobile] = useState(false);\n const componentClassName = 'ms-table';\n\n const getViewHandler = () => (event: React.MouseEvent) => {\n props.toggleDetailsDisplayed(props);\n };\n\n const toggle = React.useCallback(() => {\n setShowMobile(!showMobile);\n }, [showMobile]);\n\n return (\n
    \n \n {showMobile && (\n
    \n \n View\n \n {getActionButton(\n props.isMobile,\n props.removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(props).getRemoveItem()\n )}\n {getActionButton(\n props.isMobile,\n props.addButtonClassName,\n addToBagButtonText,\n OrderTemplateLineActions(props).getAddToBag()\n )}\n
    \n )}\n
    \n );\n};\n\nconst getActionButton = (\n isMobile: boolean,\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n\nconst getDesktopActionButton = (\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n/**\n * On Select line function.\n * @param orderTemplateLine -Order template line.\n * @param input -Order template line props.\n * @returns Set on select order template.\n */\nconst onSelectLineHandler = (orderTemplateLine: IOrderTemplateLineViewModel, input: IOrderTemplateLineProps) => (\n event: React.ChangeEvent\n) => {\n orderTemplateLine.isChecked = !orderTemplateLine.isChecked;\n\n input.handlers.onSelect(orderTemplateLine, event.target.checked);\n};\n\nexport const OrderTemplateLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | null => {\n const {\n orderTemplateLine,\n productListLine,\n price,\n context,\n imageSettings,\n quantity,\n resources,\n isMobile,\n isMultipleCatalogFeatureEnabledInHq\n } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n const { removeFromOrderTemplateLinesText, addToBagButtonText, selectOneRowText } = resources;\n if (!product) {\n return null;\n }\n\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const addButtonClassName = input.isMobile ? 'ms-table__row-links-add' : 'ms-order-template-table-line__product-add-button';\n const removeButtonClassName = input.isMobile ? 'ms-table__row-links-delete' : 'ms-order-template-table-line__product-remove-button';\n\n return {\n isMobile,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogFeatureEnabledInHq,\n selectLine: (\n \n ),\n key: LineId!,\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'ms-order-template-table-line__product-image',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: product && (\n <>\n
    {ItemId}
    \n {input.error !== 'NONE' ? (\n
    {_renderProductError(input)}
    \n ) : (\n undefined\n )}\n \n ),\n productUnitOfMeasure: price ? (\n
    {UnitOfMeasure || price.UnitOfMeasure}
    \n ) : (\n undefined\n ),\n productListId: LineId!,\n removeButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(\n input.isMobile,\n removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(input).getRemoveItem()\n ),\n productQuantityView:
    {_generateQuantity(input, LineId!)}
    ,\n productQuantity: quantity,\n addToBagButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(input.isMobile, addButtonClassName, addToBagButtonText, OrderTemplateLineActions(input).getAddToBag()),\n extraActionsPopup:\n !isMobile && isMultipleCatalogFeatureEnabledInHq ? (\n \n ) : (\n undefined\n ),\n popUp: ,\n disabled: input.shouldDisable\n };\n};\n\nconst ExtraActionsPopup = (props: IPopupProps): JSX.Element | null => {\n const [showActions, setShowActions] = useState(false);\n const toggle = React.useCallback(() => {\n setShowActions(!showActions);\n }, [showActions]);\n\n const className = 'ms-order-template-table-line__extra-actions-cell';\n const actionsContainerClassName = `${className}__actions-container`;\n return (\n
    \n
    \n );\n};\n\nexport const OrderTemplateMobileLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | undefined => {\n const { orderTemplateLine, productListLine, price, context, imageSettings, isMultipleCatalogFeatureEnabledInHq } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n if (!product) {\n return;\n }\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n\n return {\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'thumbnail',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: ItemId,\n productUnitOfMeasure: UnitOfMeasure || price?.UnitOfMeasure,\n productQuantityView: _generateQuantity(input, LineId!)\n };\n};\n\nexport interface IOrderTemplateProductQuantityViewProps {\n ContainerProps: INodeProps;\n input: React.ReactNode;\n}\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps | undefined) => void,\n itemKey: string,\n props: IOrderTemplateLineProps\n) => (newValue: number) => {\n if (onChangeQuantity) {\n onChangeQuantity(itemKey, newValue, props);\n }\n};\n\nconst _generateQuantity = (props: IOrderTemplateLineProps, itemKey: string): React.ReactNode => {\n const { handlers, resources, quantity } = props;\n const { onChangeQuantity } = handlers;\n return (\n \n );\n};\n\nexport const _renderProductImage = (\n className: string,\n context: ICoreContext,\n heading: string,\n image?: string,\n fallbackImage?: string,\n imageSettings?: IImageSettings\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n};\n\nexport const renderProductCatalog = (props: IOrderTemplateLineProps) => {\n const catalogId = props.productListLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.catalogs)) {\n return null;\n }\n\n const catalog = props.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
    {catalog.Name}
    ;\n};\n\nconst _renderPrice = (props: IOrderTemplateLineProps): JSX.Element | null => {\n const { price, context, moduleId, moduleTypeName, resources } = props;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderProductDimensions = (props: IOrderTemplateLineProps): (string | undefined)[] => {\n const { orderTemplateLine } = props;\n\n if (!orderTemplateLine.fullProduct || !orderTemplateLine.fullProduct.ProductDetails.Dimensions) {\n return [];\n }\n\n return orderTemplateLine.fullProduct.ProductDetails.Dimensions.map(dimension => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n\n return dimension.DimensionValue.Value;\n });\n};\n\nconst _renderProductError = (props: IOrderTemplateLineProps) => {\n const { error, resources } = props;\n\n if (!error) {\n return '';\n }\n\n const errorMessages = {\n OOS: resources.outOfStockProductErrorMessage,\n UNASSORTED: resources.unavailableProductErrorMessage,\n NONE: ''\n };\n\n return errorMessages[error];\n};\n\nexport const renderProductInfo = (props: IOrderTemplateLineProps): React.ReactNode | undefined => {\n const { orderTemplateLine, productUrl } = props;\n const name = orderTemplateLine.fullProduct?.ProductDetails.Name;\n\n const dimensions = _renderProductDimensions(props);\n if (!orderTemplateLine.fullProduct) {\n return [];\n }\n\n const productName = productUrl ? (\n \n {name}\n \n ) : (\n
    {name}
    \n );\n\n const dimensionsLine: string = dimensions.join(', ');\n\n return (\n
    \n
    {productName}
    \n
    {dimensionsLine}
    \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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateLinesStatus } from '../order-template';\n\nexport interface IOrderTemplateLinesStatusMessageProps {\n className?: string;\n errorType: orderTemplateLinesStatus;\n text?: string;\n}\n\nexport const OrderTemplateLinesStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

    {text}

    ;\n case 'FAILED':\n return

    {text}

    ;\n case 'LOADING':\n default:\n return

    {text}

    ;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\n\nexport interface IOrderTemplateTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productUOM: string;\n productQuantity: string;\n productActions: string;\n lines: IOrderTemplateLineViewModel[];\n isMobile: boolean;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalogName?: string;\n}\n\n/**\n * Order Template's table state.\n */\nexport interface IOrderTemplateTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IOrderTemplateTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Order Template's table heading.\n */\nexport class OrderTemplateTableHeading extends React.PureComponent {\n public state: IOrderTemplateTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateTableHeadingProps,\n state: IOrderTemplateTableHeadingState\n ): IOrderTemplateTableHeadingState {\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\n let nextState = { ...state };\n nextState = { isChecked: checkedLines === 0 };\n return nextState;\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: this.state.isChecked\n },\n () => {\n this.props.clickHandler(!this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\n {this.props.productLineCatalogName}\n ) : null}\n {!this.props.isMobile ? {this.props.productImage} : null}\n {this.props.productNumber}\n {!this.props.isMobile ? {this.props.productName} : null}\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\n {!this.props.isMobile ? {this.props.productUOM} : null}\n {!this.props.isMobile ? {this.props.productQuantity} : null}\n {!this.props.isMobile ? {this.props.productActions} : }\n \n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { QuickOrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order grid.\n */\nexport class QuickOrderGridProduct {\n @observable\n public isSelected: boolean;\n\n public readonly productLine: QuickOrderTemplateLine;\n\n public constructor(productLine: QuickOrderTemplateLine) {\n this.productLine = productLine;\n this.isSelected = false;\n }\n}\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\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 _renderOtherCharges(props: ICheckoutViewProps): React.ReactNode | null{\r\n const chargeAmountInclTax = props.data.checkout.result?.checkoutCart.cart.ChargeAmount && props.data.checkout.result?.checkoutCart.cart.ChargeAmount || 0;\r\n const shippingCharges = props.data.checkout.result?.checkoutCart.cart.ShippingChargeAmount && props.data.checkout.result?.checkoutCart.cart.ShippingChargeAmount || 0;\r\n const chargeLines = props.data.checkout.result?.checkoutCart.cart.ChargeLines;\r\n\r\n let otherChargesAmountFromLines = 0;\r\n let totalChargeAmountFromLines = 0;\r\n let chargesOverriden = false;\r\n let displayOtherChargesAmount = 0;\r\n let shippingChargesFromLines = 0;\r\n const freightChargeCode = props.context.app.config.freightChargeCode;\r\n\r\n if(chargeLines) {\r\n chargeLines.forEach(chargeLine => {\r\n const chargeAmountInclTaxLocal = chargeLine.CalculatedAmount ? chargeLine.CalculatedAmount : 0;\r\n if (chargeLine.ChargeCode != freightChargeCode) {\r\n otherChargesAmountFromLines += chargeAmountInclTaxLocal;\r\n }\r\n if (chargeLine.ChargeCode == freightChargeCode){\r\n shippingChargesFromLines += chargeAmountInclTaxLocal;\r\n }\r\n });\r\n }\r\n\r\n if(shippingChargesFromLines == 0 && shippingCharges != shippingChargesFromLines)\r\n {\r\n totalChargeAmountFromLines = shippingCharges + otherChargesAmountFromLines;\r\n }\r\n else{\r\n totalChargeAmountFromLines = shippingChargesFromLines + otherChargesAmountFromLines;\r\n }\r\n \r\n chargesOverriden = totalChargeAmountFromLines != chargeAmountInclTax;\r\n displayOtherChargesAmount = chargesOverriden ? 0 : otherChargesAmountFromLines;\r\n if (displayOtherChargesAmount == 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n

    \r\n {displayOtherChargesAmount && displayOtherChargesAmount > 0 ? (\r\n <>\r\n Other charges\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\n\r\n\r\nfunction _renderShippingInclTaxes(props: ICheckoutViewProps): 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 _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 _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 { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order grid table header resources.\n */\nexport interface IQuickOrderGridTableHeaderResources {\n quickOrderGridProductNumberText: string;\n quickOrderGridProductText: string;\n quickOrderGridUnitPriceText: string;\n quickOrderGridUnitOfMeasureText: string;\n quickOrderGridQuantityText: string;\n quickOrderGridActionsText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderGridTableHeaderResources;\n}\n\n/**\n * Interface for quick order grid table header component.\n */\nexport interface IQuickOrderGridTableHeaderComponent extends IComponent {}\n\n/**\n * Get the quick order grid header cells for desktop.\n * @param props -- The quick order grid table header props.\n * @returns The list of cells for quick order grid header component in desktop version.\n */\nconst QuickOrderGridDesktopHeaderCellsComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderGridProductNumberText}\n {resources.quickOrderGridProductText}\n {resources.quickOrderGridUnitPriceText}\n {resources.quickOrderGridUnitOfMeasureText}\n {resources.quickOrderGridQuantityText}\n {resources.quickOrderGridActionsText}\n \n );\n};\n\n/**\n * Get the quick order grid header cells for mobile.\n * @param props -- The quick order grid table header props.\n * @returns The quick order grid header component in desktop version.\n */\nconst QuickOrderGridMobileHeaderCellsComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderGridProductNumberText}\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 QuickOrderGridTableHeaderComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\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 { PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductPrice } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { QuickOrderGridProduct } from '../../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../../utilities';\n\n/**\n * Data required to render each quick order grid row.\n */\nexport interface IQuickOrderGridTableRowData {\n product: QuickOrderGridProduct;\n}\n\n/**\n * Resources for quick order grid table rows.\n */\nexport interface IQuickOrderGridTableRowResources {\n quickOrderGridQuantityMobileText: string;\n quickOrderGridProductDimensionsSeparator: string;\n quickOrderGridViewDetailsButtonText: string;\n quickOrderGridViewDetailsButtonAriaLabel: string;\n quickOrderGridRemoveItemButtonAriaLabel: string;\n quickOrderGridInputQuantityAriaLabel: string;\n quickOrderGridDecrementButtonAriaLabel: string;\n quickOrderGridIncrementButtonAriaLabel: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n productListLine: ProductListLine;\n price?: ProductPrice;\n moduleId: string;\n moduleTypeName: string;\n quantity: number;\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderGridTableRowResources;\n index: number;\n callbacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * The default image settings for quick order grid 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 grid row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderGridTableRowProductImageComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const fallbackImageUrl = getFallbackImageUrl(\n product?.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n
    \n \n
    \n );\n};\n\nlet setShowPreviousActions: React.Dispatch> | undefined;\n\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderProductPrice = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const { context, moduleId, moduleTypeName, resources } = props;\n const price = props.price;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderUnitOfMeasure = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const price = props.price;\n\n if (price) {\n return (\n
    \n {StringExtensions.isNullOrEmpty(props.productListLine.UnitOfMeasure) || price.UnitOfMeasure}\n
    \n );\n }\n return null;\n};\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (\n orderTemplateLineId: string | undefined,\n quantity: number,\n props?: IQuickOrderGridTableRowProps | undefined\n ) => boolean,\n itemKey: string | undefined,\n props: IQuickOrderGridTableRowProps\n) => (newValue: number) => {\n onChangeQuantity(itemKey, newValue, props);\n return true;\n};\n\n/**\n * On Change function.\n * @param onRemoveItem -On change quantity function.\n * @param quickOrderGridProductKey -QuickOrderGridp Product.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onRemoveHandler = (\n onRemoveItem: (quickOrderGridProduct: QuickOrderGridProduct, props?: IQuickOrderGridTableRowProps | undefined) => void,\n quickOrderGridProductKey: QuickOrderGridProduct,\n props: IQuickOrderGridTableRowProps\n) => () => {\n onRemoveItem(quickOrderGridProductKey, props);\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 QuickOrderGridExtraActionsPopupComponent: React.FC = (\n props: IQuickOrderGridTableRowProps\n): JSX.Element | null => {\n const {\n resources: { quickOrderGridViewDetailsButtonAriaLabel, quickOrderGridViewDetailsButtonText }\n } = props;\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const [shouldShowActions, setShowActions] = useState(false);\n let productUrl = '';\n if (product === undefined) {\n return null;\n }\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n const onClickViewDetails = React.useCallback(() => {\n if (MsDyn365.isBrowser) {\n window.location.href = productUrl;\n }\n }, [productUrl]);\n\n const toggle = React.useCallback(() => {\n const shouldShowActionsNewValue = !shouldShowActions;\n if (shouldShowActionsNewValue) {\n if (setShowPreviousActions) {\n setShowPreviousActions(false);\n }\n setShowActions(shouldShowActionsNewValue);\n setShowPreviousActions = setShowActions;\n } else {\n setShowPreviousActions = undefined;\n setShowActions(shouldShowActionsNewValue);\n }\n }, [shouldShowActions, setShowActions]);\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n const actionsContainerClassName = `${className}__actions-container`;\n\n return (\n
    \n \n \n {props.resources.quickOrderGridRemoveItemButtonAriaLabel}\n \n
    \n )}\n
    \n );\n};\n\n/**\n * Renders quick order grid table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for desktop view.\n */\nexport const QuickOrderGridDesktopTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { quantity } = props;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n if (product !== undefined) {\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.quickOrderGridProductDimensionsSeparator)}\n \n
    \n \n {renderProductPrice(props)}\n {renderUnitOfMeasure(props)}\n \n \n \n \n \n \n \n );\n }\n\n return null;\n};\n\n/**\n * Renders rows for mobile view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for mobile view.\n */\nexport const QuickOrderGridMobileTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { quantity } = props;\n if (product !== undefined) {\n return (\n <>\n \n \n \n \n
    \n {product.RecordId}\n \n \n \n
    \n \n \n \n \n \n );\n }\n return null;\n};\n\n/**\n * Quick order table row component.\n * @param props - Configuration of the component.\n * @returns React node for the row.\n */\nexport const QuickOrderGridTableRowComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const rowClassName = `${props.className}__row`;\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n let headerCells: JSX.Element;\n if (isMobileView) {\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 MsDyn365, { IComponent, IComponentProps, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport React from 'react';\n\nimport { QuickOrderGridProduct } from '../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../utilities';\nimport {\n IQuickOrderGridTableHeaderResources,\n IQuickOrderGridTableRowResources,\n QuickOrderGridTableHeaderComponent,\n QuickOrderGridTableRowComponent\n} from './components';\n\n/**\n * Quick order table data interface.\n */\ninterface IQuickOrderGridTableData {\n quickOrderGridProducts: QuickOrderGridProduct[];\n}\n\n/**\n * Quick order table resources.\n */\nexport interface IQuickOrderGridTableResources extends IQuickOrderGridTableHeaderResources, IQuickOrderGridTableRowResources {}\n\n/**\n * Quick order table props.\n */\nexport interface IQuickOrderGridTableProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n moduleId: string;\n moduleTypeName: string;\n\n resources: IQuickOrderGridTableResources;\n isMobileView: boolean;\n imageSettings?: IImageSettings;\n callBacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * Quick order table component.\n */\nexport interface IQuickOrderGridTableComponent extends IComponent {}\n\n/**\n * The quick order table.\n * @param props -- The quick order table props.\n * @returns The quick order table element.\n */\nexport const QuickOrderGridTableComponent: React.FC = (props: IQuickOrderGridTableProps) => {\n const [isMobile, setIsMobile] = React.useState(props.isMobileView);\n const quickOrderGridProducts = props.data.quickOrderGridProducts;\n\n /**\n * Update the view port.\n */\n const updateViewport = () => {\n setIsMobile(props.isMobileView);\n };\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', updateViewport);\n }\n\n const headerClassName = `${props.className}__header`;\n const rowClassName = `${props.className}__row`;\n\n return (\n \n \n {quickOrderGridProducts.map((quickOrderProduct, index) => {\n const price = quickOrderProduct.productLine.fullProduct?.ProductPrice;\n const quantity = quickOrderProduct.productLine.productListLine.Quantity!;\n return (\n \n );\n })}\n
    \n );\n};\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as 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 { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React, { useState } from 'react';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * The Create Order Template Button Props.\n */\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\n /**\n * The label for create order template.\n */\n createOrderTemplateText: string;\n\n /**\n * The create order template dialog resources.\n */\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n\n /**\n * The delegate to fire when dialog captured any user entry.\n */\n onOrderTemplateCreated(): Promise;\n}\n\nconst CreateOrderTemplateButton: React.FC = props => {\n const onCancelHandler = React.useCallback(() => {\n return;\n }, []);\n const [isCreateOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\n const onCreateButtonClick = React.useCallback(() => {\n setOrderTemplateNameDialogOpen(true);\n }, []);\n\n return (\n <>\n \n {props.createOrderTemplateText}\n \n \n \n );\n};\n\nexport default CreateOrderTemplateButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\nimport { deleteAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport Spinner from '../order-template/components/add-line/spinner';\nimport {\n ISingleOrderTemplateProps,\n ISingleOrderTemplateViewProps,\n OrderTemplateListStatusMessage,\n OrderTemplateRender\n} from './components';\nimport CreateNewTemplateButtonComponent from './components/create-order-template';\nimport { IOrderTemplateListData } from './order-template-list.data';\nimport { HeadingTag, IOrderTemplateListProps, IOrderTemplateListResources } from './order-template-list.props.autogenerated';\n\nexport interface IOrderTemplateActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n headerStatusMessage: string;\n}\n\nexport type orderTemplateListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IOrderTemplateListViewProps extends IOrderTemplateListProps {\n OrderTemplateList: IModuleProps;\n status?: orderTemplateListStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplates?: INodeProps;\n OrderTemplate?: INodeProps;\n orderTemplates?: ISingleOrderTemplateViewProps[];\n createOrderTemplateButton?: React.ReactNode;\n templateHeaderStatusMessage?: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateList component.\n * @extends {React.PureComponent, IOrderTemplateListActionMessageState>}\n */\n@observer\nclass OrderTemplateList extends React.Component, IOrderTemplateActionMessageState> {\n constructor(props: IOrderTemplateListProps) {\n super(props);\n this.state = {\n itemKey: '',\n userMessage: '',\n headerStatusMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false\n };\n }\n\n public async componentDidMount(): Promise {\n this.setState({});\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateListProps,\n nextState: IOrderTemplateActionMessageState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { className, heading } = this.props.config;\n const { emptyOrderTemplateText, createNewTemplateButtonText } = this.props.resources;\n const { orderTemplates } = this.props.data;\n const orderTemplatesData = orderTemplates && orderTemplates.result;\n const orderTemplateListHeading = heading?.text ?? this.props.resources.orderTemplateListTitle;\n\n if (orderTemplates.status === 'LOADING') {\n const errorProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: (\n \n )\n };\n return this.props.renderView(errorProps);\n }\n\n if (orderTemplatesData && orderTemplatesData.length === 0) {\n // When no order templates are found for customer\n const emptyViewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'EMPTY',\n statusMessage: ,\n createOrderTemplateButton: (\n \n ),\n heading: (\n \n )\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'SUCCESS',\n heading: ,\n createOrderTemplateButton: (\n \n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n
    \n \n {this.state.headerStatusMessage}\n \n
    \n ),\n OrderTemplates: {\n className: 'ms-order-template__list-item',\n tag: 'ul'\n },\n OrderTemplate: {\n className: 'ms-order-template__tile',\n tag: 'li'\n },\n orderTemplates: orderTemplatesData && this._renderOrderTemplateList(orderTemplatesData)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateListResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private _renderOrderTemplateList(orderTemplates: OrderTemplate[]): ISingleOrderTemplateViewProps[] {\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n return orderTemplates.map((orderTemplate: OrderTemplate, index) => {\n const currentTemplateProps: ISingleOrderTemplateProps = {\n orderTemplateState: this.state,\n Id: orderTemplate.productList.Id,\n name: orderTemplate.productList.Name,\n orderTemplate,\n context,\n imageSettings,\n enableImageProductLink,\n removeFromOrderTemplateListText: 'remove',\n addToBagText: this.props.resources.addToBagButtonText,\n index,\n itemKey: orderTemplate.productList.Id,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n handlers: {\n onRemoveOrderTemplate: this._onRemoveFromOrderTemplateList,\n onDismiss: this._onDismiss\n },\n resources: {\n closeWindowButtonText: this.props.resources.closeWindowButtonText,\n addToCartFailureMessage: this.props.resources.addToCartFailureMessage,\n addToCartSuccessMessage: this.props.resources.addToCartSuccessMessage,\n addToCartProcessMessage: this.props.resources.addToCartProcessMessage,\n orderTemplateErrorMessage: this.props.resources.orderTemplateErrorMessage,\n linesAddedToCartDialogResources: {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n }\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled()\n };\n\n return OrderTemplateRender(currentTemplateProps)!;\n });\n }\n\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _reloadPage = async () => {\n window.location.reload();\n };\n\n private readonly _onRemoveFromOrderTemplateList = (productListId: string): void | undefined => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplates } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplates.result && orderTemplates.result[0] && productListId) {\n const orderTemplate = orderTemplates.result.find(p => p.productList.Id === productListId);\n if (orderTemplate) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: productListId,\n headerStatusMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n })\n .then(this._reloadPage)\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n });\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template.');\n }\n }\n };\n}\n\nexport default OrderTemplateList;\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 { 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 { AddToCartComponent, IAddToCartResources, OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { getUrlSync, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { SalesLine } from '@msdyn365-commerce/retail-proxy';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\n/**\n * The data on which the component should operate.\n */\nexport interface IAddToCartSelectedData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * The resources needed to render a buy selected component.\n */\nexport interface IAddToCartSelectedResources {\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n}\n\n/**\n * Configuration of a buy selected component.\n */\nexport interface IAddToCartSelectedProps extends IComponentProps {\n className: string;\n context: ICoreContext;\n\n resources: IAddToCartSelectedResources;\n\n isIcon?: boolean;\n}\n\n/**\n * Get the dialog strings.\n * @param props - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getDialogStrings = (props: IAddToCartSelectedProps): IAddToCartResources => {\n return {\n goToCartText: props.resources.quickOrderGridGoToCartText ?? '',\n continueShoppingText: props.resources.quickOrderGridDialogCloseText ?? '',\n closeNotificationLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? '',\n headerItemOneText: props.resources.quickOrderGridSingleItemText ?? '',\n headerItemFormatText: props.resources.quickOrderGridMultiLineItemFormatText ?? '',\n headerLinesFormatText: props.resources.quickOrderGridMultiLinesFormatText ?? '',\n headerMessageText: props.resources.quickOrderGridHeaderMessageText ?? '',\n freePriceText: props.resources.freePriceText ?? '',\n originalPriceText: props.resources.originalPriceText ?? '',\n currentPriceText: props.resources.currentPriceText ?? '',\n addedQuantityText: props.resources.addedQuantityText ?? '',\n buyAgainNotificationTitle: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationTitle ?? '',\n buyAgainNotificationCloseAriaLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? ''\n };\n};\n\n/**\n * Get the dialog strings.\n * @param quickOrder - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getOrderDetails = (quickOrder: QuickOrderTemplate): OrderDetailsProduct[] => {\n const orderDetails: OrderDetailsProduct[] = [];\n for (const quickLine of quickOrder.quickOrderTemplateLines) {\n const quantity = quickLine.productListLine.Quantity;\n const salesLine: SalesLine = {\n Quantity: quantity\n };\n const products = new OrderDetailsProduct(salesLine, quickLine.fullProduct?.ProductDetails);\n orderDetails.push(products);\n }\n return orderDetails;\n};\n\n/**\n * Renders a button which adds given products to the cart.\n * @param props - Configuration of the component.\n * @returns A react element or null if no products were given.\n */\nexport const AddToCartProductListComponent: React.FC = (props: IAddToCartSelectedProps): JSX.Element | null => {\n const {\n data: { quickOrderTemplate }\n } = props;\n\n if (quickOrderTemplate?.quickOrderTemplateLines[0].fullProduct?.ProductDetails === undefined) {\n return null;\n }\n const quantity = quickOrderTemplate.quickOrderTemplateLines[0].productListLine.Quantity;\n const buttonLabel = props.resources.quickOrderGridBuySelectedButtonText;\n const buttonAriaLabel = props.resources.quickOrderGridBuySelectedButtonAriaLabel;\n const dialogStrings: IAddToCartResources = getDialogStrings(props);\n const shouldSkipSiteSettings: boolean = true;\n const orderDetailProducts = getOrderDetails(quickOrderTemplate);\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 OrderTemplateLines from './modules/order-template/order-template';\nimport OrderTemplateLinesView from './modules/order-template/order-template.view';\n\nexport * from './modules/order-template/components';\nexport * from './modules/order-template/order-template';\nexport * from './modules/order-template/order-template.data';\nexport * from './modules/order-template/order-template.view';\n\n// Export * from './modules/order-template/actions';\nexport * from './modules/order-template/order-template.props.autogenerated';\nexport * from './modules/order-template-list/components';\nexport * from './modules/order-template-list/order-template-list';\nexport * from './modules/order-template-list/order-template-list.data';\nexport * from './modules/order-template-list/order-template-list.view';\n\nexport { OrderTemplateLines, OrderTemplateLinesView };\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './add-to-list';\nexport * from './quick-order-grid-actions';\nexport * from './quick-order-grid-drawer';\nexport * from './quick-order-grid-form';\nexport * from './quick-order-grid-product';\nexport * from './quick-order-grid-product-selected-product';\nexport * from './quick-order-grid-table';\nexport * from './utilities';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewProps } from './components';\nimport { IOrderTemplateViewProps } from './order-template';\n\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\n const {\n OrderTemplateLines,\n status,\n statusMessage,\n heading,\n ProductsTable,\n ProductsTableHeading,\n orderLines,\n ProductsTableRow,\n productsStatusMessage,\n OrderTemplateActions,\n orderActions,\n pagination,\n itemAddedToCartDialog,\n bulkOrderLineActions,\n isDetailsDisplayed,\n detailedProductView,\n toggleDetailsDisplayed,\n resources: {\n cancelBtnLabel,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productLineCatalogName\n }\n } = props;\n\n const toggleDetails = React.useCallback(() => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n }, [toggleDetailsDisplayed]);\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {orderActions?.actionsSplitButton}\n {!isDetailsDisplayed && productsStatusMessage}\n \n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n \n \n {ProductsTableHeading}\n \n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n \n \n {pagination}\n \n )}\n {itemAddedToCartDialog}\n \n Product Details\n \n
      \n
    • {detailedProductView?.productImage}
    • \n
    • \n {productText}:\n {detailedProductView?.productInfo}\n
    • \n
    • \n {productLineCatalogName}:\n {detailedProductView?.productLineCatalog}\n
    • \n
    • \n {productNumberText}:\n {detailedProductView?.productNumber}\n
    • \n
    • \n {productUnitPriceText}:\n {` `}\n {detailedProductView?.productPrice}\n
    • \n
    • \n {productUOMText}:\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n
    • \n
    • \n {productQuantityText}:\n {detailedProductView?.productQuantityView}\n
    • \n {productsStatusMessage &&
    • {productsStatusMessage}
    • }\n
    \n
    \n \n \n \n \n
    \n );\n};\n\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productLineCatalog,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile,\n extraActionsPopup,\n isMultipleCatalogFeatureEnabledInHq,\n disabled\n } = product;\n\n const lineVisibility = disabled\n ? {\n pointerEvents: 'none',\n opacity: 0.5\n }\n : {\n pointerEvents: 'auto',\n opacity: 1\n };\n\n const disableElement: React.CSSProperties = lineVisibility as React.CSSProperties;\n\n return (\n \n {selectLine}\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && {productLineCatalog}}\n {productImage}\n {isMobile ? (\n \n
    {productNumber}
    \n
    \n {quantityLabel}:{` `}\n {productQuantity}\n
    \n \n ) : (\n {productNumber}\n )}\n {!isMobile && {productInfo}}\n {!isMobile && {productPrice}}\n {!isMobile && {productUnitOfMeasure}}\n {!isMobile && {productQuantityView}}\n {isMobile && {popUp}}\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\n \n {addToBagButton}\n {removeButton}\n \n )}\n {extraActionsPopup}\n
    \n );\n};\n\nexport default OrderTemplateLinesView;\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, getCatalogId } from '@msdyn365-commerce/core-internal';\nimport { ArrayExtensions, IDimensionsApp, validateCatalogId } 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 { FeatureState } from '@msdyn365-commerce/retail-proxy';\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 const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState?.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\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 isMultipleCatalogFeatureEnabledInHq={isMultipleCatalogsFeatureEnabled}\n catalogId={catalogId}\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 { 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 { IProductDimensionConfigureDropdownViewProps, IProductDimensionConfigureViewProps } from '@msdyn365-commerce/components';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridFormViewProps } from './components';\nimport { IQuickOrderGridViewProps } from './quick-order-grid';\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\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 container.\n * @param form -- Form props.\n * @param isMobileView -- Flag to check mobile view.\n * @param quickOrderForm - Form component container.\n * @param quickOrderProductContent - Form product component.\n * @param quickOrderMessageContent - Form user message component.\n * @param configure - Product Dimension component.\n * @returns Jsx element of quick order form component.\n */\nconst renderForm = (\n form: IQuickOrderGridFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMessageContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n \n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.userMessage}\n {form.addToListBtn}\n \n \n ) : (\n \n {form.userMessage}\n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToListBtn}\n \n \n );\n};\n\n/**\n * Retrieves current sort criteria.\n * @param props - QuickOrder Grid view props.\n * @returns - Render View.\n */\nconst quickOrderGridView: React.FC = props => {\n const {\n quickOrderGridProps,\n contentProps,\n form,\n quickOrderGridForm,\n drawer,\n configure,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n isMobileView,\n header,\n container,\n actions,\n orderActions\n } = props;\n\n return (\n \n {header}\n {actions && (\n \n {orderActions?.addProductListToBag}\n {orderActions?.removeProductList}\n \n )}\n \n \n {renderForm(\n form as IQuickOrderGridFormViewProps,\n isMobileView,\n quickOrderGridForm,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n configure\n )}\n {props.bulkPurchase}\n \n \n {container}\n \n );\n};\n\nexport default quickOrderGridView;\n","import { debounce } from 'lodash';\r\nimport * as React from 'react';\r\nimport { IQuantityProps } from './Quantity.props';\r\n\r\ninterface IQuantityState {\r\n currentInput: number;\r\n}\r\n/**\r\n * Quantity Component - This component is used to add or remove quantity\r\n */\r\n\r\nexport default class Quantity extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n min: 1,\r\n decrementGlyphClass: 'fas fa-minus',\r\n incrementGlyphClass: 'fas fa-plus'\r\n };\r\n\r\n private inputRef: React.RefObject = React.createRef();\r\n\r\n constructor(props: IQuantityProps) {\r\n super(props);\r\n this.state = { currentInput: props.currentCount || 1 };\r\n this._onIncrement = this._onIncrement.bind(this);\r\n this._onDecrement = this._onDecrement.bind(this);\r\n this._handleChange = this._handleChange.bind(this);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\r\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\r\n this.setState({\r\n currentInput: this.props.currentCount || 1\r\n })\r\n const disabled = this.state.currentInput === this.props.min;\r\n const incDisabled = this.state.currentInput === this.props.max;\r\n const currentValue = this.state.currentInput;\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n }\r\n\r\n private _onIncrement(): void {\r\n let invokeCallback = false;\r\n let amount:number = this.props.min || 1;\r\n this.setState((prevState: IQuantityState) => {\r\n if (prevState.currentInput + amount <= this.props.max) {\r\n invokeCallback = true;\r\n return { currentInput: prevState.currentInput + amount};\r\n } else {\r\n invokeCallback = false;\r\n return { currentInput: prevState.currentInput };\r\n }\r\n // tslint:disable-next-line:align\r\n }, () => {\r\n invokeCallback && this.props.onChange && this.props.onChange(this.state.currentInput);\r\n });\r\n }\r\n\r\n private _onDecrement(): void {\r\n let invokeCallback = false;\r\n let amount:number = this.props.min || 1;\r\n this.setState((prevState: IQuantityState) => {\r\n if (prevState.currentInput > amount) {\r\n invokeCallback = true;\r\n return { currentInput: prevState.currentInput - amount };\r\n } else {\r\n invokeCallback = false;\r\n return { currentInput: amount };\r\n }\r\n // tslint:disable-next-line:align\r\n }, () => { invokeCallback && this.props.onChange && this.props.onChange(this.state.currentInput); });\r\n }\r\n\r\n private _handleChange(e: React.ChangeEvent): void {\r\n const currentValue = parseInt((e.target.value), 10);\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n const inputElement = this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\r\n\r\n if (currentValue > this.props.max) {\r\n this.setState({ currentInput: this.props.max },\r\n () => {\r\n debounce(() => {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }, 200)();});\r\n } else {\r\n this.setState({ currentInput: currentValue },\r\n () => {\r\n debounce(() => {\r\n if(!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue)) {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n\r\n if (inputElement) {\r\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\r\n inputElement.setAttribute('value', currentValue.toString());\r\n }\r\n }\r\n }, 200)();});\r\n }\r\n }\r\n\r\n private _validateMin = (): void => {\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n if(isNaN(this.state.currentInput) || (this.state.currentInput < minValue)) {\r\n this.setState({ currentInput: minValue }, () => { this.props.onChange && this.props.onChange(this.state.currentInput); });\r\n } else {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }\r\n }\r\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 { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport { IOrderTemplateData } from '../order-template.data';\nimport { IOrderTemplateProps } from '../order-template.props.autogenerated';\nimport { AddLineToTemplate } from '.';\n\ninterface IOrderTemplateBulkActionsProps extends IOrderTemplateProps {\n orderTemplateId: string;\n selectedLines: IOrderTemplateLineViewModel[];\n isMinifiedView: boolean;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n telemetryContent?: ITelemetryContent;\n onAddSelectionToBag(): void;\n onRemoveSelection(): void;\n}\n\ninterface IOrderTemplateBulkActionsState {\n isAddDisabled: boolean;\n isRemoveDisabled: boolean;\n}\n\n/**\n * Bulk Order Template line actions.\n */\nexport class OrderTemplateBulkActions extends React.PureComponent {\n public state: IOrderTemplateBulkActionsState = {\n isAddDisabled: true,\n isRemoveDisabled: true\n };\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateBulkActionsProps,\n state: IOrderTemplateBulkActionsState\n ): IOrderTemplateBulkActionsState {\n const selectedLines = props.selectedLines.length;\n let nextState = { ...state };\n nextState = {\n isAddDisabled: selectedLines === 0,\n isRemoveDisabled: selectedLines === 0\n };\n return nextState;\n }\n\n public render(): JSX.Element {\n const {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n addSelectedToBagButtonText,\n removeSelectedToBagButtonText,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n } = this.props.resources;\n\n const addLineProps = {\n context: this.props.context,\n telemetryContent: this.props.telemetryContent,\n resources: {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n },\n imageSettings: this.props.config.imageSettings,\n orderTemplateId: this.props.orderTemplateId,\n isMultipleCatalogFeatureEnabledInHq: this.props.isMultipleCatalogFeatureEnabledInHq,\n catalogs: this.props.data.catalogs?.result\n };\n\n return (\n <>\n \n \n \n {!this.props.isMinifiedView && addSelectedToBagButtonText}\n \n \n \n {!this.props.isMinifiedView && removeSelectedToBagButtonText}\n \n \n );\n }\n\n private readonly addHandler = (event: React.MouseEvent) => {\n this.setState({\n isAddDisabled: true\n });\n\n this.props.onAddSelectionToBag();\n\n this.setState({\n isAddDisabled: false\n });\n };\n\n private readonly removeHandler = (event: React.MouseEvent) => {\n this.setState({\n isRemoveDisabled: true\n });\n\n this.props.onRemoveSelection();\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 { ISingleOrderTemplateViewProps } from './components';\nimport { IOrderTemplateListViewProps } from './order-template-list';\n\nexport const OrderTemplateListView: React.FC = props => {\n const {\n OrderTemplateList,\n status,\n statusMessage,\n heading,\n OrderTemplates,\n orderTemplates,\n OrderTemplate,\n createOrderTemplateButton,\n templateHeaderStatusMessage\n } = props;\n\n return (\n \n {heading}\n {status !== 'SUCCESS' && statusMessage}\n \n {createOrderTemplateButton}\n {templateHeaderStatusMessage}\n \n {OrderTemplates && orderTemplates && orderTemplates.length > 0 && (\n \n {orderTemplates &&\n orderTemplates.map(orderTemplate => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n \n )}\n \n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n return (\n \n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n \n );\n};\n\nexport default OrderTemplateListView;\n"],"sourceRoot":""}