{"version":3,"sources":["webpack:///src/modules/checkout-delivery-options/components/checkout-delivery-options.description.tsx?8620","webpack:///src/modules/checkout-delivery-options/components/checkout-delivery-options.error-message.tsx?8f25","webpack:///src/modules/checkout-delivery-options/components/checkout-delivery-options.error-title.tsx?e220","webpack:///src/modules/checkout-delivery-options/components/checkout-delivery-options.radio-button.tsx?f1bb","webpack:///src/modules/checkout-delivery-options/checkout-delivery-options.tsx?d83e","webpack:///src/modules/checkout/components/get-line-items.tsx?5207","webpack:///./src/themes/mands/views/components/promocode.component.tsx?84ec","webpack:///src/modules/quick-order-grid/quick-order-grid.tsx?92ff","webpack:///src/modules/fabrikam/views/components/promocode.component.tsx?7eef","webpack:///src/modules/fabrikam/views/components/cartlineitem.component.tsx?4b07","webpack:///src/modules/social-share-item/social-share-item.tsx?e01b","webpack:///src/common/place-order.tsx?73b4","webpack:///src/modules/checkout/components/index.ts?5ba9","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/video-player/components/additional-content.tsx?22a8","webpack:///src/modules/video-player/video-player.tsx?cfb9","webpack:///./src/modules/mands-checkout/common/waiting.tsx?22ce","webpack:///src/modules/bulk-purchase/bulk-purchase.view.tsx?2550","webpack:///src/common/get-checkout-return-url.tsx?942d","webpack:///src/modules/order-template/order-template.tsx?4281","webpack:///src/modules/ratings-histogram/ratings-histogram.tsx?4c32","webpack:///./src/modules/mands-order-details/mands-order-details.view.tsx?71b6","webpack:///./src/themes/mands/views/cart.view.tsx?2ea9","webpack:///./src/modules/mands-order-history/common/label.tsx?0127","webpack:///./src/modules/mands-order-history/actions/get-order-shipment-history.ts?f291","webpack:///./src/modules/mands-order-history/common/utilities.ts?4813","webpack:///./src/modules/mands-order-history/common/get-groups.tsx?2472","webpack:///./src/modules/mands-order-history/common/get-order-information.tsx?3467","webpack:///./src/modules/mands-order-history/common/address.tsx?d94e","webpack:///./src/modules/mands-order-history/common/get-sales-line.tsx?2dc8","webpack:///./src/modules/mands-order-history/common/get-sales-lines.tsx?54a8","webpack:///./src/modules/mands-order-history/components/get-sales-order.tsx?d12f","webpack:///./src/modules/mands-order-history/actions/get-sales-order-originators.ts?ba31","webpack:///./src/modules/mands-order-history/mands-order-history.tsx?f8ac","webpack:///src/order-summary-lineitem.tsx?86d9","webpack:///src/modules/quick-order-grid/components/quick-order-grid-drawer.tsx?4c7d","webpack:///../../src/index.ts?0e3e","webpack:///src/modules/quick-order-grid/components/quick-order-grid-form.tsx?a8cc","webpack:///./src/modules/mands-checkout-delivery-options/mands-checkout-delivery-options.view.tsx?e19c","webpack:///src/modules/carousel/carousel.view.tsx?b19a","webpack:///src/modules/active-image/active-image.view.tsx?b3e2","webpack:///./src/modules/mands-checkout/common/error.tsx?307c","webpack:///./src/modules/mands-checkout/common/index.ts?ff61","webpack:///./src/modules/mands-checkout/checkout-errors/checkout-errors.ts?7b6d","webpack:///../../../src/module-state-manager/with-module-state.tsx?61ca","webpack:///src/modules/order-template/components/add-line/spinner.tsx?28dd","webpack:///src/modules/checkout-gift-card/components/get-form.tsx?9f59","webpack:///src/modules/checkout-gift-card/components/get-item.tsx?ec46","webpack:///src/modules/checkout-gift-card/components/get-list.tsx?9723","webpack:///src/modules/checkout-gift-card/components/title.tsx?6d07","webpack:///src/modules/checkout-gift-card/checkout-gift-card.tsx?e6b8","webpack:///../../src/checkout-state.ts?acd8","webpack:///src/common/index.ts?ee63","webpack:///src/modules/promo-banner/promo-banner.view.tsx?d069","webpack:///src/modules/video-player/video-player.view.tsx?2e40","webpack:///src/modules/checkout/index.ts?1106","webpack:///./src/themes/mands/views/custom-components/get-line-items.tsx?eb95","webpack:///src/modules/quick-order-grid/components/quick-order-grid-actions.tsx?cd72","webpack:///./src/themes/mands/views/mands-checkout.view.tsx?cc5c","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/checkout-loyalty/checkout-loyalty.view.tsx?876d","webpack:///src/modules/checkout/checkout.view.tsx?e9a7","webpack:///src/modules/checkout/components/get-invoice-payment-summary.tsx?6271","webpack:///src/modules/checkout/checkout.tsx?baa3","webpack:///src/checkout-errors/checkout-errors.ts?687e","webpack:///src/common/error.tsx?f9f6","webpack:///src/modules/quick-order-grid/components/quick-order-grid-product.ts?7530","webpack:///src/modules/gift-card-balance-check/components/get-form.tsx?f122","webpack:///src/modules/gift-card-balance-check/components/get-item.tsx?d7f7","webpack:///src/modules/gift-card-balance-check/gift-card-balance-check.tsx?6bc9","webpack:///../../../src/module-state-manager/module-state.ts?7579","webpack:///./src/modules/mands-checkout-delivery-options/mands-checkout-delivery-options.props.autogenerated.ts?567f","webpack:///./src/modules/mands-checkout-delivery-options/components/mands-checkout-delivery-options.description.tsx?9a6b","webpack:///./src/modules/mands-checkout-delivery-options/components/mands-checkout-delivery-options.error-message.tsx?db59","webpack:///./src/modules/mands-checkout-delivery-options/components/mands-checkout-delivery-options.error-title.tsx?d425","webpack:///./src/modules/mands-checkout-delivery-options/components/mands-checkout-delivery-options.radio-button.tsx?35a8","webpack:///./src/modules/mands-checkout-delivery-options/mands-checkout-delivery-options.tsx?6650","webpack:///src/common/checkout.tsx?9dad","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/mands-checkout/common/checkout.tsx?5a11","webpack:///src/common/iframe.tsx?89ab","webpack:///src/common/country-codes.tsx?5421","webpack:///./src/modules/mands-checkout/common/place-order.tsx?70c0","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/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/common/with-visibility-observer.tsx?6bf2","webpack:///./src/modules/mands-checkout/components/alert.tsx?170e","webpack:///./src/modules/mands-checkout/components/get-line-items.tsx?f873","webpack:///./src/modules/mands-checkout/components/order-summary-lineitem.tsx?69ac","webpack:///./src/modules/mands-checkout/components/get-order-summary.tsx?9e8f","webpack:///./src/modules/mands-checkout/components/guided-card.tsx?3f31","webpack:///./src/modules/mands-checkout/components/guided-form.tsx?17ca","webpack:///./src/modules/mands-checkout/components/place-order-button.tsx?7ced","webpack:///./src/modules/mands-checkout/mands-checkout.tsx?7299","webpack:///./src/modules/mands-checkout/methods/place-order.ts?3bc2","webpack:///src/modules/social-share-item/social-share-item.view.tsx?ce9b","webpack:///src/modules/ratings-histogram/component/components.tsx?2a0b","webpack:///src/common/payment-instrument-message.ts?208d","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/mands-checkout/common/payment-instrument-message.ts?b909","webpack:///src/modules/checkout/components/alert.tsx?5f0c","webpack:///src/modules/checkout-gift-card/checkout-gift-card.view.tsx?3424","webpack:///src/modules/order-template/order-template.view.tsx?f2c8","webpack:///src/modules/bulk-purchase/bulk-purchase.tsx?d704","webpack:///src/modules/checkout/components/place-order-button.tsx?c8b4","webpack:///../../../src/module-state-manager/index.ts?8e3a","webpack:///./src/modules/mands-order-history/mands-order-history.view.tsx?452c","webpack:///src/modules/carousel/carousel.tsx?bfbb","webpack:///src/modules/ratings-histogram/ratings-histogram.view.tsx?4481","webpack:///./src/modules/mands-order-details/common/utilities.ts?e352","webpack:///./src/modules/mands-order-details/common/get-groups.tsx?a5ce","webpack:///./src/modules/mands-order-details/common/get-order-information.tsx?0b55","webpack:///./src/modules/mands-order-details/common/address.tsx?efed","webpack:///./src/modules/mands-order-details/common/label.tsx?b275","webpack:///./src/modules/mands-order-details/common/get-sales-line.tsx?fa26","webpack:///./src/modules/mands-order-details/common/get-sales-lines.tsx?0cd9","webpack:///./src/modules/mands-order-details/components/get-help.tsx?c3f0","webpack:///./src/modules/mands-order-details/components/get-order-summary.tsx?a3d2","webpack:///./src/modules/mands-order-details/components/get-payment-methods.tsx?b330","webpack:///./src/modules/mands-order-details/mands-order-details.tsx?1e12","webpack:///src/common/waiting.tsx?8365","webpack:///src/modules/checkout/components/get-order-summary.tsx?6f62","webpack:///src/modules/checkout/methods/checkout.ts?3b66","webpack:///src/modules/quick-order-grid/quick-order-grid.view.tsx?2f4c","webpack:///src/common/add-payment-form.tsx?7e1f","webpack:///src/modules/gift-card-balance-check/gift-card-balance-check.view.tsx?ce1c","webpack:///src/modules/checkout-loyalty/components/checkout-loyalty-input.tsx?d04f","webpack:///src/modules/checkout-loyalty/components/checkout-loyalty-label.tsx?3110","webpack:///src/modules/checkout-loyalty/components/checkout-loyalty-text.tsx?0080","webpack:///src/modules/checkout-loyalty/checkout-loyalty.tsx?c94a","webpack:///./src/modules/mands-checkout/mands-checkout.view.tsx?36a5","webpack:///../../src/checkout-utilities.data.ts?b2cc","webpack:///src/modules/order-template/components/bulk-actions.tsx?f343","webpack:///src/modules/checkout-delivery-options/checkout-delivery-options.view.tsx?d64d","webpack:///src/modules/checkout/components/guided-card.tsx?5a55","webpack:///./src/modules/mands-checkout/common/iframe.tsx?cf60","webpack:///src/modules/order-template-list/order-template-list.view.tsx?20f7","webpack:///src/modules/checkout/components/guided-form.tsx?7fad","webpack:///src/invoice-summary-lineitem.tsx?1b66","webpack:///../../src/checkout-state-data-action.ts?8344","webpack:///./src/modules/mands-checkout/common/empty-active-cart.tsx?8c1f","webpack:///src/common/empty-active-cart.tsx?80fa","webpack:///src/modules/checkout/methods/place-order.ts?6d11"],"names":["CheckoutDeliveryOptionsDescription","_ref","description","React","className","CheckoutDeliveryOptionsErrorMessage","message","CheckoutDeliveryOptionsErrorTitle","title","CheckoutDeliveryOptionsRadioButton","isChecked","value","ariaSetSize","ariaPosInSet","ariaLabel","telemetryContent","onChange","payLoad","getPayloadObject","TelemetryConstant","DeliveryOptions","attributes","getTelemetryAttributes","Object","assign","checked","type","contentAction","etext","name","CheckoutDeliveryOptions","constructor","props","super","selectedItemId","deliveryOptions","isLoading","retailMultiplePickUpOptionEnabled","checkoutErrorRef","init","async","this","moduleState","onEdit","isSelectDefaultOptionEnabled","undefined","onCancel","onSubmit","status","config","useDefaultDeliveryOption","canShip","cartDeliveryMode","getSavedDeliveryOption","loadDeliveryOptions","_this$props$data$chec","data","checkout","result","checkoutCart","hasInvoiceLine","getCartLinesForShipping","length","isDeliveryModeExists","deliveryMode","find","deliveryOption","Code","getDeliveryOptionSelected","selectedItem","context","telemetry","error","id","typeName","priceFree","resources","price","get","channelConfig","request","channel","DeliveryOption","DescriptionComponent","Description","PriceComponent","CustomerContextualPrice","freePriceText","currencyCode","Currency","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","tag","role","ErrorTitleComponent","ErrorMessageComponent","errorMessage","getDeliveryOptionList","count","map","index","code","radioButton","RadioButtonComponent","onDeliveryOptionChange","getSaveButton","saveBtnLabel","Button","color","disabled","onClick","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","setHasError","onUpdating","clearError","_this$props$data$chec2","information","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","_this$props$data$chec3","updateCartDeliverySpecification","savedDeliveryOption","_this$props$data$chec4","onReady","cartLinesForShipping","DeliveryMode","deliveryModeId","trim","checkoutState","updateCartDeliverySpecificationInput","shippingAddress","channelDeliveryOptionConfig","onPending","then","response","_response$errorDetail","errorDetails","LocalizedMessage","StringExtensions","isNullOrEmpty","genericErrorMessage","setIsCancellable","catch","pickupDeliveryModeCode","PickupDeliveryModeCode","emailDeliveryModeCode","EmailDeliveryModeCode","cart","CartLines","filter","cartLine","_this$channelDelivery","PickupDeliveryModeCodes","getDeliveryOptions","_this$props$data$chec5","cartState","cartId","Id","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","deliveryOptionFilter","filterDeliveryModeOption","FilterDeliveryModeOption","None","FilterOutNonCarrierDeliveryMode","getDeliveryOptionsAsync","callerContext","actionContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","_unused","deliveryOptionsNotFound","_this$props$data$chec6","_this$props$data$chec7","updateHasCartDeliveryMode","newHasCartDeliveryMode","isPaymentVerificationRedirection","_this$props$data$chec8","getStoredDeliveryOptions","_this$props$data$chec9","_this$props$data$chec10","_this$props$data$chec11","_this$props$data$chec12","_this$props$data$chec13","_this$props$data$chec14","isExpressCheckoutApplied","isExpressPaymentAppliedInCartPage","event","currentTarget","getTelemetryObject","telemetryPageName","friendlyName","_this$props$data$cart","_this$props$data$cart2","properties","ExtensionProperties","property","Key","Value","StringValue","JSON","parse","_this$expressPaymentD","_this$expressPaymentD2","expressPaymentDetailsFromCartPage","isExpressCheckoutAppliedInCartPage","_this$props$data$chec19","when","isDataReady","reaction","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","_this$props$data$chec18","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec20","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec21","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","shouldComponentUpdate","nextProps","nextState","state","render","_this$props$data$chan","_this$props$data$feat","featureState","feature","Name","IsEnabled","isReady","isUpdating","hasError","isError","isShowList","isShowSelected","deliveryOptionAriaLabel","viewProps","_objectSpread","deliveryOptionsData","alert","ErrorComponent","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","moduleProps","classname","DeliveryOptionsList","list","deliveryOptionSelected","waiting","Waiting","saveButton","editButton","cancelButton","renderView","__decorate","observable","computed","action","withModuleState","observer","getLineItems","input","_featureState$result","_getDeliveryLocation","orgUnitLocations","FulfillmentStoreId","locationMatch","location","OrgUnitNumber","OrgUnitName","_getLineItemComponent","_input$data$catalogs","product","ProductId","productId","_product","RecordId","imageSettings","showShippingChargesForLineItems","quantityDisplayString","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","productDimensionTypeAmount","configString","inputQuantityAriaLabel","discountStringText","shippingCharges","gridSettings","catalogs","productUrl","getProductUrlSync","MsDyn365","isBrowser","isChannelTypeB2B","requestContext","_cartLine$CatalogId","fullUrl","URL","window","href","searchParams","set","CatalogId","CartLineItemComponent","sizeString","colorString","styleString","amountString","originalPriceText","currentPriceText","shippingChargesText","salesAgreementPricePrompt","isQuantityEditable","primaryImageUrl","PrimaryImageUrl","priceCurrency","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","PickUpAtStore","label","_getEmailDeliveryComponents","emailDeliveryText","EmailDelivery","_getLineItemsComponents","items","isPickUp","_getCartPickDeliveryMode","isEmailDelivery","LineId","LineItem","item","pickUpAtStore","emailDelivery","cartLineItem","_channelDeliveryOptio","isNullOrWhitespace","_countItems","reduce","Quantity","_filterItemsByDiliveryType","_channelDeliveryOptio2","_getLineItemsByDeliveryType","_getGroupTitleComponent","_input$data$deliveryO","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","productDeliveryOptions","_productDeliveryOptio","suffix","replace","toString","LineItemDeliveryGroup","classnames","LineItemList","heading","lineItems","handleLineItemHeadingChange","lineItemsHeading","text","target","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","cartLinesGrp","entries","forEach","groupByDeliveryType","push","keys","key","cartLines","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","groupTitle","iconClass","lineItemWraperIcon","lineItemWraper","_getLineItems","products","editCartText","EditCart","attribute","groupClass","LineItems","Header","Msdyn365","editProps","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","PromoCode","_onInputChange","e","setState","promoCodeInputValue","canApply","_applyPromotion","appliedPromo","addPromoCode","promoCode","substatus","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","_renderForm","promoPlaceholderText","promoCodeApplyButtonText","preventDefault","placeholder","_removePromotion","getAttribute","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_calculateDiscount","discountAmount","line","DiscountLines","discountLine","DiscountCode","DiscountCost","_renderAppliedPromoCode","Coupons","coupon","removePromoAriaLabelFormat","format","removePromoText","isCollapseOpen","QuickOrderGrid","_waitTime","_dimensionUpdateQueueMaxLength","_errorCssClass","_errorCssGlyphClass","_dimensionUpdateQueue","FinitePromiseQueue","_dimensions","_cssClassNameConfigure","_className","_quickOrderGridCallbacks","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","Error","getDropdownName","dimensionType","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","_quickOrderGridRowCallbacks","onRemoveItem","_removeItemRowFromTable","productLine","onChangeQuantity","productListLineId","quantity","_changeRowQuantity","_removeProductList","quickOrderTemplate","user","isAuthenticated","token","ProductListsDataActions","deleteAsync","productList","reload","warning","_updateStatusState","quickOrderGridDeleteProductListFailedText","_handleInputChange","query","productDimensions","productResponse","_cancellabelDebounce","cancel","isQuickOrderGridFormExpanded","_debounce","getScanResult","GetScanResultInput","apiSettings","channelId","results","Product","ProductDimensionFull","exception","debug","setTimeout","_handleQuantityChange","currentValue","Number","parseInt","inputElement","_quantityInput","current","HTMLInputElement","isNaN","setAttribute","_this$state$productRe","isGiftCard","IsGiftCard","ProductDimensionType","Color","Configuration","productDimensionTypeConfiguration","Size","Style","hasProductDimensions","ArrayExtensions","hasElements","dimensionsToUpdate","console","log","productDimensionErrorState","otherError","clearOtherErrorState","dimensionKey","configureErrors","errorState","mappedDimensions","dimension","_this$_updateDimensio","DimensionTypeValue","DimensionValue","_updateDimensionValue","selectedProduct","Promise","newProduct","getSelectedVariant","SelectedVariantInput","MasterProductId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","resolve","variantProduct","productDimensionFull","newValueId","DimensionValues","_getDimensionErrorString","dimensionTypeValue","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","_validateCart","_productResponse$Dime","missingDimensions","Dimensions","userMessage","_getConfigureErrors","quickOrderGridWrongQuantityErrorMsg","itemKey","quickOrderTemplateLinesData","quickOrderTemplateLines","orderLineIndex","findIndex","lines","productListLine","newProductListLine","previousQuantity","fullProduct","_objectWithoutProperties","_excluded","updateProductListLinesAsync","newLine","updatedLines","updatedProductList","ProductListLines","update","ActiveProductListInput","removeProductListLinesAsync","ProductListId","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","productListId","_productResponse$Defa","_createProductList","AddItemToProductListInput","DefaultUnitOfMeasure","addItemToProductListAction","CreateProductListInput","ProductListType","QuickOrder","createProductList","messageText","statusCssString","messageGlyph","isOpen","stateMessage","_productTextInput","_telemetryContent","isMobile","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","variant","VariantType","Viewport","customerInformation","maxQuantity","customerInfo","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","productConfigureResources","selectDimensionFormatString","headerClassName","header","Heading","quickOrderGridProps","contentProps","isB2bCustomer","IsB2b","actions","drawer","QuickOrderGridDrawer","collapseProps","moduleHeadingText","moduleDescriptionText","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","quickOrderGridDeleteButtonText","quickOrderGridBuySelectedButtonText","quickOrderGridBuySelectedButtonAriaLabel","quickOrderGridBuySelectedAddingToCartErrorNotificationTitle","quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel","quickOrderGridGoToCartText","quickOrderGridDialogCloseText","quickOrderGridSingleItemText","quickOrderGridMultiLineItemFormatText","quickOrderGridMultiLinesFormatText","quickOrderGridHeaderMessageText","addedQuantityText","quickOrderGridActions","handlers","removeProductList","QuickOrderGridActionsView","app","isBulkPurchaseEnabled","slots","bulkPurchaseSlots","containerClass","_renderQuickOrderTable","_initQuickOrderGridProducts","quickOrderGridProduct","QuickOrderGridProduct","validValues","tableClassName","QuickOrderGridTableComponent","moduleId","moduleTypeName","quickOrderGridProducts","callBacks","dimensions","_onInputChangeHandler","_onSubmitHandler","_applyPromotionHandler","removePromotionHandler","promoCodTotalDiscount","appliedPromoCodeHeadingText","ApplyPromoCode","promoCodeHeadingText","CatalogLabelComponent","catalogId","validateCatalogId","isB2b","catalog","CartLineItemFunctions","renderProductDimensions","DimensionStrings","productDimension","OfferId","OfferName","isSalesLine","PeriodicDiscount","EffectiveAmount","BasePrice","EffectivePercentage","inventoryInformationLabel","inventoryCssName","inventoryLabelClassName","IsInvoiceLine","unitOfMeasureDisplayType","_props$context$reques","cartline","hasShippingMethod","some","shippingChargeLines","ChargeLines","chargeLine","IsShipping","freightFee","chargeTotal","CalculatedAmount","priceComponent","_cartline$ChargeLines","otherCharges","chargeline","otherCharge","SalesAgreementLineRecordId","CartLine","_props$context$reques2","_props$primaryImageUr","destructDimensionStrings","fallbackImageUrl","getFallbackImageUrl","ItemId","OmniChannelMedia","cropFocalRegion","renderDisountLines","renderInventoryLabel","renderUnitOfMeasure","renderShippingLabel","renderOtherCharges","renderSalesAgreementPrompt","productAttribute","productName","imgeClassName","newValue","quantityOnChange","lineIndex","Image","src","fallBackSrc","altText","loadFailureBehavior","NetAmountWithAllInclusiveTax","GrossAmount","ExtendedPrice","NetPrice","salesAgreementLineId","_generateQuantityandPrice","nodes","isOutOfStock","IncrementalQuantity","max","currentCount","currentQuantity","decrementButtonAriaLabel","incrementButtonAriaLabel","isCartStateReady","classNames","DiscountAmount","priceEditorResources","CartLinePriceEditor","SocialShareItem","_getSocialShareItem","bind","viewprops","SocialShareItemElement","icon","socialMedia","SocialMediaComponent","SocialMedia","Facebook","postUrl","document","Twitter","Pinterest","Linkedin","Mail","PlaceOrder","ctx","orderedProducts","redirect","updatedCartVersion","reject","salesOrder","CartCheckout","EmptyActiveCart","orderConfirmationUrl","getUrlSync","separator","includes","url","updateSalesOrder","newSalesOrder","newOrderedProducts","OrderTemplateActions","onRemoveOrderTemplate","removeOrderTemplateActionHandler","OrderTemplateRender","orderTemplate","removeFromOrderTemplateListText","orderTemplateState","enableImageProductLink","onDismiss","orderTemplateImage","_renderOrderTemplateImages","orderTemplateLines","orderTemplateAriaLabel","_renderAriaLabel","orderTemplateName","_getOrderTemplatePageUrl","_getUrlSync","totalLines","addToCartButton","AddOrderTemplateToCartComponent","addToCartText","addToBagText","dialogStrings","removeButton","orderTemplateStatusMessage","Alert","toggle","onClickHandler","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","slice","_line$fullProduct$Pro","_line$fullProduct","_line$fullProduct$Pro2","_line$fullProduct2","_line$fullProduct3","_line$fullProduct$Pro3","_line$fullProduct4","_getFallbackImageUrl","_line$fullProduct5","_context$request$app","ProductDetails","alt","OrderTemplateListStatusMessage","errorType","getAdditionalContentItems","_item$links","renderHeading","additionalContentHeading","handleAdditionalTextChange","subtext","renderParagraph","additionalContentParagraphText","handleAdditionalParagraphChange","links","ctaLink","renderLinks","linkIndex","editableLink","linkText","linkUrl","destinationUrl","openInNewTab","link","onTextChange","handleAdditionalLinkTextChange","additionalContentItemContainer","additionalContentItemLinks","videoPlayerAdditionalContent","additionalContent","additionalContentNode","additionalContentItems","VideoPlayer","handleTextChange","handleParagraphChange","paragraph","isMobileDevice","options","video","playerResources","playAriaLabel","playLabel","pauseAriaLabel","pauseLabel","playingAriaLabel","playingLabel","pausedAriaLabel","pausedLabel","muteAriaLabel","muteLabel","unMuteAriaLabel","unMuteLabel","fullScreenAriaLabel","fullScreenLabel","exitFullScreenAriaLabel","exitFullScreenLabel","seekBarLabel","videoTimeDurationLabel","closedCaptionLabel","videoMetaData","_video$_links","videoId","duration","playTime","thumbnail","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","player","Player","playerData","isEditor","params","_getVideoDetailsHeading","_getVideoDetailsParagraph","_getVideoDetailsLinks","detailsContainer","detailsContainerCTA","handleText","handleParagraph","handleAdditionalText","handleAdditionalParagraph","handleLink","handleLinkTextChange","handleAdditionalLink","_this$props$config$ad","linkData","linkId","additionalProperties","_heading$tag","BulkPurchaseViewComponent","Module","content","GetCheckoutReturnUrl","returnUrl","isAbsoluteUrl","RegExp","test","origin","OrderTemplateLines","_isChannelMultipleCatalogsFeatureEnabled","isMultipleCatalogFeatureEnabledInHq","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","productSelection","productListLines","maxWaitTimeInMilliSeconds","_this$props$data$orde","substr","indexOf","_onAddSelectionToBag","selectedLines","_productLine$fullProd","_productLine$fullProd2","_productLine$fullProd3","_productLine$fullProd4","_productLine$productL","ProductTypeValue","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","_updateProductUrlCatalog","productDetails","urlObject","baseUrl","_onDismiss","_changeQuantity","orderTemplateLinesData","prevQuantity","featureStates","getFeatureState","createGetFeatureStateInput","_featureStates$find","getCatalogId","isQuantityDisabledForUpdate","updatedOrderTemplate","ActiveOrderTemplateLinesInput","editOrderTemplateLineQuantityError","maxQuantityLimitText","addedToCartFailureMessage","addProductToCartInput","addProductToCart","getPriceForSelectedVariant","PriceForSelectedVariantInput","priceResult","AsyncResult","isMiniCart","addToCartBehavior","productPrice","maxQuantityForCartLineItem","_cart$result","_cart$result2","cartLineQuantity","defaultMessage","_removeItemFromOrderTemplateLines","userToken","_featureStates$find2","_renameTemplate","_removeTemplate","_orderTemplate$result","deleteOrderTemplateFailedText","newLink","_getViewport","device","Type","innerWidth","sm","md","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","signInUrl","addEventListener","componentWillUnmount","removeEventListener","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","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","skip","selectOneRowText","moreButtonText","viewProductDetailsText","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","deleteButtonText","unavailableProductErrorMessage","outOfStockProductErrorMessage","currentProductProps","orderTemplateLine","ProductPrice","shouldDisable","onAddToBag","removeFromOrderTemplateLinesText","addToBagButtonText","OrderTemplateLineView","RatingsHistogram","handleHeadingChange","selectFilterBy","ratingsSummary","ratingCount","totalRatingsCount","completeClass","histogramItems","HistogramItems","locale","averageRating","RatingComponent","avgRating","averageRatingAriaLabel","readOnly","hideCount","averageNumber","AverageRatingNumber","summary","totalReviews","TotalReviews","ratingsSummaryProps","histogramProps","stars","filterKey","createRatingsReviewsStateInput","OrderDetailsOrderInfomation","orderInformationProps","salesId","createdDate","amount","channelReferenceId","Node","OrderDetailsSalesLine","_ref2","salesLineProps","salesLine","buyAgainButton","OrderDetailsGroupDelivery","_ref3","deliveryProps","address","trackingInfo","OrderDetailsGroup","_ref4","groupProps","delivery","salesLinesProps","salesLines","salesStatus","OrderDetailsGroups","_ref5","groupsProps","groups","group","OrderDetailsOrderSummary","_ref6","orderSummaryProps","subtotal","shipping","tax","totalAmount","earnedPoints","OrderDetailsPayment","_ref7","paymentMethodsProps","methods","OrderDetailsHelp","_ref8","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","OrderDetailsView","_ref9","loading","orderInfomation","orderSummary","payment","help","placedBy","CartView","getSitePath","sitePath","_renderCartlines","cartEmptyText","CartlinesWrapper","storeSelector","backToShoppingButton","waitingComponent","cartLoadingStatus","cartDataResult","homeUrl","cartProduct","_cart","pickUpInStore","ContainerProps","defaultComponent","isCartEmpty","removeClickHandler","_removeItemFromCartHandler","removeCartButtonText","addToWishlist","backToShoppingButtonTitle","goBack","history","back","cartlineToRemove","cartLineIds","removeCartLines","handleClickDelivery","isOpenDelivery","handleClick","getCheckoutURL","guestCheckoutUrl","returnURL","checkoutAsSignedInUserBtn","checkoutURL","checkoutButtonTitle","checkoutAsGuestBtn","guestCheckoutButtonTitle","cartlines","orderSummaryHeading","standardDeliveryPrice","expressDeliveryPrice","showfreeShippingPrompt","homeDeliveryText","standardDeliveryText","expressDeliveryText","preFreeShippingDiscountText","postFreeShippingDiscountText","qualifyForFreeDeliveryAmount","cartAmount","AmountDue","freeDeliveryAmount","cartAmountDue","cultureFormatter","formatCurrency","renderModuleAttributes","emptyCartText","style","listStyleType","OrderSummaryWrapper","Collapse","timeout","isCartLine","Label","GetSalesOrderHistoryWithHydrationsInput","paging","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getSalesOrderHistoryWithHydrationsAction","salesOrders","accountNumber","customerAccountNumber","getOrderShipmentsHistoryAsync","Paging","Top","top","Skip","NextPageToken","nextPageToken","getOrderShipmentHistory","prodIdsByChannel","SalesLines","childrenEntry","prodId","ChannelId","getProductsPromise","cId","prodIds","productIds","arguments","productInputs","ProductInput","getSimpleProducts","getProducts","all","memo","createObservableDataAction","getTenderIdOperationIdMap","tenderTypes","tenderType","TenderTypeId","OperationId","countItems","getSalesLinesByDelivery","getSalesStatusCode","deliveryType","statusValue","groupSalesLines","flatGroup","getGroupBySalesStatusCode","groupBySalesStatusCode","ShippingAddress","getGroupByAddressId","addressId","groupByAddressId","TrackingId","getGroupByTrackingId","trackingId","groupByTrackingId","getGroups","moduleName","customerName","isOboRequest","orderItemLabel","orderItemsLabel","shippingItemToOBOCustomerLabel","_salesLines","isProcessing","processing","getPlacedBy","originator","isYou","orderPlacedByFullText","orderPlacedByYouText","orderOnBehalfOfText","placedByNode","placedByName","StaffId","StaffName","CustomerId","CustomerName","onBehalfOfText","getOrderInformation","channelName","channelAddress","showChannelInfo","receiptEmail","priceContext","receiptEmailMessage","processingLabel","orderIdLabel","confirmationIdLabel","posChannelNameText","onlineStoreChannelNameText","isOnlineStoreChannel","channelTypeValue","getOrderChannelTypeValue","order","channelIdentities","orderChannel","ChannelType","getOrderChannelAddress","_orderOrgUnitLocation","orderOrgUnitLocation","Address","getOrderInfomationInput","customer","AccountNumber","isYouObo","CreatedDateTime","Date","toLocaleDateString","SalesId","CurrencyCode","isB2bAdmin","IsB2bAdmin","ReceiptEmail","ChannelReferenceId","TotalAmount","isOnlineStore","resource","shipToLabel","storeLabel","phoneLabel","phoneAriaLabel","FullAddress","deliveryTypeEnum","getDeliveryTypeClassName","deliveryTypeStringMap","retailMultiplePickupOption","ship","carryOut","email","pickUp","getSalesLine","moduleComponentProps","shipment","isCurrentChannel","imageOnly","salesLineQuantityText","buyItAgainLabel","buyItAgainAriaLabel","orderStatusReadyForPickup","orderStatusProcessing","orderStatusShipped","orderStatusPickedUp","orderStatusCanceled","pickedUpSalesLines","deliveredSalesLines","carryOutSalesLines","trackingLabel","trackingAriaLabel","trackingComingSoonLabel","salesStatusStringMap","canceled","readyForPickup","pickedUp","shipped","unknown","SalesStatusValue","salesStatusString","deliveryTypeString","deliveryTypeClass","deliveryTypeComp","LabelComponent","salesStatusComp","TrackingUrl","TrackingNumber","getSalesLines","shipments","_shipment","ShipmentId","getSalesLinesInput","Shipments","getSalesOrder","detailsAriaLabel","detailsLabel","salesOrderProps","TransactionId","orderInfomationInput","salesLinesInput","orderDetailsLink","_getorderDetailsPageUrl","GetOrderOriginatorsInput","transactionIds","salesIds","searchCriteria","TransactionIds","SalesIds","getOriginatorsAction","SalesOrdersDataActions","getOrderOriginatorsAsync","inputData","_inputData$requestCon","transactionId","OrderHistory","onMoreButtonClick","getOrderHistory","orderHistory","isShowMoreButton","pageSize","getOriginator","_error$error","_error$error2","errorCode","_order$SalesId","_order$TransactionId","originatorsInput","originatorList","componentDidMount","ex","shouldShowCount","noOrderHistoryLable","backToShopping","orderCountLabel","ordersCountLabel","loadingLabel","backToShoppingUrl","channels","orderHistoryProps","headerProps","backToShoppingLink","emptyMessage","_orderCountLabel","listProps","o","moreButton","OrderSummaryLine","toBeCalculatedText","freeText","cssLabel","_buildOrderSummarySection","channelConfiguration","_computedLoyaltyAmount","loyaltyAmount","getDeliveryMode","featureSate","pickupDeliveryMode","dM","OrderSummary","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","OtherChargeAmount","hasDeliveryMethod","getDeliveryConfiguration","isTaxIncludedInPrice","isShowTaxBreakup","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","reactNodes","subTotalLabel","taxLabel","orderTotal","orderTotalLabel","otherChargeLabel","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","shippingLabel","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","giftCardCounter","giftCard","Balance","Math","min","customerAccountAmount","totalAmountAfterGiftCard","loyalty","loyaltyLabel","giftcardLabel","customerAccount","customerAccountLabel","totalDiscounts","totalDiscountsLabel","_props$collapseProps$","_props$collapseProps","_isManuallyToggled","onToggle","previousState","_drawerGlyphClass","toggleGlyphClassName","closeGlyph","isAnimateGlyph","_drawerOpenGlyph","openGlyph","_drawerCloseGlyph","children","drawerClass","drawerButtonClassName","toggleButtonProps","block","isDisabled","_generateDrawerButtonInnerMarkup","isCollapseState","drawerButtonTextClass","toggleButtonClassName","headingDrawerClass","descriptionDrawerClass","_generateGlyphMarkup","glyphClass","onInputChange","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","ref","quantityNode","pattern","maxLength","addToListBtn","DeliveryOptionList","DeliveryOptionSelected","ErrorMessage","CheckoutDeliveryOptionsView","retrieveItems","CarouselView","carouselContainer","Carousel","closeAnimation","activeIndex","next","previous","pause","pauseOnHover","ride","autoplay","interval","transitionType","hideFlipper","dismissEnabled","onIndicatorsClickHandler","handleDismissCarousel","dismissCarouselAriaText","ariaLabelForDismissButton","indicatorAriaText","ariaLabelForSlide","directionTextPrev","directionTextNext","handleOnExited","handleOnExiting","keyboard","activeImageView","activePointContainer","activePointDetailsContainer","imageMapper","additionalContentContainer","detailsContainerCta","productCardtopPosition","left","productCardleftPosition","overlay","productCard","AsyncResultStatusCode","CheckoutErrors","setCheckoutErrors","apiError","clientCheckoutError","consoleCheckoutErrors","getCheckoutState","checkoutErrorsList","Console","consoleCheckoutError","errorMessageResource","getCheckoutErrorMessage","CheckoutPaymentInstrument","Checkout","updateCheckoutError","newCheckoutError","updateShouldFocusOnCheckoutError","newShouldFocusOnCheckoutError","genericError","scrollIntoView","updateCheckoutErrorFocus","newCheckoutErrorFocus","setCheckoutErrorFocus","checkoutModuleId","checkoutModule","errorMessageFromAPI","errorResource","ActionError","ErrorCode","ErrorMessageResource","checkoutTimeoutErrorMessage","Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard","blockedLoyaltyCardErrorMessage","CheckoutLoyalty","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue","customerAccountLimitSignDifferentFromAmountDueErrorMessage","CheckoutCustomerAccountPayment","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit","customerAccountPaymentExceedsAvailableCreditLimitErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit","customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems","customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount","customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices","customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage","Microsoft_Dynamics_Commerce_Runtime_FraudRisk","fraudRiskErrorMessage","Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed","giftCardBalanceInquiryFailedErrorMessage","CheckoutGiftCard","Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch","giftCardCurrencyMismatchErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion","invalidCartVersionErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber","invalidLoyaltyCardNumberErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest","invalidPaymentRequestErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console","invalidPaymentRequestConsoleErrorMessage","Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines","missingRequiredCartTenderLinesErrorMessage","Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed","multipleCustomerAccountPaymentsNotAllowedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender","noMoreThanOneLoyaltyTenderErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry","noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard","noTenderLoyaltyCardErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints","notEnoughRewardPointsErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided","paymentAlreadyVoidedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance","paymentAmountExceedsGiftBalanceErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties","paymentRequiresMerchantPropertiesErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console","paymentRequiresMerchantPropertiesConsoleErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount","paymentUsingUnauthorizedAccountErrorMessage","Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed","refundAmountMoreThanAllowedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment","unableToAuthorizePaymentErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired","unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported","unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment","unableToCancelPaymentErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo","unableToReadCardTokenInfoErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult","unableToRetrieveCardPaymentAcceptResultErrorMessage","WrappedComponent","_super","ModuleState","_this","call","initializeState","_b","states","getModuleStates","updateModuleStates","__assign","_a","hasInitialized","isRequired","isCancellable","isSubmitContainer","childIds","getModuleStateManager","validate","isPending","isSkipped","isCancelAllowed","shouldSubmitContainer","hasModuleState","setIsRequired","setIsSubmitContainer","onSkip","onDisable","getModule","getModuleByTypeName","getModuleStateManagerByTypeName","moduleStates","values","_moduleState","modules","_validateLeaf","source","module","isMatch","_validateContainer","allMatched","skipSkippableItem","shouldEnableSinglePaymentAuthorizationCheckout","childId","_isPaymentSectionContainer","enableControl","__extends","prototype","onApplyHandler","onApplyGiftCard","onChangeNumberHandler","onEnterGiftCardNumber","onChangePinHandler","onEnterGiftCardPin","onChangeExpHandler","onEnterGiftCardExp","getForm","inputRef","inputPinRef","inputExpRef","giftCardNumber","giftCardPin","giftCardExp","supportExternalGiftCard","additionalFields","disableAddGiftCard","applyGiftCardButton","giftCardFormLabel","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","formProps","inputPinLabel","inputExpLabel","alertFieldLabel","assertive","fade","includeAlertClass","inputNumber","inputPin","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","inputProps","inputNumProps","inputPinProps","inputExpProps","onRemoveHandler","onRemoveGiftCard","_giftCard$Id","getItem","getFormattedPrice","canRemove","enteredGiftCardLabel","giftCardAvailableBalanceLabel","removeGiftCardButton","balance","CardCurrencyCode","giftCardLast4Digit","selectedGiftCard","itemProps","getList","giftCards","GiftCardTitle","SupportedGiftCardType","isFetchingGiftCard","isEnabled","couldPaidByGiftCard","giftCardSupported","External","shouldBeEnabledForGuest","handleCancelOrSubmit","hasSelectedItem","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","removeGiftCard","applyGiftCard","giftCardTypes","getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","tenderTypeId","PaymentMethodId","getGiftCard","addGiftCard","Pin","ExpirationDate","focus","findGiftcardTenderTypes","operationId","giftcardType","matchedTenderTypes","Internal","ConnectorId","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","supportedGiftCardType","getTenderTypesAsync","internalGiftcardTenderTypes","OPERATIONS","PayGiftCertificate","externalGiftcardTenderTypes","Both","month","split","year","getGiftCardAsync","activeGiftCard","emptyInputError","duplicatedCodeError","invalidCodeError","card","resolveCardTypesAsync","CardType","GiftCard","getLoyaltyAmount","getGiftCardTotalAmount","getCustomerAccountAmount","showAdditionalFields","shouldPayGiftCard","isOBORequest","EnabledPaymentsForOBO","checkoutGiftCardProps","showGiftCard","TitleCompoent","CheckoutState","_giftCards","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_isTermsAndConditionAccepted","_customerAccountAmount","defineProperty","_tokenizedPaymentCard","_tenderLine","_billingAddress","_shippingAddress","_cardPrefix","_loyaltyCardNumber","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","updateShippingAddress","newShippingAddress","updateBillingAddress","newBillingAddress","updateCardPrefix","newCardPrefix","removeGiftCardExtend","__spreadArrays","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","newAmount","updateGuestCheckoutEmail","newGuestCheckoutEmail","updateTermsAndConditionsAcceptance","newIsTermsAndConditionAccepted","updateCustomerAccountAmount","PromoBannerView","promoBannerProps","closeButton","bannerMessages","promoBannerTextProps","promoBannerLinksProps","carouselProps","promoBannerText","handleLinks","slides","VideoPlayerView","getQuickOrderGridAddToCartDialog","AddToCartProductListComponent","removeActionHandler","removeQuickOrderList","addProductListToBag","CheckoutView","toggleChange","renderCheckBox","termsConditionsUrl","acceptTermsAndConditionText","PickUpAtStoreComponent","LineItemComponent","LineItemGroupComponent","lineItem","LineItemsComponent","OrderSummaryComponent","_editLink","_heading","canShow","checkoutProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlSecondProps","guidedForm","placeOrderButton","TotalItems","totalItemsText","cartUrl","toolTipText","mobileView","CONTENT","AddLineToTemplate","Component","productCatalogs","Search","selectedCatalogId","searchTextInput","createRef","addLineButtonRef","_renderSearchForm","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","createElement","autoComplete","_onSearchSubmit","Fragment","htmlFor","_onCatalogSelectionChange","_getCatalogNodes","autoFocus","_get","Loading","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","_onSelectItem","varianteInput","productVariant","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","dangerouslySetInnerHTML","__html","_resultCountText","searchResultsCountVerbage","searchResultsCountSubject","_addItemToTemplateHandler","AddItemToOrderTemplateInput","addItemToOrderTemplate","reloadPage","_toggleModalHandler","_getCatalogs","onComponentDidMount","_this$searchTextInput","onComponentDidUpdate","_this$searchTextInput2","addLineModalLinkText","backToResultsText","modalProps","Modal","ModalHeader","showBackArrow","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","renderResultCountText","ModalBody","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","productCatalog","isSelected","selected","searchText","searchCriteriaInput","Context","IncludeAttributes","SearchCondition","searchByCriteriaAsync","Dropdown","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","selectedValue","innerText","dropdownList","dropdownName","OrderTemplateQuantity","_validateMin","minValue","currentInput","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","incDisabled","extraClass","getChangeHandler","_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","_this$props$context$r","_product$Name2","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","isMultipleCatalogSelect","_formatPrice","_getDimensionsNodes","ModalFooter","_getConfirmationMessage","selectedDimensionNames","_dimension$DimensionV","addToTemplateConfirmation","join","_this$state$errors2","unshift","toFixed","selectProductButtonText","_generateImageUrl","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","onOrderTemplateNameCancel","_buttonEventReference","onSuccess","requestStatementDropdownString","Random","Guid","generateGuid","innerRef","Popover","placement","OrderTemplateLineActions","getAddToBag","getRemoveItem","PopUp","showMobile","setShowMobile","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","UnitOfMeasure","fallbackImage","selectLine","productLineCatalog","renderProductCatalog","_renderProductImage","productInfo","renderProductInfo","_renderPrice","_renderProductError","productUnitOfMeasure","productQuantityView","_generateQuantity","addToBagButton","extraActionsPopup","ExtraActionsPopup","popUp","showActions","setShowActions","_context$request$app2","onChangeHandler","image","OOS","UNASSORTED","NONE","_orderTemplateLine$fu","_renderProductDimensions","dimensionsLine","componentClassName","getOnChange","checkedLines","scope","AddCheckoutLoyalty","cardNumber","rewardPoints","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","loyaltyAmountInput","loyaltyAmountApplyButton","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","rewardPoint","checkoutLoyaltyRewardPoint","availablePointsText","activePoints","expiringPointsText","expiringPoints","ShowCheckoutLoyalty","coveredAmountText","CheckoutLoyaltyView","checkoutLoyalty","showLoyalty","addLoyalty","isShowLoyalty","isShowAddLoyalty","EmailDeliveryComponent","LineItemGroupComponentWithMultiplePickUp","LineItemComponentWithMultiplePickUp","PickUpAtStoreComponentWithMultiplePickUp","PaymentSummaryComponent","_ref10","invoices","hasSalesOrder","sideControlFirstProps","termsAndConditionsProps","orderConfirmation","invoicePaymentSummary","termsAndConditions","keepShoppingButton","checkoutExpressPaymentContainer","getInvoicePaymentSummary","totalAmountLabel","invoiceLabel","invoiceSummaryTitle","InvoiceSummary","isValidationPassed","isPlaceOrderLoading","isPlaceOrderClicked","handleCheckoutHeadingChange","checkoutHeading","cartStatus","isEmptyCart","getSlotItems","triggerPaymentWithPlaceOrder","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","onPlaceOrder","checkoutOutOfStockErrorMessage","enableStockCheck","isOverMaxQuantity","_checkout$result","hasOrderConfirmation","updateCartLineEmailAddress","guestCheckoutEmail","placeOrder","handleCheckoutError","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","emailDeliveryCartLines","lineDeliverySpecifications","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ElectronicDelivery","ElectronicDeliveryEmailAddress","updateLineDeliverySpecificationsAsync","updatedCart","Version","_this$props$context$r2","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","_cartlineProduct$Beha","cartlineProduct","isStockedItem","Behavior","IsStockedProduct","foundProductAvailability","productInventory","_productInventory$Pro","ProductAvailableQuantity","cartLinesInventoryValidation","validateCartLinesInventory","isValid","getActiveChildModuleStates","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","validateForCheckout","_this$props$context","retry","isOrderQuantityLimitsFeatureEnabledInHq","isEcommerceQuantityLimitsFeatureEnabledInHq","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","isB2BSite","isOrderQuantityLimitsFeatureEnabledInSiteSettings","validateForCheckoutAsync","bypassCache","_result$ValidationFai","ValidationFailuresByCartLines","refreshCart","refreshError","_setErrorMessage","_saveShippingAndBillingAddress","tokenizedPaymentCard","Zip","_getAddressFromTokenizedPaymentCard","updateBillingAddressFromExpressCheckout","newBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","TwoLetterISORegionName","Country","NameOnCard","Street","Address1","StreetNumber","Address2","City","State","ZipCode","Phone","timeoutErrorMessage","checkoutResult","statusCode","_error$data","AdditionalContext","isEditorialMode","isEmpty","isTermsAndConditionAccepted","disableForOBO","isPaidOffByCustomerAccount","amountDue","_this$props$data$chec22","_this$props$data$chec23","asyncResultStatus","LOADING","_this$props$data$chec24","_this$props$data$chec27","tenderLine","paymentTenderType","paymentTenderTypeFromCartPage","isExpressAddressAppliedInCartPage","cardPaymentAcceptResult","_this$props$data$chec25","_this$props$data$chec26","updateExpressCheckoutDetails","newEmailAddressFromExpressCheckout","newPaymentTenderType","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newCardPaymentAcceptResult","updateExtensionProperties","newExtensionProperties","isCartReady","_this$props$data$chec28","isPaymentSectionContainerReady","_this$props$data$chec29","_this$props$data$chec30","_this$props$data$chec31","_this$props$data$chec32","redirectAdditionalContext","isPaymentVerificationRequired","_this$props$data$chec33","isPaymentSectionContainerHasError","_this$props$data$chec34","_this$props$data$chec35","isBillingAddressHasError","_this$props$data$chec36","_this$props$data$chec37","updateIsBillingAddressHasError","newIsBillingAddressHasError","canPlaceOrder","_this$props$data$chec38","_this$props$data$chec39","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","_this$props$data$chec40","_this$props$data$chec41","checkoutErrorLocation","checkoutPaymentErrorLocation","componentDidUpdate","_this$props$data$chec42","_this$props$data$chec43","shouldFocusOnCheckoutError","_this$props$data$chec44","_this$props$data$chec45","_this$props$data$chec46","_this$props$data$chec47","_this$props$data$chec48","_this$props$data$chec49","_this$props$data$chec50","_this$props$data$chec51","_this$props$data$chec52","_this$props$data$chec53","_this$props$data$chec54","_this$props$data$chec55","_this$props$data$chec56","_this$props$data$chec57","_document","_this$props$data$chec58","disableGuidedCheckoutFlow","placeOrderText","confirmPaymentText","cookieConsentRequiredMessage","checkoutClass","allCheckoutInformation","checkoutInformation","info","isConsentGiven","cookies","BackToShopping","backToShoppingAttributes","checkoutBtnText","hasShippingAddress","hasCartDeliveryMode","hasGuestCheckoutEmail","hasExpressPaymentContainer","getElementsByClassName","display","renderMsdyn365Text","AlertComponent","_this$props$data$chec59","_this$props$data$chec60","GuidedFormComponent","getOrderSummary","PlaceOrderButtonComponent","every","SUCCESS","FAILED","balanceCheckButton","GiftCardBalanceCheck","_isEnabled","_getFormattedPrice","_enterGiftCardNumber","_clearError","_enterGiftCardPin","_enterGiftCardExp","_setError","_applyGiftCard","_getGiftCardTypes","_getGiftCard","_findGiftcardTenderTypes","giftCardBalanceCheckProps","ModuleStatesCacheKey","cacheKey","HeadingTag","none","filterOutNonCarrierDeliveryMode","getCardTypeId","cardPrefix","Unknown","TypeId","findTenderIdTypeByOperationId","matchedTenderType","roundNumber","billingAddress","isExpressAddressApplied","cartTenderLines","getTenderLinePromises","loyaltyCardNumber","LoyaltyCardId","chargedAmount","loyaltyTenderLinePromise","Amount","getLoyaltyTenderLine","customerAccountTenderLinePromise","createCustomerAccountTenderLine","giftCardExtend","_giftCardExtend$Expir","_giftCardExtend$Expir2","giftCardExpirationYear","giftCardExpirationMonth","creditCardTenderLinePromise","GiftCardId","GiftCardPin","GiftCardExpirationYear","GiftCardExpirationMonth","getGiftCardTenderLine","currency","TokenizedPaymentCard","House","ThreeLetterISORegionName","cardTenderLine","CardPaymentAcceptResult","getCreditCardTenderLineForSinglePaymentAuth","cartTypeId","CardTypeId","TenderType","CardTokenInfo","getCreditCardTenderLine","cartVersion","checkoutAsync","_error$data2","_cardPaymentAcceptRes","_cardPaymentAcceptRes2","updateRedirectAdditionalContext","newRedirectAdditionalContext","updateRedirectPaymentConnectorId","newRedirectPaymentConnectorId","Settings","PaymentConnectorId","updateIsCheckoutCallFailed","newIsCheckoutCallFailed","updateCheckoutErrorPaymentConnectorId","newCheckoutErrorPaymentConnectorId","updateIsExpressCheckoutApplied","QuickOrderGridDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","rowClassName","headerCells","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_props$imageSettings","containerClassName","setShowPreviousActions","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","getProductPageUrlSync","onClickViewDetails","shouldShowActionsNewValue","actionsContainerClassName","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_product$Dimensions","_productListLine$Line","dimensionValue","quickOrderGridProductDimensionsSeparator","renderProductPrice","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","setIsMobile","updateViewport","quickOrderProduct","_quickOrderProduct$pr","_quickOrderProduct$pr2","getHostName","toLowerCase","Iframe","postMessage","parameters","_this$iframeRef$curre","iframeRef","contentWindow","targetOrigin","onEvent","sourceUrl","onIFrameMessage","requestUrlOrigin","messageOrigin","sourceHost","eventHost","requestHost","messageHost","updateContentDocument","displayContent","css","innerDocument","contentDocument","open","write","cssNote","createTextNode","appendChild","head","close","previousProps","iframeAriaLabel","height","sandbox","countryISOMapping","AF","AX","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BV","BR","VG","IO","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","HK","MO","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","AN","NC","NZ","NI","NE","NG","NU","NF","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SZ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VI","WF","EH","YE","ZM","ZW","XK","getThreeLetterCountryCode","countryCode","renderRating","ratingId","totalRatings","_totalRatings$toStrin","numberRatings","ratingAriaLabel","rating","roundedRating","getRatingAriaLabel","ActiveProductComponent","savingsText","imageUrl","imgData","imageProps","renderProductPlacementImage","basePrice","adjustedPrice","renderPrice","hideRating","AverageRating","TotalRatings","assembleNode","isOpenInNewTab","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","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","click","hoverOn","onMouseEnter","hoverOff","onMouseLeave","renderAreas","_this$props$imageMapp3","_this$props$imageMapp4","_area$productSearchRe","xsRadius","extendedArea","areaKey","altTextWithProductName","productSearchResult","shape","onFocus","initCanvas","_this$getActiveImageW","_this$getActiveImageH","_this$_canvas$current12","_backgroundImage","_container","onLoad","defaultHeight","canvasWidth","canvasHeight","shouldRender","_requestContext$gridS","imageData","useMap","ActiveImageConstants","ActiveImage","_defaultProductCardWidth","_defaultProdutCardHight","_activePoints","addActivePoints","areaId","updateClientWidth","viewport","Browser","renderImageMapper","_this$props$config$ac","productResults","configProduct","itemId","_configProduct$xPosit","_configProduct$yPosit","_configProduct$radius","xPosition","yPosition","activePoint","stringify","mappedArea","_activeImageClass","enterArea","leaveArea","activeImage","_activeImageRefs","altTextForSeeMoreButtonWithProductName","seeMoreButtonText","overlayClass","resetState","renderProductComponent","_this$state$area","_this$state$area$prim","_product$ItemId","baseImageUrl","productImageSettings","renderProductCard","_productCardDivRef","renderOverlay","getProductCardPositionX","_this$props$config$pr","_this$props$config$pr2","_defaultImageSettings","_area$center$","_area$center","getDefaultImageSettings","productImageSettingsWidth","productCardWidth","leftAllignPosition","position","getProductCardPositionY","_this$props$config$pr3","_this$props$config$pr4","_defaultImageSettings2","productImageSettingsHeight","produtCardHight","_area$center$2","_area$center2","keyDown","enterKey","nodeName","escKey","renderActiveImageDetailsLinks","willOpenInNewTab","renderActiveImageDetailsHeading","renderActiveImageDetailsParagraph","getActiveImageId","activeImageId","_activeImageIdPart$","activeImageSource","decrementOne","_handleOutsideClick","_this$_productCardDiv","contains","timeoutInterval","images","Array","from","removeAttribute","handleAdditionalLinkText","modalCloseButtonReference","CreateOrderTemplateButton","onCancelHandler","isCreateOrderTemplateDialogOpen","onCreateButtonClick","createOrderTemplateText","createOrderTemplateDialogResources","onOrderTemplateCreated","parentElementRef","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","PromoBannerCloseButton","closeButtonAriaLabel","PromoBannerClose","PromoBannerLinks","editableLinks","_mapEditableLinks","linkdata","onTelemetryClick","PromoBannerText","PromoBanner","animating","isVisible","_next","nextIndex","_isLastItem","_goToIndex","_previous","_isFirstItem","closeButtonLabel","bannerText","bannerAriaLabel","hideIndicator","withVisibilityObserver","VisibilityObserver","selfRef","initMutationObserver","targetNode","getElementsByTagName","MutationObserver","mutationObserver","handleVisibilityChange","observe","childList","subtree","stopMutationObserver","_this$state$observer","disconnect","offsetWidth","offsetHeight","visibilityObserver","CheckoutAlert","InventoryLocationId","DiscountAmountWithoutTax","freightFeeFromCart","ChargeAmount","freightFeeFromCartLines","showLineItems","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","hasControlGroup","saveAndContinueBtnLabel","canSubmit","canCancel","focusOnFirstFocusableElement","node","ReactDOM","findDOMNode","child","querySelector","focusOnEditButton","scrollToTitle","formCard","getTitle","step","headingTag","Tag","_getModules","_getId","prevProps","isActive","onNext","shouldFocus","childrenModules","childModule","childState","isExpanded","changeBtnLabel","canEdit","active","expanded","closed","visted","hidden","initialized","ready","pending","updating","CheckoutGuidedForm","currentStep","_enableAfterModule","Boolean","i","nextChildId","_sectionState$childId","sectionState","currentId","getEnabledModules","getStep","getId","getHeading","moduleChildId","previousModuleHasError","_this$props$requestCo","GuidedCard","CheckoutPlaceOrderButton","setIsBusy","SocialShareItemView","renderItem","star5Count","star4Count","star3Count","star2Count","star1Count","totalCount","percentage","formattedPercent","Intl","NumberFormat","barItemAriaLabel","starLabel","bar","Progress","buttonProps","PaymentConnectorPostMessageType","paymentConnectorMessage","messageType","paymentConnectorExtraContextMessage","ExtraContext","paymentConnectorSubmitMessage","Submit","paymentConnectorAmountMessage","_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","closeNotificationLabel","headerItemOneText","headerItemFormatText","headerLinesFormatText","headerMessageText","buyAgainNotificationTitle","buyAgainNotificationCloseAriaLabel","getDialogStrings","orderDetailProducts","quickOrder","orderDetails","quickLine","_quickLine$fullProduc","OrderDetailsProduct","getOrderDetails","AddToCartComponent","outOfStockText","addToCartArialLabel","navigationUrl","shouldSkipSiteSettings","orderDetailsProducts","From","SelectedGiftCard","GiftCardList","AddResource","ShowResource","CheckoutGiftCardView","_renderItem","quantityLabel","lineVisibility","pointerEvents","opacity","OrderTemplateLinesView","toggleDetails","wrapClassName","applicationNode","BulkPurchase","collapseRef","_dimensionDropDownChange","_this$collapseRef$cur","reEvaluateHeight","_toggleCollapse","_this$props$data$prod","hasDimensionsInProps","hasDimensionsInData","_renderCollapseContent","_renderCollapseButton","_renderCollapse","bulkPurchaseHeaderTitle","_renderMainContent","RichTextComponent","bulkPurchaseDescriptionText","_renderMatrix","_this$props$data$cust","isMultipleCatalogsFeatureEnabled","ProductDimensionsMatrix","dimensionOnChange","buttonsStates","onPlaceOrderHandler","buttonSetState","payload","TelemetryEvent","Purchase","OrderHistoryView","getOrderProducts","j","k","_salesLine$data$produ","_salesLine$data$produ2","pId","pName","pQuantity","OrderHistoryList","prodInformation","prod","y","productInformation","OrderHistorySalesOder","_index","renderHeadingRow","orderSummaryLabel","orderDescriptionLabel","orderStatusLabel","orderActionLabel","dateTime","substring","orderInfo","createdDateTime","orderID","OrderHistoryOrderInfomation","SalesStatus","confirmationIDLabel","currOrderProductsInfo","currentOrderProducts","word","toUpperCase","currentOrderInfo","OrderHistoryGroup","OrderHistoryGroups","OrderHistoryHeader","orderHeadingLabel","orderStatus","salesStatusCode","salesID","currentSalesOrder","currentSalesOrderIndex","_currentSalesOrder$Sa","_currentSalesOrder$Sa2","QuantityInvoiced","QuantityOrdered","CarouselModule","_handleDismissCarousel","dismissCarousel","closeNow","_onExiting","_onExited","newIndex","histogramItem","RatingsHistogramView","isSalesInvoice","shouldShowQrCode","orderStatusPartialShipped","partialShipped","rel","newSalesLine","getOrderDetailsHelp","helpLineContactAriaLabel","getOrderDetailsOrderSummary","orderSummaryItemsTotalLabel","orderSummaryShippingFeeLabel","orderSummaryTaxLabel","orderSummaryGrandTotalLabel","pointsEarnedLabel","zeroAmount","getLastFourDigit","digits","getOrderDetailsPaymentMethods","tenderLines","tenderIdOperationIdMap","paymentMethodsTitle","creditCardEndingLabel","giftCardEndingLabel","amountCoveredLabel","loyaltyCardUsedLabel","cashUsedLabel","MaskedCardNumber","getCard","getGiftCertificate","getLoyalty","getCash","OrderDetails","_isSelectionModeEnabled","loyaltyCard","RewardPoints","pointPrograms","point","RewardPointId","rewardLines","LoyaltyRewardPointLines","total","RewardPointAmountQuantity","TenderLines","_this$props$data$orgU","noSalesOrderText","originators","orderOriginators","orderInformationInput","orderInformation","footerProps","isUserTypeB2B","WaitingComponent","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","IsTaxIncludedInPrice","PayCard","PayLoyalty","PayCustomerAccount","renderConfigureDropdown","dropdown","containerProps","labelContainerProps","select","renderConfigure","dropdowns","quickOrderGridView","renderForm","quickOrderForm","quickOrderProductContent","quickOrderMessageContent","AddPaymentFormComponent","acceptPageUrl","acceptPageContent","iFrameHeightOverride","isFetchingPaymentConnector","paymentStyleOverride","cancelButtonText","submitButtonText","defaultPaymentConnectorStyle","Form","Item","GiftCardBalanceCheckView","AdressInput","ariaValueMax","ariaValueMin","ariaValueNow","CheckoutLoyaltyLabel","CheckoutLoyaltyText","_defaultLoyaltyPoints","CardNumber","updateLoyaltyCardId","shouldPayLoyalty","_dialogToggleRef","_applyLoyaltyPoints","_removeLoyaltyPoints","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","Loyalty","loyaltyHeadingText","TextComponent","loyaltyCoveredAmountText","Drawer","toggleButtonText","_drawerHeader","glyphPlacement","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","payWithLoyaltyAmountLabel","InputComponent","applyCheckoutLoyaltyPaymentText","removeCheckoutLoyaltyPaymentText","ActivePoints","PointsExpiringSoon","parseFloat","num","element","getElementById","loyalPointsRequest","createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput","_query","callActionOrExecute","_points$MaxCurrencyVa","GetLoyaltyTransactionEstimationInput","newMaxPoints","isAddDisabled","isRemoveDisabled","addHandler","removeHandler","_this$props$data$cata","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","CheckoutChange","changeBtnAttributes","OrderTemplateListView","_renderOrderTemplate","_state$childIds","shouldCollapseAfterRedirect","hasMissingInfo","hasOrderError","InvoiceSummaryLine","_buildPaymentSummarySection","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","CheckoutStateInput","lineItemIdsToRemove","getCartState","activeCart","activeCartLine","checkoutCartLine","removeAllPromoCodes","removeCheckoutCartId"],"mappings":"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JC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC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","file":"static/js/7.edeaf67ab173f8c46f28.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.description\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description }) => {\n if (!description) {\n return null;\n }\n\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

{message}

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

{title}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelDeliveryOptionConfiguration, FilterDeliveryModeOption } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Address, CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { QueryResultSettingsProxy, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { action, computed, observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ErrorComponent } from '../../common/error';\nimport { ICheckoutDeliveryOptionsData } from './checkout-delivery-options.data';\nimport {\n filterDeliveryModeOption,\n ICheckoutDeliveryOptionsProps,\n useDefaultDeliveryOption\n} from './checkout-delivery-options.props.autogenerated';\nimport DescriptionComponent from './components/checkout-delivery-options.description';\nimport ErrorMessageComponent from './components/checkout-delivery-options.error-message';\nimport ErrorTitleComponent from './components/checkout-delivery-options.error-title';\nimport RadioButtonComponent from './components/checkout-delivery-options.radio-button';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport interface ICheckoutDeliveryOptionsModuleProps\n extends ICheckoutDeliveryOptionsProps,\n IModuleStateProps {}\n\nexport interface ICheckoutDeliveryOption {\n DeliveryOption: INodeProps;\n description?: React.ReactNode;\n price?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\n code: string;\n radioButton?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsList {\n DeliveryOptionsList: INodeProps;\n list: ICheckoutDeliveryOptionEdit[];\n}\n\nexport interface ICheckoutDeliveryOptionsError {\n Error: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsViewState {\n isLoading: boolean;\n isError: boolean;\n isShowList: boolean;\n isShowSelected: boolean;\n isShowSaveButton: boolean;\n isShowEditButton: boolean;\n isShowCancelButton: boolean;\n}\n\nexport interface ICheckoutDeliveryOptionsViewProps extends ICheckoutDeliveryOptionsProps<{}> {\n CheckoutDeliveryOptions: IModuleProps;\n selectedItemId: string;\n deliveryOptionsData: DeliveryOption[];\n isLoading: boolean;\n errorMessageData: string;\n viewState: ICheckoutDeliveryOptionsViewState;\n deliveryOptions?: ICheckoutDeliveryOptionsList;\n deliveryOptionSelected?: ICheckoutDeliveryOption;\n errorMessage?: ICheckoutDeliveryOptionsError;\n waiting?: React.ReactNode;\n saveButton?: React.ReactNode;\n editButton?: React.ReactNode;\n cancelButton?: React.ReactNode;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n onDeliveryOptionChange(event: React.ChangeEvent): void;\n onSave(): void;\n onEdit(): void;\n onCancel(): void;\n}\n\n/**\n *\n * CheckoutDeliveryOptions component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutDeliveryOptions extends React.Component {\n @observable private selectedItemId: string = '';\n\n @observable private deliveryOptions: DeliveryOption[] = [];\n\n @observable private isLoading: boolean = false;\n\n @observable private errorMessage?: string;\n\n @computed private get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n public get expressPaymentDetailsFromCartPage() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties =\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\n ?.StringValue ?? '';\n\n return properties ? JSON.parse(properties) : null;\n }\n\n public get isExpressPaymentAppliedInCartPage(): boolean {\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\n }\n\n private cartDeliveryMode?: string;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly isSelectDefaultOptionEnabled?: boolean;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public constructor(props: ICheckoutDeliveryOptionsModuleProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isSelectDefaultOptionEnabled =\n this.props.config.useDefaultDeliveryOption && this.props.config.useDefaultDeliveryOption !== useDefaultDeliveryOption.none;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.shippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isExpressCheckoutApplied,\n async isExpressCheckoutApplied => {\n if (isExpressCheckoutApplied && this.canShip() && !this.isExpressPaymentAppliedInCartPage) {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\n checkoutError.errorMessage\n ) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutDeliveryOptions) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutDeliveryOptionsModuleProps, nextState: ICheckoutDeliveryOptionsViewState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n if (!this.canShip()) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const {\n moduleState: { isReady, isUpdating, hasError }\n } = this.props;\n const isError = !this.isLoading && hasError;\n const isShowList = !this.isLoading && !hasError && isUpdating && !this.isSelectDefaultOptionEnabled;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n const { errorMessageTitle, deliveryOptionAriaLabel } = this.props.resources;\n\n const viewProps = {\n ...this.props,\n onDeliveryOptionChange: this.onDeliveryOptionChange,\n selectedItemId: this.selectedItemId,\n deliveryOptionsData: this.deliveryOptions,\n isLoading: this.isLoading,\n alert: this.errorMessage && ,\n errorMessageData: this.errorMessage,\n viewState: {\n isLoading: this.isLoading,\n isError,\n isShowList,\n isShowSelected,\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\n },\n CheckoutDeliveryOptions: {\n moduleProps: this.props,\n className: classname('ms-checkout-delivery-options', this.props.config.className)\n },\n deliveryOptions: {\n DeliveryOptionsList: {\n className: 'ms-checkout-delivery-options__list',\n role: 'list',\n 'aria-label': deliveryOptionAriaLabel\n },\n list: this.getDeliveryOptionList()\n },\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\n errorMessage: this.getErrorMessage(),\n waiting: ,\n checkoutErrorRef: this.checkoutErrorRef,\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSave,\n onEdit: this.onEdit,\n onCancel: this.onCancel\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.isSelectDefaultOptionEnabled ? undefined : this.onEdit,\n onCancel: this.isSelectDefaultOptionEnabled ? undefined : this.onCancel,\n onSubmit: this.isSelectDefaultOptionEnabled ? undefined : this.onSubmit,\n status:\n !(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption) &&\n this.canShip()\n ? 'updating'\n : 'disabled'\n });\n\n this.cartDeliveryMode = this.getSavedDeliveryOption();\n await this.loadDeliveryOptions();\n };\n\n private readonly canShip = (): boolean => {\n const hasInvoice = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n return !hasInvoice && this.getCartLinesForShipping().length > 0;\n };\n\n private readonly isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\n if (deliveryMode) {\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\n return true;\n }\n }\n return false;\n };\n\n private readonly getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\n if (!selectedItem) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const { id, typeName, context } = this.props;\n const { priceFree } = this.props.resources;\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\n const channelConfig = this.props.context.request.channel;\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option-selected' },\n description: ,\n price: (\n \n )\n };\n };\n\n private readonly getErrorMessage = (): ICheckoutDeliveryOptionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n // @ts-expect-error\n CheckoutDeliveryOptionsError: { tag: 'span', className: 'ms-address-form__error', role: 'alert', 'aria-live': 'assertive' },\n title: ,\n message: \n };\n };\n\n private readonly getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\n const count = this.deliveryOptions.length;\n const { priceFree } = this.props.resources;\n const { id, typeName, context } = this.props;\n const channelConfig = this.props.context.request.channel;\n\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option', role: 'listitem' },\n code: deliveryOption.Code || '',\n radioButton: (\n \n ),\n description: (\n \n ),\n price: (\n \n )\n };\n });\n };\n\n private readonly getSaveButton = (): React.ReactNode => {\n const { saveBtnLabel = 'Save' } = this.props.resources;\n return (\n \n {saveBtnLabel}\n \n );\n };\n\n private readonly getEditButton = (): React.ReactNode => {\n const { editBtnLabel = 'Change' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.errorMessage = errorMessage;\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.errorMessage = undefined;\n };\n\n private readonly onSave = async (): Promise => {\n await this.onSubmit();\n };\n\n private readonly onEdit = async (): Promise => {\n this.props.telemetry.information('Delivery options onEdit is called.');\n\n this.clearError();\n this.onUpdating();\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n };\n\n private readonly onSubmit = async (): Promise => {\n this.props.telemetry.information('Delivery options onSubmit is called.');\n\n await this.updateCartDeliverySpecification(this.selectedItemId);\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n };\n\n private readonly onCancel = async (): Promise => {\n this.props.telemetry.information('Delivery options onCancel is called.');\n\n // Reset to the saved value\n const savedDeliveryOption = this.getSavedDeliveryOption();\n if (savedDeliveryOption) {\n this.selectedItemId = savedDeliveryOption;\n this.onReady();\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n } else {\n this.onUpdating();\n }\n };\n\n private readonly getSavedDeliveryOption = (): string | undefined => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\n };\n\n private readonly updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\n if (deliveryModeId.trim() === '') {\n return;\n }\n\n const { resources } = this.props;\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const updateCartDeliverySpecificationInput = {\n deliveryModeId,\n shippingAddress: checkoutState.shippingAddress,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined\n };\n\n this.clearError();\n this.onPending();\n\n await checkoutState.checkoutCart\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\n .then(response => {\n if (response.status === 'FAILED') {\n const errorMessage = `${response.errorDetails?.LocalizedMessage}`;\n this.setError(StringExtensions.isNullOrEmpty(errorMessage) ? resources.genericErrorMessage : errorMessage);\n }\n\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n })\n .catch(() => {\n this.setError(resources.genericErrorMessage);\n });\n };\n\n private readonly getCartLinesForShipping = (): CartLine[] => {\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n\n return this.retailMultiplePickUpOptionEnabled\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n this.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n };\n\n private readonly getDeliveryOptions = async (shippingAddress: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n const cartId = (cartState.cart as Cart).Id;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n const response = await getDeliveryOptionsAsync(\n {\n callerContext: context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\n },\n cartId,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n );\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n\n if (response && response.length > 0) {\n this.deliveryOptions = response;\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n\n if (this.deliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartDeliveryMode && this.isDeliveryModeExists(this.cartDeliveryMode)) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n } else {\n this.onUpdating();\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: !!this.isSelectDefaultOptionEnabled });\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly getStoredDeliveryOptions = async (): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context } = this.props;\n const cartState = this.props.data.checkout.result.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n }\n\n if (this.cartDeliveryMode) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly loadDeliveryOptions = async (): Promise => {\n const shippingAddress = this.props.data.checkout.result?.shippingAddress;\n\n if (this.canShip() && shippingAddress) {\n if (\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied\n ) {\n await this.getDeliveryOptions(shippingAddress);\n }\n\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n }\n\n if (\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n this.onSubmit();\n }\n }\n };\n\n private readonly onDeliveryOptionChange = (event: React.ChangeEvent) => {\n const deliveryModeId = event.currentTarget.value;\n this.selectedItemId = deliveryModeId;\n };\n\n private readonly onReady = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onReady();\n }\n };\n\n private readonly onUpdating = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onUpdating();\n }\n };\n\n private readonly onPending = () => {\n if (!this.isSelectDefaultOptionEnabled) {\n this.props.moduleState.onPending();\n }\n };\n}\n\nexport default CheckoutDeliveryOptions;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\ntype deliveryType = 'pickup' | 'ship' | 'email';\n\nexport interface IPickUpAtStore {\n PickUpAtStore: INodeProps;\n label: React.ReactNode;\n location: React.ReactNode;\n}\n\nexport interface IEmailDelivery {\n EmailDelivery: INodeProps;\n label: React.ReactNode;\n}\n\nexport interface ILineItem {\n LineId: string;\n LineItem: INodeProps;\n item?: React.ReactNode;\n pickUpAtStore?: IPickUpAtStore;\n emailDelivery?: IEmailDelivery;\n}\n\nexport interface ILineItemDeliveryGroup {\n LineItemDeliveryGroup: INodeProps;\n LineItemList: INodeProps;\n heading: React.ReactNode;\n lineItemWraper?: React.ReactNode;\n lineItemWraperIcon?: React.ReactNode;\n lineItems: ILineItem[];\n}\n\nexport interface ILineItems {\n LineItems: INodeProps;\n Header: INodeProps;\n heading: React.ReactNode;\n editLink: React.ReactNode;\n itemsForPickup?: ILineItemDeliveryGroup;\n itemsForShip?: ILineItemDeliveryGroup;\n itemsForEmail?: ILineItemDeliveryGroup;\n itemsGroupWithMulitplePickupMode?: ILineItemDeliveryGroup[];\n}\n\nexport const getLineItems = (input: ICheckoutProps, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\n const emailDeliveryModeCode = get(input, 'context.request.channel.EmailDeliveryModeCode');\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const _getDeliveryLocation = (cartLine: CartLine): string => {\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\n return '';\n }\n\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\n return location.OrgUnitNumber === cartLine.FulfillmentStoreId;\n });\n\n return locationMatch && locationMatch.OrgUnitName;\n };\n\n const _getProduct = (productId: number): SimpleProduct | undefined => {\n const products = get(input, 'data.products.result') || [];\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n };\n\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\n const {\n id,\n typeName,\n context,\n config: { imageSettings, showShippingChargesForLineItems },\n resources: {\n quantityDisplayString,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n productDimensionTypeAmount,\n configString,\n inputQuantityAriaLabel,\n discountStringText,\n shippingCharges\n },\n context: {\n request: { gridSettings }\n }\n } = input;\n const catalogs = input.data.catalogs?.result;\n if (!product) {\n return;\n }\n\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n const currencyCode = get(input, 'context.request.channel.Currency');\n return (\n \n );\n };\n\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\n const {\n resources: { pickUpAtStoreWithLocationText }\n } = input;\n\n return {\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\n label: {pickUpAtStoreWithLocationText},\n location:
{pickupDeliveryLocation}
\n };\n };\n\n const _getEmailDeliveryComponents = (): IEmailDelivery => {\n const {\n resources: { emailDeliveryText }\n } = input;\n\n return {\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\n label: {emailDeliveryText}\n };\n };\n\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\n return items.map(cartLine => {\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const isPickUp = _getCartPickDeliveryMode(cartLine);\n const isEmailDelivery =\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\n return {\n LineId: cartLine.LineId || '',\n LineItem: { className: 'ms-checkout__line-item' },\n item: _getLineItemComponent(cartLine),\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined,\n emailDelivery: isEmailDelivery ? _getEmailDeliveryComponents() : undefined\n };\n });\n };\n\n const _getCartPickDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode ===\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode === pickupDeliveryModeCode\n : false;\n };\n\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode !==\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode !== pickupDeliveryModeCode\n : false;\n };\n\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\n const {\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? shippingCountCheckoutLineItem\n : type === 'pickup'\n ? inStorePickUpLabel\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _countItems = (items: CartLine[]): number => {\n return items.reduce((count, item) => {\n return count + (item.Quantity || 0);\n }, 0);\n };\n\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n if (type === 'ship') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? _getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n } else if (type === 'pickup') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? _getCartPickDeliveryMode(cartLine) : null\n );\n }\n return cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === emailDeliveryModeCode);\n };\n\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\n if ((pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) && (type === 'pickup' || type === 'email')) {\n return;\n }\n\n const items = _filterItemsByDiliveryType(type);\n\n if (items.length === 0) {\n return undefined;\n }\n\n const count = _countItems(items);\n const title = _getGroupTitleComponent(count, type);\n\n return {\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n heading:
{title}
,\n lineItems: _getLineItemsComponents(items)\n };\n };\n\n const _getLineItems = (): ILineItems | undefined => {\n const {\n context,\n config: { lineItemsHeading },\n data: { products },\n resources: { editCartText }\n } = input;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.EditCart);\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const groupClass = retailMultiplePickUpOptionEnabled ? ' multiple-pickup-enabled' : '';\n if (!cart || !cart.CartLines || cart.CartLines.length === 0 || !products) {\n return undefined;\n }\n\n return {\n LineItems: { className: `ms-checkout__line-items${groupClass}` },\n Header: { className: 'ms-checkout__line-items-header' },\n heading: lineItemsHeading && lineItemsHeading.text && (\n \n ),\n editLink: (\n \n {editCartText}\n \n ),\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\n itemsForShip: _getLineItemsByDeliveryType('ship'),\n itemsForEmail: _getLineItemsByDeliveryType('email'),\n itemsGroupWithMulitplePickupMode: retailMultiplePickUpOptionEnabled\n ? _getLineItemsByDeliveryTypeWithMulitplePickupMode()\n : undefined\n };\n };\n\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { lineItemsHeading }\n } = input;\n if (lineItemsHeading) {\n lineItemsHeading.text = event.target.value;\n }\n };\n\n const _getGroupTitleComponentWithMultiplePickUp = (\n count: number,\n type: deliveryType,\n deliveryMode?: string,\n fulFillmentStoreId?: string\n ): string => {\n const {\n resources: { itemLabel, itemsLabel }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n let pickupDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n pickupDeliveryModeDesc = pickupDeliveryModeDesc\n ? pickupDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === deliveryMode)?.Description!;\n });\n\n const pickupTitle: string = `${pickupDeliveryModeDesc}, ${fulFillmentStoreId}`;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? `(${count} ${suffix})`\n : type === 'pickup'\n ? `${pickupTitle} (${count} ${suffix})`\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _filterItemsByMultiplePickupMode = (): CartLine[][] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cart.CartLines);\n const cartLinesGroup: CartLine[] = [];\n const cartLinesGrp: CartLine[][] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryMode, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryMode] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n cartLinesGrp.push(cartLine);\n });\n });\n\n return cartLinesGrp;\n };\n\n const _getLineItemsByDeliveryTypeWithMulitplePickupMode = (): ILineItemDeliveryGroup[] | undefined => {\n if (pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) {\n return;\n }\n\n const {\n resources: { multiplePickUpLabel, shippingLable }\n } = input;\n\n const items = _filterItemsByMultiplePickupMode();\n\n if (items.length === 0) {\n return undefined;\n }\n\n const lineItemDeliveryGroup: ILineItemDeliveryGroup[] = [];\n items.map(item => {\n const count = _countItems(item);\n const cartLine = item[0];\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const type: deliveryType =\n cartLine.FulfillmentStoreId && cartLine.DeliveryMode\n ? 'pickup'\n : cartLine.FulfillmentStoreId === '' &&\n cartLine.DeliveryMode === emailDeliveryModeCode &&\n !StringExtensions.isNullOrEmpty(emailDeliveryModeCode)\n ? 'email'\n : 'ship';\n const title = _getGroupTitleComponentWithMultiplePickUp(count, type, cartLine.DeliveryMode, pickupDeliveryLocation);\n const groupTitle = type === 'pickup' ? multiplePickUpLabel : type === 'ship' ? shippingLable : 'email';\n const iconClass = `ms-checkout__line-items-group-title-multiple-pickup-${type}icon`;\n lineItemDeliveryGroup.push({\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group multiple-pickup', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n lineItemWraperIcon:
,\n lineItemWraper:
{groupTitle}
,\n heading:
{title}
,\n lineItems: _getLineItemsComponents(item)\n });\n });\n\n return lineItemDeliveryGroup;\n };\n\n return _getLineItems();\n};\n","import * as React from 'react';\r\n\r\nimport { Button, format } from '@msdyn365-commerce-modules/utilities';\r\nimport { IComponent, 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\nimport { PriceComponent } from '@msdyn365-commerce/components';\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\nexport interface IPromoCodeComponent extends IComponent {}\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 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

\r\n {this.state.error}\r\n

\r\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\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,\r\n 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\r\n .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 return (\r\n // tslint:disable-next-line:react-this-binding-issue jsx-no-lambda\r\n {\r\n e.preventDefault();\r\n this._applyPromotion(cartState);\r\n }}\r\n className='msc-promo-code__form-container'\r\n >\r\n
\r\n \r\n {\r\n this._applyPromotion(cartState);\r\n }}\r\n disabled={!this.state.canApply}\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\r\n .removePromoCodes({\r\n promoCodes: [code]\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 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 return (\r\n <>\r\n {props.cart.cart.Coupons.map((coupon: Coupon) => {\r\n const ariaLabel = props.removePromoAriaLabelFormat\r\n ? 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 {\r\n this._removePromotion(props.cart, event);\r\n }}\r\n data-value={coupon.Code}\r\n aria-label={ariaLabel}\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\nexport default PromoCode;\r\n","/*!\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 { PriceComponent } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPromoCodeProps extends IComponentProps<{}> {\n cart: ICartState | undefined;\n promoCodeHeadingText: string;\n appliedPromoCodeHeadingText: string;\n removePromoAriaLabelFormat: string;\n promoPlaceholderText: string;\n promoCodeApplyButtonText: string;\n collapseTimeOut: number;\n removePromoText: string;\n invalidPromoCodeErrorText: string;\n failedToAddPromoCodeErrorText: string;\n duplicatePromoCodeErrorText: string;\n failedToRemovePromoCodeErrorText: string;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n promoCodeApplyCallback?(): void;\n}\n\ninterface IPromoCodeState {\n isCollapseOpen: boolean;\n promoCodeInputValue: string;\n error: string;\n canApply: boolean;\n}\n\n/**\n *\n * The PromoCode component renders the promocode section.\n * @extends {React.PureComponent}\n */\nclass PromoCode extends React.Component {\n private readonly payLoad: IPayLoad;\n\n constructor(props: IPromoCodeProps, state: IPromoCodeState) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, TelemetryConstant.ApplyPromoCode);\n this.state = {\n isCollapseOpen: false,\n promoCodeInputValue: '',\n error: '',\n canApply: false\n };\n }\n\n public shouldComponentUpdate(nextProps: IPromoCodeProps, nextState: IPromoCodeState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n return (\n
\n
{this.props.promoCodeHeadingText}
\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\n

\n {this.state.error}\n

\n {this._renderAppliedPromoCode(this.props)}\n
\n );\n }\n\n private readonly _onInputChangeHandler = (e: React.ChangeEvent) => {\n const error = e.target.value === '' ? '' : this.state.error;\n this.setState({\n promoCodeInputValue: e.target.value.trim(),\n error,\n canApply: !!e.target.value\n });\n };\n\n private readonly _applyPromotion = (cartState: ICartState | undefined) => {\n if (!cartState || !cartState.cart) {\n return;\n }\n const appliedPromo = this.state.promoCodeInputValue;\n\n cartState\n .addPromoCode({ promoCode: appliedPromo })\n .then(result => {\n if (result.status === 'SUCCESS') {\n // Show success text\n this.setState({ promoCodeInputValue: '', error: '', canApply: false });\n } else if (result.substatus === 'ALREADYADDED') {\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\n } else {\n this.setState({ error: this.props.invalidPromoCodeErrorText });\n }\n })\n .catch(error => {\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\n });\n };\n\n /**\n * On Submit function.\n * @param cartState -Cartstate.\n * @returns Apply promotion.\n */\n private readonly _onSubmitHandler = (cartState: ICartState | undefined) => (event: React.FormEvent) => {\n event.preventDefault();\n this._applyPromotionHandler(cartState);\n };\n\n /**\n * On apply promotion function.\n * @param cartState -Cartstate.\n * @returns Apply promotion.\n */\n private readonly _applyPromotionHandler = (cartState: ICartState | undefined) => () => {\n this._applyPromotion(cartState);\n };\n\n private readonly _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\n const attributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
\n
\n \n \n {promoCodeApplyButtonText}\n \n
\n
\n );\n };\n\n private readonly _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\n if (!cartState) {\n return;\n }\n const code = event.currentTarget.getAttribute('data-value') || '';\n cartState\n .removePromoCodes({\n promoCodes: [code]\n })\n .then(result => {\n if (result.status === 'SUCCESS') {\n this.setState({ error: '' });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText });\n });\n };\n\n private readonly _calculateDiscount = (code: string, cartState: ICartState | undefined) => {\n if (!cartState || !cartState.cart || !cartState.cart.CartLines || cartState.cart.CartLines.length === 0 || !code) {\n return;\n }\n let discountAmount = 0;\n for (const line of cartState.cart.CartLines) {\n if (line.DiscountLines) {\n for (const discountLine of line.DiscountLines) {\n if (discountLine.DiscountCode === code) {\n discountAmount += discountLine.DiscountCost!;\n }\n }\n }\n }\n return discountAmount * -1;\n };\n\n private readonly _renderAppliedPromoCode = (props: IPromoCodeProps) => {\n if (!props.cart || !props.cart.cart || !props.cart.cart.Coupons || props.cart.cart.Coupons.length === 0) {\n return;\n }\n\n const removePromotionHandler = (event: React.MouseEvent) => {\n this._removePromotion(props.cart, event);\n };\n\n const promoCodTotalDiscount = props.cart.cart.Coupons.reduce((count: number, coupon: Coupon) => {\n return count + (this._calculateDiscount(coupon.Code || '', props.cart) || 0);\n }, 0);\n\n return (\n <>\n
\n
{this.props.appliedPromoCodeHeadingText}
\n \n
\n {props.cart.cart.Coupons.map((coupon: Coupon) => {\n const ariaLabel = props.removePromoAriaLabelFormat\n ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code)\n : '';\n\n return (\n
\n
\n {coupon.Code}{' '}\n \n
\n \n {props.removePromoText}\n \n
\n );\n })}\n \n );\n };\n}\n\nexport default PromoCode;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLinePriceEditor, ICartLinePriceEditorResources, PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\n/**\n * ICartlineResourceString: Interface for specifying the\n * resource strings that the component needs.\n */\nexport interface ICartlineResourceString {\n /**\n * Display string for discount label\n */\n discountStringText: string;\n\n /**\n * String for size key\n */\n sizeString: string;\n\n /**\n * String for color key\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension\n */\n configString: string;\n\n /**\n * String for style key\n */\n styleString: string;\n\n /**\n * String for amount key\n */\n amountString?: string;\n\n /**\n * Display string for quantity label\n */\n quantityDisplayString: string;\n\n /**\n * Display string for quantity label\n */\n inputQuantityAriaLabel: string;\n\n /**\n * Aria label for the decrement button in quantity component\n */\n decrementButtonAriaLabel: string;\n\n /**\n * Aria label for the increment button in quantity component\n */\n incrementButtonAriaLabel: string;\n\n /**\n * Original text screenreader\n */\n originalPriceText: string;\n\n /**\n * Current text screenreader\n */\n currentPriceText: string;\n\n /**\n * Shipping Charges Text\n */\n shippingChargesText: string;\n\n priceEditorResources?: ICartLinePriceEditorResources;\n salesAgreementPricePrompt?: string;\n}\n\ninterface ICartLineData {\n cartLine: CartLine | SalesLine;\n cartState?: ICartState;\n product?: SimpleProduct;\n catalogs?: ProductCatalog[];\n}\n\n/**\n * ICartLineProps: The props required to render cartLineitem.\n */\nexport interface ICartLineProps extends IComponentProps {\n /**\n * The flag to change the quantity component from intractable to static.\n */\n disableQuantityInteractivity?: boolean;\n\n /**\n * The primary image url.\n */\n primaryImageUrl?: string;\n\n /**\n * The product url.\n */\n productUrl?: string;\n\n /**\n * GridSettings for the product image in cartLine.\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartLine.\n */\n imageSettings: IImageSettings;\n\n /**\n * Boolean flag to indicate if the item is out of stock.\n */\n isOutOfStock?: boolean;\n\n /**\n * Flag to make quantity section editable.\n */\n isQuantityEditable?: boolean;\n\n /**\n * Max quantity for line item.\n */\n maxQuantity?: number;\n\n /**\n * Current quantity for line item.\n */\n currentQuantity?: number;\n\n /**\n * Resource string for the component.\n */\n resources: ICartlineResourceString;\n\n /**\n * SalesLine flag.\n */\n isSalesLine?: boolean;\n\n /**\n * Error message to show in place of quantity.\n */\n errorMessage?: string;\n\n /**\n * Inventory information label.\n */\n inventoryInformationLabel?: string;\n\n /**\n * Inventory information class name.\n */\n inventoryLabelClassName?: string;\n\n /**\n * Flag to show/hide shipping charges for line items.\n */\n showShippingChargesForLineItems?: boolean;\n\n /**\n * Boolean flag to indicate if cart state status is ready.\n */\n isCartStateReady?: boolean;\n\n /**\n * Chanel Delivery Option configuration is from api.\n */\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n\n /**\n * The cart line index.\n */\n lineIndex?: number;\n\n /**\n * Quantity onChange callback.\n */\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): boolean;\n priceCurrency?: string;\n}\n\ninterface IDimensionStrings {\n /**\n * String for size key.\n */\n sizeString: string;\n\n /**\n * String for color key.\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension.\n */\n configString: string;\n\n /**\n * String for style key.\n */\n styleString: string;\n\n /**\n * String for amount key.\n */\n amountString?: string;\n}\n\n/**\n * Renders catalog label for the cart line.\n * @param props - Cart line props.\n * @returns Catalog label.\n */\nconst CatalogLabelComponent: React.FC = (props: ICartLineProps) => {\n const catalogId = props.data.cartLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.data.catalogs)) {\n return null;\n }\n\n const catalog = props.data.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
{catalog.Name}
;\n};\n\nconst CartLineItemFunctions = {\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\n if (!Product || !Product.Dimensions) {\n return [];\n }\n\n return Product.Dimensions.map(productDimension => {\n if (productDimension.DimensionTypeValue === 1) {\n return (\n
\n \n {DimensionStrings.colorString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n\n if (productDimension.DimensionTypeValue === 2) {\n return (\n
\n \n {DimensionStrings.configString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n\n if (productDimension.DimensionTypeValue === 3) {\n return (\n
\n \n {DimensionStrings.sizeString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n\n if (productDimension.DimensionTypeValue === 4) {\n return (\n
\n \n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n return null;\n });\n },\n\n renderDiscountLines: (props: ICartLineProps) => {\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\n return null;\n }\n\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\n return (\n
\n \n {discountLine.OfferName ? discountLine.OfferName : ''}:{` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n \n {` (${discountLine.EffectivePercentage !== undefined ? discountLine.EffectivePercentage : ''}%)`}\n
\n );\n });\n },\n renderInventoryLabel: (props: ICartLineProps) => {\n if (!props.inventoryInformationLabel) {\n return null;\n }\n const inventoryCssName = props.inventoryLabelClassName\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\n : 'msc-cart-line__product-inventory-label';\n return {props.inventoryInformationLabel};\n },\n\n /**\n * Gets the react node for product unit of measure display.\n * @param props - Icartline props.\n * @returns The node representing markup for unit of measure component.\n */\n renderUnitOfMeasure: (props: ICartLineProps) => {\n if (props.data.cartLine.IsInvoiceLine) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\n return undefined;\n }\n\n const product = props.data.product;\n if (!product || !product.DefaultUnitOfMeasure) {\n return undefined;\n }\n\n return (\n
\n {product.DefaultUnitOfMeasure}\n
\n );\n },\n renderShippingLabel: (props: ICartLineProps) => {\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\n const cartline = props.data.cartLine;\n let hasShippingMethod = false;\n if (channelDeliveryOptionConfig !== undefined) {\n hasShippingMethod = !!(\n cartline.DeliveryMode &&\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\n );\n } else {\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\n }\n if (!hasShippingMethod) {\n return undefined;\n }\n\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\n\n if (shippingChargeLines.length === 0) {\n return undefined;\n }\n\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\n }, 0);\n\n const priceComponent = (\n \n );\n return (\n <>\n \n {priceComponent}\n \n );\n },\n renderOtherCharges: (props: ICartLineProps) => {\n const cartline = props.data.cartLine;\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\n\n return (\n (otherCharges &&\n otherCharges.map((otherCharge, key) => {\n return otherCharge && otherCharge.CalculatedAmount ? (\n
\n \n \n \n \n
\n ) : (\n ''\n );\n })) ||\n undefined\n );\n },\n\n /**\n * Render the sales agreement prompt.\n * @param props - The ICartLineProps.\n * @returns The JSX.Element.\n */\n renderSalesAgreementPrompt: (props: ICartLineProps): JSX.Element | null => {\n if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\n return null;\n }\n return
{props.resources.salesAgreementPricePrompt}
;\n }\n};\n\n// eslint-disable-next-line no-redeclare\nconst CartLine: React.FC = (props: ICartLineProps) => {\n const { isSalesLine, productUrl, resources } = props;\n const { product, cartLine } = props.data;\n\n const destructDimensionStrings = {\n sizeString: resources.sizeString,\n colorString: resources.colorString,\n styleString: resources.styleString,\n configString: resources.configString,\n amountString: resources.amountString\n };\n\n const fallbackImageUrl =\n product &&\n getFallbackImageUrl(\n product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\n const imageSettings = props.imageSettings;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\n const renderSalesAgreementPrompt = CartLineItemFunctions.renderSalesAgreementPrompt(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n const productName = product?.Name || cartLine.Description;\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\n\n const onChange = (newValue: number): boolean => {\n if (props.quantityOnChange) {\n return props.quantityOnChange(props.data.cartLine, newValue, props.lineIndex);\n }\n return true;\n };\n\n const _generateErrorMessage = (): JSX.Element | null => {\n if (props.errorMessage) {\n return (\n
\n \n {props.errorMessage}\n
\n );\n }\n\n return null;\n };\n\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\n const nodes = [];\n if (props.isOutOfStock) {\n return null;\n }\n\n // No quantity selector for invoice line\n if (!props.data.cartLine.IsInvoiceLine) {\n if (props.data.product && props.isQuantityEditable) {\n nodes.push(\n
\n
{resources.quantityDisplayString}
\n \n
\n );\n } else {\n nodes.push(\n
\n \n {props.data.cartLine.Quantity}\n
\n );\n }\n }\n\n nodes.push(\n
\n \n {(props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 && (\n <>\n \n {` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n )) ||\n null}\n
\n );\n\n return nodes;\n };\n\n return (\n <>\n
\n
\n \n
\n
\n
\n \n {MsDyn365.isBrowser ? (\n \n {productName}\n \n ) : null}\n {ArrayExtensions.hasElements(productDimensions) ? (\n
{productDimensions}
\n ) : (\n ''\n )}\n {renderUnitOfMeasure}\n
\n \n
\n {renderDisountLines}\n {renderInventoryLabel}\n {props.showShippingChargesForLineItems &&
{renderShippingLabel}
}\n {renderOtherCharges}\n {renderSalesAgreementPrompt}\n
\n {_generateQuantityandPrice()}\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\n \n )}\n
\n
\n {_generateErrorMessage()}\n \n );\n};\n\nexport default CartLine;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { SocialMedia, SocialMediaComponent } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISocialShareItemConfig, ISocialShareItemProps, socialMedia } from './social-share-item.props.autogenerated';\n\nexport interface ISocialShareItemViewProps extends ISocialShareItemProps {\n SocialShareItemElement: React.ReactNode | null;\n SocialShareItem: IModuleProps;\n}\n\n/**\n *\n * SocialShareItem component.\n * @extends {React.PureComponent>}\n */\nclass SocialShareItem extends React.PureComponent> {\n constructor(props: ISocialShareItemProps) {\n super(props);\n\n this._getSocialShareItem = this._getSocialShareItem.bind(this);\n }\n\n public render(): JSX.Element | null {\n const viewprops = {\n ...this.props,\n SocialShareItem: {\n moduleProps: this.props,\n className: 'ms-social-share-item'\n },\n SocialShareItemElement: this._getSocialShareItem()\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n\n private _getSocialShareItem(): React.ReactNode | null {\n const src = this.props.config.icon;\n if (MsDyn365.isBrowser) {\n switch (this.props.config.socialMedia) {\n case socialMedia.facebook:\n return (\n \n );\n case socialMedia.twitter:\n return (\n \n );\n case socialMedia.pinterest:\n return (\n \n );\n case socialMedia.linkedin:\n return (\n \n );\n case socialMedia.mail:\n return (\n \n );\n default:\n return null;\n }\n }\n return null;\n }\n}\n\nexport default SocialShareItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { SalesOrder, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { CartCheckout } from './checkout';\nimport { EmptyActiveCart } from './empty-active-cart';\n\nexport const PlaceOrder = async (\n ctx: IActionContext,\n checkoutState: ICheckoutState | undefined,\n orderedProducts: SimpleProduct[] | undefined,\n redirect: boolean,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n) => {\n return new Promise(async (resolve: () => void, reject: (reason?: Error) => void) => {\n ctx.telemetry.information('Checkout place-order method is triggered.');\n\n let salesOrder: SalesOrder;\n\n // Proceed checkout\n try {\n salesOrder = await CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\n } catch (error) {\n reject(error);\n return;\n }\n\n // Remove purchased items from the active cart\n try {\n ctx.telemetry.information('Checkout emptyActiveCart is called.');\n await EmptyActiveCart(ctx);\n } catch (error) {\n reject(error);\n return;\n }\n\n if (redirect) {\n ctx.telemetry.information('Redirect to order confirmation page.');\n\n // Redirect to the order confirmation page\n const orderConfirmationUrl = getUrlSync('orderConfirmation', ctx) || '';\n if (!orderConfirmationUrl) {\n reject(new Error('Error: No orderConfirmationUrl'));\n return;\n }\n\n const separator = orderConfirmationUrl.includes('?') ? '&' : '?';\n const url = `${orderConfirmationUrl}${separator}transactionId=${salesOrder.Id}`;\n window.location.assign(url);\n } else {\n ctx.telemetry.information('Not redirect to order confirmation page.');\n\n if (checkoutState) {\n const result = await checkoutState.updateSalesOrder({\n newSalesOrder: salesOrder,\n newOrderedProducts: orderedProducts || []\n });\n\n if (result.status === 'FAILED') {\n reject(new Error('Error: Updating error state failed'));\n return;\n }\n } else {\n reject(new Error('Error: No checkout state'));\n return;\n }\n resolve();\n }\n });\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './alert';\nexport * from './get-line-items';\nexport * from './get-order-summary';\nexport * from './guided-card';\nexport * from './guided-form';\nexport * from './place-order-button';\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 } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getFallbackImageUrl, getProductUrlSync, OrderTemplate, OrderTemplateLine } 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}\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 ? getProductUrlSync(line.fullProduct.ProductDetails, context.actionContext, undefined)\n : '';\n\n return (\n \n );\n })}\n
\n );\n }\n return
;\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 * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAdditionalContentData, ILinksData } from '../video-player.props.autogenerated';\n\n/**\n * IVideoPlayerAdditionalContentProps: Interface for\n * Video Player Additional Content Component props.\n */\nexport interface IVideoPlayerAdditionalContentProps {\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 * IVideoPlayerAdditionalContentProps: Interface for\n * Video Player Additional Content view props.\n */\nexport interface IVideoPlayerAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n additionalContentItems?: IVideoPlayerAdditionalContentItemViewProps;\n}\n\n/**\n * IVideoPlayerAdditionalContentProps: Interface for\n * Video Player Additional Content Item view props.\n */\nexport interface IVideoPlayerAdditionalContentItemViewProps {\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentItemContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Video Player Additional content component props.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IVideoPlayerAdditionalContentProps) => {\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 - Video Player Additional content component props.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IVideoPlayerAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalParagraphChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Video Player Additional content component props.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IVideoPlayerAdditionalContentProps, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'ms-video-player__details__additional-content__cta__links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.openInNewTab,\n role: 'link'\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 - Video Player additonal content item props.\n * @param props - Video Player Additional content component props.\n * @returns IVideoPlayerAdditionalContentItemViewProps.\n */\nconst getAdditionalContentItems = (\n item: IAdditionalContentData,\n props: IVideoPlayerAdditionalContentProps\n): IVideoPlayerAdditionalContentItemViewProps => {\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 heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentItemContainer: { className: 'ms-video-player__details__additional-content__container' },\n additionalContentItemLinks: { className: 'ms-video-player__details__additional-content__cta' }\n };\n};\n\n/**\n * VideoPlayerAdditionalContent component.\n * @param props - Video Player Additional content component props.\n * @returns Video Player Additional content view props.\n */\nexport const videoPlayerAdditionalContent = (\n props: IVideoPlayerAdditionalContentProps\n): IVideoPlayerAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n const reactNodes: IVideoPlayerAdditionalContentItemViewProps = getAdditionalContentItems(additionalContent, props);\n return {\n additionalContentNode: { className: 'ms-video-player__details__additional-content' },\n additionalContentItems: reactNodes\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IPlayerData, IPlayerOptions, IPlayerResources, IVideoMetadata, Player } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IVideoPlayerAdditionalContentViewProps, videoPlayerAdditionalContent } from './components/additional-content';\nimport { ILinksData, IVideoPlayerConfig, IVideoPlayerProps } from './video-player.props.autogenerated';\n\nexport interface IVideoPlayerViewProps extends IVideoPlayerProps<{}> {\n player: React.ReactNode;\n title?: React.ReactNode;\n text?: React.ReactNode;\n links?: React.ReactNode;\n detailsContainer?: INodeProps;\n detailsContainerCta?: INodeProps;\n additionalContent?: IVideoPlayerAdditionalContentViewProps;\n handleText?(): void;\n handleParagraph?(): void;\n handleAdditionalText?(): void;\n handleAdditionalParagraph?(): void;\n handleLink?(): void;\n handleAdditionalLink?(): void;\n}\n\n/**\n *\n * VideoPlayer component.\n * @extends {React.PureComponent>}\n */\nclass VideoPlayer extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly isMobileDevice: boolean;\n\n public constructor(props: IVideoPlayerProps) {\n super(props);\n this.isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element {\n const options = {\n ...this.props.config,\n isMobileDevice: this.isMobileDevice\n };\n const video: MsDyn365.IVideoData = this.props.config.video;\n const playerResources: IPlayerResources = {\n playAriaLabel: this.props.resources.playLabel,\n pauseAriaLabel: this.props.resources.pauseLabel,\n playingAriaLabel: this.props.resources.playingLabel,\n pausedAriaLabel: this.props.resources.pausedLabel,\n muteAriaLabel: this.props.resources.muteLabel,\n unMuteAriaLabel: this.props.resources.unMuteLabel,\n fullScreenAriaLabel: this.props.resources.fullScreenLabel,\n exitFullScreenAriaLabel: this.props.resources.exitFullScreenLabel,\n seekBarLabel: this.props.resources.seekBarLabel,\n videoTimeDurationLabel: this.props.resources.videoTimeDurationLabel,\n closedCaptionLabel: this.props.resources.closedCaptionLabel\n };\n const videoMetaData: IVideoMetadata = {};\n\n if (video) {\n videoMetaData.videoId = video.id;\n videoMetaData.title = video.title;\n videoMetaData.duration = video.playTime;\n\n if (video.thumbnail) {\n videoMetaData.posterframeUrl = video.thumbnail.src;\n }\n\n if (video._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = video._links.binaryReferences;\n }\n }\n const videoPlayerData: IPlayerData = { options: options as IPlayerOptions, metaData: videoMetaData };\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\n player: (\n \n \n \n ),\n title: this._getVideoDetailsHeading(),\n text: this._getVideoDetailsParagraph(),\n links: this._getVideoDetailsLinks(),\n detailsContainer: { className: 'ms-video-player__details' },\n detailsContainerCTA: { className: 'ms-video-player__details__cta' },\n additionalContent: videoPlayerAdditionalContent({\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 handleText: this.handleTextChange,\n handleParagraph: this.handleParagraphChange,\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleLink: this.handleLinkTextChange,\n handleAdditionalLink: this.handleAdditionalTextChange\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\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 * Handle text change.\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 * Handle paragraph change.\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 * Handle additional text change.\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 * Handle additional link text change.\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 * Handle additional paragraph change.\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 * Get video details links.\n * @returns - React node.\n */\n private _getVideoDetailsLinks(): React.ReactNode[] | undefined {\n const { links } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n\n return links?.map((linkData: ILinksData, 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: 'ms-video-player__details__cta__link',\n linkText: linkData.linkText,\n linkUrl: linkData.linkUrl.destinationUrl,\n openInNewTab: linkData.openInNewTab,\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 private _getVideoDetailsHeading(): React.ReactNode | undefined {\n const { heading } = this.props.config;\n\n return (\n heading && (\n \n )\n );\n }\n\n private _getVideoDetailsParagraph(): React.ReactNode | undefined {\n const { paragraph } = this.props.config;\n\n return (\n paragraph && (\n \n )\n );\n }\n}\n\nexport default VideoPlayer;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Payment waiting props.\r\n */\r\nexport interface IPaymentWaitingProps {\r\n message: string;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Payment waiting.\r\n * @param param0 - First in param.\r\n * @param param0.message - Message.\r\n * @param param0.className - ClassName.\r\n * @returns React node.\r\n */\r\nexport const WaitingComponent: React.FC = ({ message, className = 'ms-checkout-payment-instrument' }) => (\r\n
\r\n \r\n {message}\r\n
\r\n);\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext, getUrlSync } from '@msdyn365-commerce/core';\n\nexport const GetCheckoutReturnUrl = (actionContext: IActionContext): string => {\n let returnUrl = getUrlSync('checkout', actionContext) || '';\n const absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\n const isAbsoluteUrl = absoluteUrlRegExp.test(returnUrl);\n if (window && !isAbsoluteUrl) {\n returnUrl = `${window.location.origin}${returnUrl}`;\n }\n\n return `${returnUrl}${!returnUrl.includes('?') ? '?' : '&'}pv=1`;\n};\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 />\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 urlObject = new URL(productUrl, context.request.apiSettings.baseUrl);\n urlObject.searchParams.set('catalogId', `${catalogId}`);\n return urlObject.toString();\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 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) =>\n featureState.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n const catalogId = getCatalogId(context.actionContext.requestContext);\n if (isMultipleCatalogFeatureEnabledInHq) {\n newProductListLine.productListLine.CatalogId = catalogId;\n }\n const { fullProduct, ...line } = newProductListLine;\n\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","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IGroup, IGroupDelivery, IGroups, IHelp, IOrderInformation, IOrderSummary, IPaymentMethods, ISalesLine } from './common';\r\n\r\nimport { IOrderDetailsViewProps } from './mands-order-details';\r\n\r\nexport const OrderDetailsOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n salesId,\r\n createdDate,\r\n count,\r\n amount,\r\n channelReferenceId\r\n}) => (\r\n \r\n {channelReferenceId}\r\n {salesId}\r\n {createdDate}\r\n {count}\r\n {amount}\r\n \r\n);\r\n\r\nexport const OrderDetailsSalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton }) => (\r\n \r\n {salesLine}\r\n {buyAgainButton}\r\n \r\n);\r\n\r\nexport const OrderDetailsGroupDelivery: React.FC = ({ deliveryProps, heading, count, address, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {address}\r\n {trackingInfo}\r\n \r\n);\r\n\r\nexport const OrderDetailsGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {delivery && }\r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n
\r\n \r\n {salesLine.salesStatus}\r\n
\r\n
\r\n ))}\r\n
\r\n )}\r\n
\r\n);\r\n\r\nexport const OrderDetailsGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderDetailsOrderSummary: React.FC = ({\r\n orderSummaryProps,\r\n heading,\r\n subtotal,\r\n shipping,\r\n tax,\r\n totalAmount,\r\n earnedPoints\r\n}) => (\r\n \r\n {heading}\r\n {subtotal}\r\n {shipping}\r\n {tax}\r\n {totalAmount}\r\n {earnedPoints}\r\n \r\n);\r\n\r\nexport const OrderDetailsPayment: React.FC = ({ paymentMethodsProps, title, methods }) => (\r\n \r\n {title}\r\n {methods}\r\n \r\n);\r\n\r\nexport const OrderDetailsHelp: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\r\n \r\n {needHelpLabel}\r\n {helpLineNumberLabel}\r\n {contactNumber}\r\n \r\n);\r\n\r\nconst OrderDetailsView: React.FC = ({\r\n moduleProps,\r\n heading,\r\n alert,\r\n loading,\r\n orderInfomation,\r\n orderSummary,\r\n payment,\r\n help,\r\n groups,\r\n placedBy\r\n}) => {\r\n return (\r\n \r\n {placedBy}\r\n {heading}\r\n {alert}\r\n {loading}\r\n {orderInfomation && }\r\n {groups && }\r\n {orderSummary && }\r\n {payment && }\r\n {help && }\r\n \r\n );\r\n};\r\n\r\nexport default OrderDetailsView;\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// import { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { Node, Button, Collapse, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICartViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartlinesViewProps, ICartResources } from '@msdyn365-commerce-modules/cart/dist/types/index';\r\nimport { ICartProps } from '../definition-extensions/cart.ext.props.autogenerated';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\r\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface ICartViewState {\r\n isCartEmpty: boolean;\r\n isOpen: boolean;\r\n isOpenDelivery: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Cart component\r\n * @extends {React.PureComponent>}\r\n */\r\nexport class CartView extends React.PureComponent, ICartViewState> {\r\n constructor(props: ICartViewProps & ICartProps<{}>, state: ICartViewState) {\r\n super(props);\r\n this.state = {\r\n isCartEmpty: true,\r\n isOpen: false,\r\n isOpenDelivery: false\r\n };\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n config,\r\n data,\r\n cartlines,\r\n context,\r\n title,\r\n resources,\r\n storeSelector,\r\n backToShoppingButton,\r\n waitingComponent,\r\n cartLoadingStatus,\r\n cartDataResult,\r\n orderSummaryHeading\r\n } = this.props;\r\n const {\r\n standardDeliveryPrice,\r\n expressDeliveryPrice,\r\n showfreeShippingPrompt,\r\n homeDeliveryText = '',\r\n standardDeliveryText = '',\r\n expressDeliveryText = '',\r\n preFreeShippingDiscountText,\r\n postFreeShippingDiscountText,\r\n qualifyForFreeDeliveryAmount\r\n } = config;\r\n data.products && data.products.result && cartlines && cartlines.length === 0\r\n ? this.setState({ isCartEmpty: true })\r\n : this.setState({ isCartEmpty: false });\r\n const cartAmount =\r\n data.cart && data.cart.result && data.cart.result.cart && data.cart.result.cart.AmountDue ? data.cart.result.cart.AmountDue : 0;\r\n /* START VSI Customization - {Add configurable qualify for free delivery amount} */\r\n const freeDeliveryAmount = qualifyForFreeDeliveryAmount && qualifyForFreeDeliveryAmount > 0 ? qualifyForFreeDeliveryAmount : 50;\r\n /* END VSI Customization - {Add configurable qualify for free delivery amount} */\r\n const cartAmountDue =\r\n freeDeliveryAmount - cartAmount > 0 ? context.cultureFormatter.formatCurrency(freeDeliveryAmount - cartAmount) : '';\r\n return (\r\n
\r\n {\r\n
\r\n
\r\n
\r\n
\r\n

\r\n {'Total'}\r\n {'(excluding delivery)'}\r\n \r\n

\r\n
\r\n
\r\n
{this.checkoutAsSignedInUserBtn()}
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{title}
\r\n
\r\n
\r\n
\r\n
{title}
\r\n
\r\n
\r\n

Qty

\r\n
\r\n
\r\n

Subtotal

\r\n
\r\n
\r\n
\r\n \r\n {this._renderCartlines(\r\n cartlines,\r\n resources.emptyCartText,\r\n this.props.CartlinesWrapper,\r\n storeSelector,\r\n backToShoppingButton,\r\n waitingComponent,\r\n cartLoadingStatus,\r\n cartDataResult,\r\n resources,\r\n context\r\n )}\r\n \r\n
\r\n
\r\n {storeSelector}\r\n
\r\n
\r\n \r\n
\r\n
    \r\n
  • \r\n \r\n {standardDeliveryPrice}\r\n
  • \r\n
  • \r\n \r\n {expressDeliveryPrice}\r\n
  • \r\n {showfreeShippingPrompt && cartAmountDue && (\r\n
  • \r\n \r\n
  • \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {orderSummaryHeading && (\r\n
\r\n
\r\n
\r\n \r\n

Summary

\r\n
\r\n

\r\n {'Total'}\r\n {'(excluding delivery)'}\r\n \r\n

\r\n
\r\n\r\n
\r\n {this.checkoutAsSignedInUserBtn()}\r\n {this.checkoutAsGuestBtn()}\r\n
\r\n
\r\n
\r\n \r\n Add a promotion code\r\n \r\n \r\n {this.props.promoCode}\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 Continue Shopping\r\n \r\n
\r\n
\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n public getSitePath = (sitePath: string | undefined) => {\r\n return sitePath !== null ? sitePath : '';\r\n };\r\n\r\n public _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n cartEmptyText: string,\r\n CartlinesWrapper: INodeProps,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean,\r\n resources: ICartResources,\r\n context: ICoreContext\r\n ): JSX.Element[] | JSX.Element => {\r\n const sitePath = this.getSitePath(context.request.sitePath);\r\n const homeUrl = `${context.request.url.requestUrl.origin}${sitePath}/`;\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map((cartLine, index) => {\r\n // @ts-ignore\r\n const cartProduct = this.props.data.cart.result && this.props.data.cart.result._cart.CartLines[index];\r\n const removeClickHandler = () => {\r\n return this._removeItemFromCartHandler(cartProduct);\r\n };\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {storeSelector\r\n ? cartLine.pickUpInStore && (\r\n {cartLine.pickUpInStore.defaultComponent}\r\n )\r\n : null}\r\n
\r\n {!this.state.isCartEmpty && cartLine.cartline ? (\r\n \r\n ) : null}\r\n {cartLine.addToWishlist}\r\n
\r\n
\r\n );\r\n });\r\n } else {\r\n return cartDataResult ? (\r\n
\r\n

{cartEmptyText}

\r\n \r\n
\r\n ) : (\r\n <>{waitingComponent}\r\n );\r\n }\r\n };\r\n\r\n public isCartLine(cartlines: ICartlinesViewProps[] | undefined) {\r\n let cartLine: boolean = false;\r\n cartLine = cartlines && cartlines.length ? true : false;\r\n return cartLine;\r\n }\r\n\r\n private goBack = () => {\r\n window.history.back();\r\n };\r\n\r\n private _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\r\n const { data, telemetry } = this.props;\r\n if (data.cart.result) {\r\n const input = {\r\n cartLineIds: [cartlineToRemove.LineId!.toString()]\r\n };\r\n data.cart.result.removeCartLines(input).catch(error => {\r\n telemetry.warning(error);\r\n telemetry.debug('Unable to Remove Cart Line');\r\n });\r\n }\r\n };\r\n private handleClickDelivery = () => {\r\n this.setState({ isOpenDelivery: !this.state.isOpenDelivery });\r\n };\r\n private handleClick = () => {\r\n this.setState({ isOpen: !this.state.isOpen });\r\n };\r\n private getCheckoutURL = (isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string => {\r\n if (isAuthenticated) {\r\n return guestCheckoutUrl;\r\n }\r\n\r\n const absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n const isAbsoluteUrl = absoluteUrlRegExp.test(guestCheckoutUrl);\r\n let returnURL = guestCheckoutUrl;\r\n /* START VSI Customization - {Change js window to MsDyn365.isBrowser} */\r\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\r\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\r\n }\r\n /* END VSI Customization - {Change js window to MsDyn365.isBrowser} */\r\n return `${signInUrl}${signInUrl.indexOf('?') === -1 ? '?' : '&'}ru=${returnURL}`;\r\n };\r\n private checkoutAsSignedInUserBtn = () => {\r\n const {\r\n context: {\r\n actionContext,\r\n request: {\r\n user: { isAuthenticated, signInUrl }\r\n }\r\n }\r\n } = this.props;\r\n const guestCheckoutUrl = getUrlSync('checkout', actionContext) || '';\r\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\r\n return !this.state.isCartEmpty ? (\r\n \r\n ) : null;\r\n };\r\n private checkoutAsGuestBtn = () => {\r\n const {\r\n context: {\r\n actionContext,\r\n request: {\r\n user: { isAuthenticated }\r\n }\r\n }\r\n } = this.props;\r\n const guestCheckoutUrl = getUrlSync('checkout', actionContext) || '';\r\n return !this.state.isCartEmpty && !isAuthenticated ? (\r\n \r\n ) : null;\r\n };\r\n}\r\nexport default CartView;\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 * as React from 'react';\r\n\r\ninterface ILabelProps {\r\n className: string;\r\n label: string;\r\n}\r\n\r\nconst Label: React.FC = ({ className, label }) => {label};\r\n\r\nexport default Label;\r\n","import { buildCacheKey, getSimpleProducts, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICommerceApiSettings\r\n} from '@msdyn365-commerce/core';\r\nimport { getOrderShipmentsHistoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\r\nimport { OrderShipments, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nexport interface IPaging {\r\n top: number;\r\n skip: number;\r\n}\r\n\r\nexport interface IOrderHistory {\r\n salesOrders: OrderShipments[];\r\n products: SimpleProduct[];\r\n}\r\n\r\n/**\r\n * Calls the Retail API and returns the products\r\n * * @param nextPageToken - Next Page Link.\r\n */\r\nconst getOrderShipmentHistory = (paging: IPaging, nextPageToken?: string) => async (ctx: IActionContext): Promise => {\r\n const accountNumber: string | undefined = ctx.requestContext.user.customerAccountNumber || '';\r\n return getOrderShipmentsHistoryAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: {\r\n Paging: {\r\n Top: paging.top,\r\n Skip: paging.skip,\r\n NextPageToken: nextPageToken\r\n }\r\n }\r\n },\r\n accountNumber\r\n );\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns the products\r\n */\r\nconst getProducts = (productIds: number[] = [], channelId?: number) => (ctx: IActionContext): Promise => {\r\n const productInputs = productIds.map(productId => new ProductInput(productId, ctx.requestContext.apiSettings, channelId));\r\n return getSimpleProducts(productInputs, ctx);\r\n};\r\n\r\n/**\r\n * Action input\r\n */\r\nexport class GetSalesOrderHistoryWithHydrationsInput implements IActionInput {\r\n public paging: IPaging;\r\n private apiSettings: ICommerceApiSettings;\r\n\r\n constructor(paging: IPaging, apiSettings: ICommerceApiSettings) {\r\n this.apiSettings = apiSettings;\r\n this.paging = paging;\r\n }\r\n\r\n public getCacheKey = () => buildCacheKey(`OrderHistory`, this.apiSettings);\r\n /**\r\n * GetCacheObjectType.\r\n * @returns String.\r\n */\r\n public getCacheObjectType = () => `OrderHistory`;\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\n/**\r\n * Get sales order with hydrations action\r\n */\r\nexport async function getSalesOrderHistoryWithHydrationsAction(\r\n input: GetSalesOrderHistoryWithHydrationsInput,\r\n ctx: IActionContext\r\n): Promise {\r\n if (!ctx) {\r\n throw new Error(`getSalesOrderWithHydrationsAction - Action context cannot be null/undefined`);\r\n }\r\n const channelId = ctx.requestContext.apiSettings.channelId;\r\n let salesOrders: OrderShipments[] = [];\r\n\r\n try {\r\n salesOrders = await getOrderShipmentHistory(input.paging)(ctx);\r\n } catch (error) {\r\n throw error;\r\n }\r\n\r\n if (!salesOrders || !salesOrders.length) {\r\n return {\r\n salesOrders: [],\r\n products: []\r\n };\r\n }\r\n\r\n const prodIdsByChannel: { [x: number]: number[] } = {\r\n [channelId]: []\r\n };\r\n\r\n salesOrders\r\n .filter(salesOrder => salesOrder)\r\n .forEach(\r\n salesOrder =>\r\n salesOrder &&\r\n salesOrder.SalesLines &&\r\n salesOrder.SalesLines.forEach(childrenEntry => {\r\n // salesProdIds.push(childrenEntry.ProductId || 0)\r\n const prodId = childrenEntry.ProductId || 0;\r\n if (!salesOrder.ChannelId) {\r\n // Use current channel\r\n prodIdsByChannel[channelId].push(prodId);\r\n } else {\r\n if (!prodIdsByChannel[salesOrder.ChannelId]) {\r\n prodIdsByChannel[salesOrder.ChannelId] = [];\r\n }\r\n prodIdsByChannel[salesOrder.ChannelId].push(prodId);\r\n }\r\n })\r\n );\r\n\r\n const getProductsPromise = Object.entries(prodIdsByChannel).map(([cId, prodIds]) => getProducts(prodIds, Number(cId))(ctx));\r\n\r\n return Promise.all(getProductsPromise)\r\n .then(\r\n (productList): IOrderHistory => {\r\n const products = productList.reduce((memo, list) => {\r\n return [...memo, ...list];\r\n }, []);\r\n\r\n return {\r\n salesOrders,\r\n products\r\n };\r\n }\r\n )\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug('Failed to get products');\r\n throw error;\r\n });\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/order-managment/order-history/get-order-shipment-history',\r\n action: >getSalesOrderHistoryWithHydrationsAction\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 { IAny, ICoreContext, IGeneric, IImageSettings, IModule } from '@msdyn365-commerce/core';\r\nimport { SalesLine, TenderType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\r\nimport groupBy from 'lodash/groupBy';\r\nimport { ISalesLine } from './get-sales-line';\r\n\r\nexport interface IModuleComponentProps extends IModule {\r\n config: {\r\n imageSettings?: IImageSettings;\r\n };\r\n}\r\n\r\nexport interface IPriceContext {\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext>;\r\n telemetry: ITelemetry;\r\n freePriceText: string;\r\n}\r\n\r\nexport const getTenderIdOperationIdMap = (tenderTypes: TenderType[]): object => {\r\n return tenderTypes.reduce((map, tenderType) => {\r\n if (tenderType.TenderTypeId) {\r\n map[tenderType.TenderTypeId] = tenderType.OperationId;\r\n }\r\n return map;\r\n }, {});\r\n};\r\n\r\nexport const countItems = (salesLines: SalesLine[]) => {\r\n return salesLines.reduce((count, salesLine) => {\r\n return count + (salesLine.Quantity || 0);\r\n }, 0);\r\n};\r\n\r\nexport const getSalesLinesByDelivery = (salesLines?: SalesLine[], pickupDeliveryModeCode?: string): SalesLine[] => {\r\n if (!salesLines || !salesLines.length) {\r\n return [];\r\n }\r\n return salesLines.filter(salesLine =>\r\n // isPickUp ? getPickUp : getOthers\r\n pickupDeliveryModeCode ? salesLine.DeliveryMode === pickupDeliveryModeCode : salesLine.DeliveryMode !== pickupDeliveryModeCode\r\n );\r\n};\r\n\r\nexport const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=80&h=80&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=147&h=147&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n};\r\n\r\nexport type IDeliveryType = 'pickUp' | 'ship' | 'carryOut';\r\n\r\nexport type ISalesStatusCode = 'canceled' | 'readyForPickup' | 'pickedUp' | 'processing' | 'shipped' | 'unknown';\r\n\r\nexport const getSalesStatusCode = (deliveryType: IDeliveryType, statusValue?: number): ISalesStatusCode => {\r\n if (statusValue === 7) {\r\n return 'canceled';\r\n }\r\n if (deliveryType === 'pickUp') {\r\n switch (statusValue) {\r\n case 3:\r\n return 'readyForPickup';\r\n case 4:\r\n return 'pickedUp';\r\n default:\r\n return 'processing';\r\n }\r\n } else if (deliveryType === 'ship') {\r\n switch (statusValue) {\r\n case 3:\r\n return 'processing';\r\n case 4:\r\n return 'shipped';\r\n default:\r\n return 'processing';\r\n }\r\n } else if (deliveryType === 'carryOut') {\r\n return 'processing';\r\n } else {\r\n return 'unknown';\r\n }\r\n};\r\n\r\nexport type ITrackingId = string | 'unknown';\r\nexport type IAddressId = string | 'unknown';\r\n\r\nexport interface IGroupData {\r\n deliveryType: IDeliveryType;\r\n salesStatus: ISalesStatusCode;\r\n addressId: IAddressId | 'unknown';\r\n trackingId: ITrackingId | 'unknown';\r\n count: number;\r\n salesLines: ISalesLine[];\r\n}\r\n\r\nexport const groupSalesLines = (salesLines: ISalesLine[]): IGroupData[] => {\r\n const getGroupByDeliveryType = (items: ISalesLine[]) => groupBy(items, item => item.data.deliveryType);\r\n const getGroupBySalesStatusCode = (items: ISalesLine[]) => groupBy(items, item => item.data.salesStatus);\r\n const getGroupByTrackingId = (items: ISalesLine[]) => groupBy(items, item => item.data.salesLine.TrackingId || 'unknown');\r\n const getGroupByAddressId = (items: ISalesLine[]) =>\r\n groupBy(items, item => (item.data.salesLine.ShippingAddress && item.data.salesLine.ShippingAddress.RecordId) || 'unknown');\r\n\r\n const flatGroup: IGroupData[] = [];\r\n\r\n // 1) Group by delivery type\r\n // @ts-ignore\r\n const group = getGroupByDeliveryType(salesLines);\r\n\r\n // 2) Group by sales status code\r\n Object.entries(group).forEach(([deliveryType, groupByDeliveryType]) => {\r\n // @ts-ignore\r\n group[deliveryType] = getGroupBySalesStatusCode(groupByDeliveryType);\r\n\r\n Object.entries(group[deliveryType]).forEach(([salesStatus, groupBySalesStatusCode]) => {\r\n // @ts-ignore 3) Group by address id\r\n groupBySalesStatusCode[salesStatus] = getGroupByAddressId(groupBySalesStatusCode);\r\n\r\n // @ts-ignore\r\n Object.entries(groupBySalesStatusCode[salesStatus]).forEach(([addressId, groupByAddressId]) => {\r\n // @ts-ignore 4) Group by address id\r\n groupByAddressId[addressId] = getGroupByTrackingId(groupByAddressId);\r\n\r\n // @ts-ignore\r\n Object.entries(groupByAddressId[addressId]).forEach(([trackingId, groupByTrackingId]) => {\r\n flatGroup.push({\r\n // @ts-ignore\r\n deliveryType,\r\n // @ts-ignore\r\n salesStatus,\r\n addressId,\r\n trackingId,\r\n // @ts-ignore\r\n count: countItems(groupByTrackingId.map(item => item.data.salesLine)),\r\n // @ts-ignore\r\n salesLines: groupByTrackingId\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n return flatGroup;\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 { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISalesLine } from './get-sales-line';\r\nimport { groupSalesLines, IDeliveryType, ISalesStatusCode } from './utilities';\r\n\r\nexport interface IGroupDelivery {\r\n deliveryProps: INodeProps;\r\n heading: React.ReactNode;\r\n count: React.ReactNode;\r\n processing: React.ReactNode;\r\n trackingInfo: React.ReactNode;\r\n address: React.ReactNode;\r\n}\r\n\r\nexport interface IGroup {\r\n groupProps: INodeProps;\r\n salesLinesProps: INodeProps;\r\n delivery: IGroupDelivery;\r\n salesLines: ISalesLine[];\r\n // row data\r\n data: {\r\n count: number;\r\n deliveryType: IDeliveryType;\r\n salesStatus: ISalesStatusCode;\r\n };\r\n}\r\n\r\nexport interface IGroupsInput {\r\n moduleName: string;\r\n salesLines: ISalesLine[];\r\n resources: {\r\n orderItemLabel: string;\r\n orderItemsLabel: string;\r\n shippingItemToOBOCustomerLabel?: string;\r\n };\r\n isOboRequest?: boolean;\r\n customerName?: string;\r\n}\r\n\r\nexport interface IGroups {\r\n groupsProps: INodeProps;\r\n groups: IGroup[];\r\n}\r\n\r\nexport const getGroups = ({\r\n moduleName,\r\n salesLines,\r\n customerName,\r\n isOboRequest,\r\n resources: { orderItemLabel, orderItemsLabel, shippingItemToOBOCustomerLabel }\r\n}: IGroupsInput): IGroups => {\r\n const groups = groupSalesLines(salesLines).map(group => {\r\n const { deliveryType, salesStatus, count, salesLines: _salesLines } = group;\r\n const itemLabel = count === 1 ? orderItemLabel : orderItemsLabel;\r\n const groupProps = { className: `${moduleName}__group deliveryType-${deliveryType} salesStatus-${salesStatus}` };\r\n const salesLinesProps = { className: `${moduleName}__sales-lines` };\r\n const address = _salesLines[0].address;\r\n const trackingInfo = _salesLines[0].trackingInfo;\r\n const isProcessing = _salesLines[0].data.salesStatus === 'processing';\r\n const delivery = {\r\n deliveryProps: { className: `${moduleName}__group-delivery` },\r\n heading: (\r\n \r\n {isProcessing ? _salesLines[0].deliveryType : _salesLines[0].salesStatus}\r\n \r\n ),\r\n processing: isProcessing ? (\r\n {_salesLines[0].salesStatus}\r\n ) : (\r\n undefined\r\n ),\r\n count: {`(${count} ${itemLabel})`},\r\n trackingInfo,\r\n address\r\n };\r\n return {\r\n groupProps,\r\n salesLinesProps,\r\n delivery,\r\n salesLines: _salesLines,\r\n data: {\r\n count,\r\n deliveryType,\r\n salesStatus\r\n }\r\n };\r\n });\r\n\r\n return {\r\n groupsProps: { className: `${moduleName}__groups` },\r\n groups\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 { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { ChannelIdentity, Customer, OrderOriginator, OrderShipments, OrgUnitLocation, SalesOrder } from '@msdyn365-commerce/retail-proxy';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { countItems, IModuleComponentProps, IPriceContext } from './utilities';\r\nimport { isOboRequest } from '@msdyn365-commerce/core';\r\n\r\nexport interface IOrderInformationInputResources {\r\n receiptEmailMessage?: string;\r\n orderItemLabel: string;\r\n orderItemsLabel: string;\r\n processingLabel: string;\r\n orderIdLabel: string;\r\n confirmationIdLabel: string;\r\n trackingLabel: string;\r\n trackingAriaLabel: string;\r\n trackingComingSoonLabel: string;\r\n posChannelNameText?: string;\r\n onlineStoreChannelNameText?: string;\r\n orderPlacedByFullText?: string;\r\n orderPlacedByYouText?: string;\r\n orderOnBehalfOfText?: string;\r\n}\r\nexport interface IOrderInformationInput {\r\n moduleName: string;\r\n channelReferenceId?: string;\r\n channelName?: string;\r\n channelAddress?: string;\r\n showChannelInfo?: boolean;\r\n receiptEmail?: string;\r\n createdDate?: string;\r\n amount?: number;\r\n priceContext: IPriceContext;\r\n salesId?: string;\r\n hasTrackingInfo?: boolean;\r\n count?: number;\r\n resources: IOrderInformationInputResources;\r\n originator?: OrderOriginator;\r\n isYou?: [boolean, boolean];\r\n isB2bAdmin?: boolean;\r\n isOnlineStore?: boolean;\r\n priceCurrency?: string;\r\n}\r\n\r\nexport interface IOrderInformation {\r\n orderInformationProps: INodeProps;\r\n channelName: React.ReactNode;\r\n channelAddress: React.ReactNode;\r\n placedBy?: React.ReactNode;\r\n salesId: React.ReactNode;\r\n receiptEmail: React.ReactNode;\r\n createdDate: React.ReactNode;\r\n count: React.ReactNode;\r\n amount: React.ReactNode;\r\n channelReferenceId: React.ReactNode;\r\n}\r\n\r\nconst callCenterChannelTypeValue = 4;\r\n\r\nconst getPlacedBy = (\r\n moduleName: string,\r\n originator: OrderOriginator | undefined,\r\n isYou: [boolean, boolean] | undefined,\r\n orderPlacedByFullText: string | undefined,\r\n orderPlacedByYouText: string | undefined,\r\n orderOnBehalfOfText: string | undefined\r\n): React.ReactNode | undefined => {\r\n let placedByNode: React.ReactNode | undefined;\r\n if (originator) {\r\n const placedByName =\r\n originator.StaffId && originator.StaffName\r\n ? originator.StaffName\r\n : originator.CustomerId && originator.CustomerName\r\n ? originator.CustomerName\r\n : '-';\r\n const onBehalfOfText = originator.StaffId && originator.StaffName && originator.CustomerId && originator.CustomerName;\r\n placedByNode = (\r\n
\r\n {orderPlacedByFullText} {placedByName} {isYou && isYou[0] && ` ${orderPlacedByYouText}`}\r\n {onBehalfOfText && (\r\n
\r\n {orderOnBehalfOfText} {`${originator.CustomerName}`}\r\n {isYou && isYou[1] && ` ${orderPlacedByYouText}`}\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n return placedByNode;\r\n};\r\n\r\nexport const getOrderInformation = ({\r\n moduleName,\r\n channelReferenceId,\r\n channelName,\r\n channelAddress,\r\n showChannelInfo,\r\n receiptEmail,\r\n createdDate,\r\n amount,\r\n priceContext,\r\n salesId,\r\n count,\r\n originator,\r\n isYou,\r\n priceCurrency,\r\n resources: {\r\n receiptEmailMessage,\r\n orderItemLabel,\r\n orderItemsLabel,\r\n processingLabel,\r\n orderIdLabel,\r\n confirmationIdLabel,\r\n posChannelNameText,\r\n onlineStoreChannelNameText,\r\n orderPlacedByFullText,\r\n orderPlacedByYouText,\r\n orderOnBehalfOfText\r\n }\r\n}: IOrderInformationInput): IOrderInformation => ({\r\n orderInformationProps: { className: `${moduleName}__order-information` },\r\n channelName:\r\n showChannelInfo &&\r\n channelName &&\r\n (channelAddress ? (\r\n {`${posChannelNameText} ${channelName}`}\r\n ) : (\r\n {onlineStoreChannelNameText}\r\n )),\r\n channelAddress: showChannelInfo && channelAddress && (\r\n {channelAddress}\r\n ),\r\n placedBy: getPlacedBy(moduleName, originator, isYou, orderPlacedByFullText, orderPlacedByYouText, orderOnBehalfOfText),\r\n salesId: {`${orderIdLabel} ${salesId || processingLabel}`},\r\n receiptEmail: receiptEmail && (\r\n \r\n {receiptEmailMessage}\r\n {receiptEmail}\r\n \r\n ),\r\n createdDate: {createdDate},\r\n count: count !== undefined && count > 0 && (\r\n \r\n {count === 1 ? `${count} ${orderItemLabel}` : `${count} ${orderItemsLabel}`}\r\n \r\n ),\r\n amount: (amount || amount === 0) && (\r\n \r\n ),\r\n channelReferenceId: channelReferenceId && (\r\n {`${confirmationIdLabel} ${channelReferenceId}`}\r\n )\r\n});\r\n\r\ninterface IProps extends IModuleComponentProps {\r\n resources: IOrderInformationInputResources;\r\n customer?: Customer;\r\n}\r\n\r\n/**\r\n * Retrieves channel is online store or not.\r\n * @param channelTypeValue - The channel type.\r\n * @param channelAddress - Channel Address.\r\n * @returns {Boolean} that indicates that the channel is in the online store.\r\n */\r\nexport const isOnlineStoreChannel = (channelTypeValue: number | undefined, channelAddress: string | undefined): boolean => {\r\n return channelTypeValue !== callCenterChannelTypeValue && !channelAddress;\r\n};\r\n\r\nexport const getOrderChannelTypeValue: (order: SalesOrder | OrderShipments, channelIdentities?: ChannelIdentity[]) => number | undefined = (\r\n order: SalesOrder | OrderShipments,\r\n channelIdentities?: ChannelIdentity[]\r\n) => {\r\n const orderChannel = channelIdentities?.find(channel => {\r\n return channel.RecordId === order.ChannelId;\r\n });\r\n\r\n const channelType = orderChannel?.ChannelType.Value;\r\n return channelType;\r\n};\r\n\r\n/**\r\n * Retrieves order channel address.\r\n * @param order - Order info.\r\n * @param orgUnitLocations - OrgUnitLocation data.\r\n * @returns String with the address of the channel or an empty string.\r\n */\r\nexport const getOrderChannelAddress: (order: SalesOrder | OrderShipments, orgUnitLocations?: OrgUnitLocation[]) => string = (\r\n order: SalesOrder | OrderShipments,\r\n orgUnitLocations?: OrgUnitLocation[]\r\n) => {\r\n const orderOrgUnitLocation = orgUnitLocations?.find(location => {\r\n return location.ChannelId === order.ChannelId;\r\n });\r\n\r\n const channelAddress = orderOrgUnitLocation?.Address ?? '';\r\n return channelAddress;\r\n};\r\n\r\n/**\r\n * @param {Customer} customer A current customer.\r\n * @param {OrderOriginator} originator The order originator.\r\n * */\r\n\r\nexport const getOrderInfomationInput = (\r\n props: IProps,\r\n moduleName: string,\r\n order: SalesOrder | OrderShipments,\r\n priceContext: IPriceContext,\r\n channelIdentities?: ChannelIdentity[],\r\n customer?: Customer,\r\n originator?: OrderOriginator,\r\n orgUnitLocations?: OrgUnitLocation[],\r\n showChannelInfo?: boolean\r\n): IOrderInformationInput => {\r\n const {\r\n resources,\r\n context: {\r\n request: {\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = props;\r\n\r\n // @ts-ignore OrderShipments doesnt has ChannelId\r\n const showTrackingInfo = !!order.ChannelId && order.ChannelId === channelId;\r\n\r\n const locale = get(props, 'context.request.locale') || 'en-US';\r\n const count = order.SalesLines && order.SalesLines.length ? countItems(order.SalesLines) : 0;\r\n\r\n const channelTypeValue = getOrderChannelTypeValue(order, channelIdentities);\r\n const channelAddress = getOrderChannelAddress(order, orgUnitLocations);\r\n const isYou =\r\n !isOboRequest(props.context.request) &&\r\n originator?.CustomerId &&\r\n originator?.CustomerName &&\r\n !originator?.StaffId &&\r\n !originator?.StaffName &&\r\n customer?.AccountNumber === originator?.CustomerId\r\n ? true\r\n : false;\r\n const isYouObo = !isYou && !isOboRequest(props.context.request);\r\n\r\n const orderChannel = channelIdentities\r\n ? channelIdentities.filter(channel => {\r\n return channel.RecordId === order.ChannelId;\r\n })\r\n : '';\r\n // const orderOrgUnitLocation = orgUnitLocations\r\n // ? orgUnitLocations.filter(location => {\r\n // return location.ChannelId === order.ChannelId;\r\n // })\r\n // : '';\r\n\r\n return {\r\n moduleName: moduleName,\r\n createdDate: (order.CreatedDateTime && new Date(order.CreatedDateTime).toLocaleDateString(locale)) || '',\r\n salesId: order.SalesId,\r\n priceCurrency: order.CurrencyCode,\r\n originator: originator,\r\n isYou: [isYou, isYouObo],\r\n isB2bAdmin: customer?.IsB2bAdmin,\r\n showChannelInfo: showChannelInfo,\r\n // @ts-ignore OrderShipments doesnt has ReceiptEmail\r\n receiptEmail: order.ReceiptEmail,\r\n channelReferenceId: order.ChannelReferenceId,\r\n channelName: orderChannel && orderChannel.length > 0 ? orderChannel[0].Name : '',\r\n // channelAddress: orderOrgUnitLocation && orderOrgUnitLocation.length > 0 ? orderOrgUnitLocation[0].Address : '',\r\n channelAddress: channelAddress,\r\n amount: order.TotalAmount || 0,\r\n priceContext: priceContext,\r\n count,\r\n resources,\r\n isOnlineStore: isOnlineStoreChannel(channelTypeValue, channelAddress)\r\n };\r\n};\r\n","/* eslint-disable no-redeclare */\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 { Address as AddressRetail } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { IDeliveryType } from './utilities';\r\n\r\nexport type addressType = 'store' | 'ship';\r\n\r\nexport interface IShippingAddressProps {\r\n moduleName: string;\r\n address: AddressRetail;\r\n deliveryType: IDeliveryType;\r\n resource: {\r\n shipToLabel: string;\r\n storeLabel: string;\r\n phoneLabel: string;\r\n phoneAriaLabel: string;\r\n };\r\n}\r\n\r\nconst Address: React.SFC = ({\r\n moduleName,\r\n address,\r\n deliveryType,\r\n resource: { shipToLabel, storeLabel, phoneLabel, phoneAriaLabel }\r\n}) => (\r\n
\r\n
{deliveryType === 'pickUp' ? storeLabel : shipToLabel}
\r\n {address.Name && {address.Name}}\r\n {address.FullAddress && {address.FullAddress}}\r\n\r\n {/* TODO: Address format is based on country format\r\n {address.Name && {address.Name}}\r\n {address.Street && {address.Street} }\r\n {address.City && {address.City}}\r\n {address.State && {`, ${address.State}`}}\r\n {address.ZipCode && {` ${address.ZipCode}`}}\r\n {address.Phone && (\r\n {phoneLabel}\r\n \r\n {address.Phone}\r\n \r\n \r\n )} */}\r\n
\r\n);\r\n\r\nexport default React.memo(Address);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\r\nimport { Image } from '@msdyn365-commerce/core';\r\nimport { SalesLine, Shipment, SimpleProduct, ProductCatalog } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport Address from './address';\r\nimport LabelComponent from './label';\r\nimport { defaultImageSettings, getSalesStatusCode, IDeliveryType, IModuleComponentProps, ISalesStatusCode } from './utilities';\r\n\r\nexport type ISalesStatusStringMap = {\r\n [x in ISalesStatusCode]: string | undefined;\r\n};\r\n\r\nexport type IDeliveryTypeStringMap = {\r\n [x in IDeliveryType]: string | undefined;\r\n};\r\n\r\nexport interface ISalesLineResources {\r\n productDimensionTypeSize: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeStyle: string;\r\n salesLineQuantityText: string;\r\n configString: string;\r\n shipToLabel: string;\r\n storeLabel: string;\r\n phoneLabel: string;\r\n phoneAriaLabel: string;\r\n buyItAgainAriaLabel: string;\r\n buyItAgainLabel: string;\r\n orderStatusReadyForPickup: string;\r\n orderStatusPickedUp: string;\r\n orderStatusShipped: string;\r\n orderStatusCanceled: string;\r\n orderStatusProcessing: string;\r\n pickedUpSalesLines: string;\r\n deliveredSalesLines: string;\r\n carryOutSalesLines: string;\r\n trackingLabel: string;\r\n trackingAriaLabel: string;\r\n trackingComingSoonLabel: string;\r\n discountStringText: string;\r\n}\r\n\r\nexport interface IGetSalesLineInput {\r\n moduleName: string;\r\n moduleComponentProps: IModuleComponentProps;\r\n product: SimpleProduct;\r\n shipment?: Shipment;\r\n salesLine: SalesLine;\r\n isCurrentChannel: boolean;\r\n resources: ISalesLineResources;\r\n imageOnly?: boolean;\r\n catalogs?: ProductCatalog[];\r\n priceCurrency?: string;\r\n}\r\n\r\nexport interface ISalesLine {\r\n salesLineProps: INodeProps;\r\n salesLine: React.ReactNode;\r\n address?: React.ReactNode;\r\n buyAgainButton?: React.ReactNode;\r\n salesStatus: React.ReactNode;\r\n deliveryType: React.ReactNode;\r\n trackingInfo: React.ReactNode;\r\n\r\n // row data\r\n data: {\r\n salesLine: SalesLine;\r\n product: SimpleProduct;\r\n shipment?: Shipment;\r\n deliveryType: IDeliveryType;\r\n productUrl: string | undefined;\r\n salesStatus: ISalesStatusCode;\r\n };\r\n}\r\nenum deliveryTypeEnum {\r\n ship = 'ship',\r\n email = 'email',\r\n carryOut = 'carryOut',\r\n pickUp = 'pickUp'\r\n}\r\n\r\nexport const getDeliveryTypeClassName = (\r\n deliveryType: string,\r\n deliveryTypeStringMap: IDeliveryTypeStringMap,\r\n retailMultiplePickupOption?: boolean\r\n): string | undefined => {\r\n switch (deliveryType) {\r\n case deliveryTypeEnum.ship:\r\n case deliveryTypeEnum.carryOut:\r\n case deliveryTypeEnum.email:\r\n return deliveryType;\r\n default:\r\n return deliveryTypeEnum.pickUp;\r\n }\r\n};\r\n// tslint:disable-next-line:max-func-body-length\r\nexport const getSalesLine = ({\r\n moduleName,\r\n moduleComponentProps: {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n config: { imageSettings }\r\n },\r\n product,\r\n shipment,\r\n salesLine,\r\n isCurrentChannel,\r\n imageOnly,\r\n resources: {\r\n productDimensionTypeSize: sizeString,\r\n productDimensionTypeColor: colorString,\r\n productDimensionTypeStyle: styleString,\r\n salesLineQuantityText: quantityDisplayString,\r\n configString,\r\n shipToLabel,\r\n storeLabel,\r\n phoneLabel,\r\n phoneAriaLabel,\r\n buyItAgainLabel,\r\n buyItAgainAriaLabel,\r\n orderStatusReadyForPickup,\r\n orderStatusProcessing,\r\n orderStatusShipped,\r\n orderStatusPickedUp,\r\n orderStatusCanceled,\r\n pickedUpSalesLines,\r\n deliveredSalesLines,\r\n carryOutSalesLines,\r\n trackingLabel,\r\n trackingAriaLabel,\r\n trackingComingSoonLabel,\r\n discountStringText\r\n }\r\n}: IGetSalesLineInput): ISalesLine => {\r\n const salesStatusStringMap: ISalesStatusStringMap = {\r\n canceled: orderStatusCanceled,\r\n readyForPickup: orderStatusReadyForPickup,\r\n pickedUp: orderStatusPickedUp,\r\n processing: orderStatusProcessing,\r\n shipped: orderStatusShipped,\r\n unknown: undefined\r\n };\r\n\r\n const deliveryTypeStringMap: IDeliveryTypeStringMap = {\r\n pickUp: pickedUpSalesLines,\r\n ship: deliveredSalesLines,\r\n carryOut: carryOutSalesLines\r\n };\r\n\r\n const gridSettings = context.request.gridSettings;\r\n const pickupDeliveryModeCode = context.request.channel && context.request.channel.PickupDeliveryModeCode;\r\n const productUrl = getProductUrlSync(product, context.actionContext, undefined);\r\n const deliveryType =\r\n !!pickupDeliveryModeCode && pickupDeliveryModeCode === salesLine.DeliveryMode\r\n ? 'pickUp'\r\n : !!salesLine.DeliveryMode\r\n ? 'ship'\r\n : 'carryOut';\r\n const salesStatus = getSalesStatusCode(deliveryType, salesLine.SalesStatusValue);\r\n const salesStatusString = salesStatusStringMap[salesStatus];\r\n // const salesStatusComp = salesStatusString && ;\r\n const deliveryTypeString = deliveryTypeStringMap[deliveryType];\r\n const deliveryTypeClass = getDeliveryTypeClassName(deliveryType, deliveryTypeStringMap);\r\n const deliveryTypeComp = deliveryTypeString && ;\r\n const salesStatusComp = salesStatusString && (\r\n \r\n );\r\n\r\n const trackingInfo = isCurrentChannel && deliveryType === 'ship' && (\r\n \r\n {trackingLabel}\r\n {shipment ? (\r\n \r\n {shipment.TrackingNumber}\r\n \r\n ) : (\r\n <>{trackingComingSoonLabel}\r\n )}\r\n \r\n );\r\n\r\n return {\r\n data: {\r\n salesLine,\r\n productUrl,\r\n deliveryType,\r\n salesStatus,\r\n product,\r\n shipment\r\n },\r\n salesLineProps: { className: `${moduleName}__sales-line` },\r\n salesLine: imageOnly ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \r\n ),\r\n address: salesLine.ShippingAddress && (\r\n \r\n ),\r\n deliveryType: deliveryTypeComp,\r\n salesStatus: salesStatusComp,\r\n trackingInfo,\r\n buyAgainButton: isCurrentChannel && (\r\n \r\n {buyItAgainLabel}\r\n \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 { IActionContext, IGridSettings, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { OrderShipments, SalesLine, SalesOrder, Shipment, SimpleProduct, ProductCatalog } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSalesLine, ISalesLine, ISalesLineResources } from './get-sales-line';\r\nimport { IModuleComponentProps, IPriceContext } from './utilities';\r\n\r\nexport interface IGetSalesLinesInput {\r\n moduleName: string;\r\n moduleComponentProps: IModuleComponentProps;\r\n isCurrentChannel: boolean;\r\n\r\n salesLines: SalesLine[];\r\n products: SimpleProduct[];\r\n shipments?: Shipment[];\r\n priceContext: IPriceContext;\r\n resources: ISalesLineResources;\r\n actionContext: IActionContext;\r\n gridSettings: IGridSettings;\r\n imageSettings?: IImageSettings;\r\n imageOnly?: boolean;\r\n catalogs?: ProductCatalog[];\r\n priceCurrency?: string;\r\n}\r\n\r\nexport const getSalesLines = ({\r\n moduleName,\r\n moduleComponentProps,\r\n salesLines,\r\n products,\r\n shipments,\r\n resources,\r\n isCurrentChannel,\r\n imageOnly,\r\n catalogs,\r\n priceCurrency\r\n}: IGetSalesLinesInput): ISalesLine[] => {\r\n return salesLines.map(salesLine => {\r\n const product = products.find(_product => _product.RecordId === salesLine.ProductId) || ({} as SimpleProduct);\r\n const shipment = shipments && shipments.find(_shipment => _shipment.ShipmentId === salesLine.TrackingId);\r\n return getSalesLine({\r\n moduleName,\r\n moduleComponentProps,\r\n product,\r\n shipment,\r\n salesLine,\r\n isCurrentChannel,\r\n resources,\r\n imageOnly,\r\n catalogs,\r\n priceCurrency\r\n });\r\n });\r\n};\r\n\r\ninterface IProps extends IModuleComponentProps {\r\n resources: ISalesLineResources;\r\n}\r\n\r\nexport const getSalesLinesInput = (\r\n props: IProps,\r\n moduleName: string,\r\n order: SalesOrder | OrderShipments,\r\n products: SimpleProduct[],\r\n priceContext: IPriceContext,\r\n catalogs?: ProductCatalog[]\r\n): IGetSalesLinesInput | undefined => {\r\n if (!order || !order.SalesLines || !order.SalesLines.length) {\r\n return;\r\n }\r\n const {\r\n resources,\r\n config: { imageSettings },\r\n context: {\r\n actionContext,\r\n request: {\r\n gridSettings,\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = props;\r\n\r\n const isCurrentChannel = !order.ChannelId || order.ChannelId === channelId;\r\n\r\n return {\r\n moduleName,\r\n moduleComponentProps: props,\r\n isCurrentChannel,\r\n salesLines: order.SalesLines,\r\n priceCurrency: order.CurrencyCode,\r\n products,\r\n shipments: order.Shipments,\r\n priceContext: priceContext,\r\n resources,\r\n actionContext: actionContext,\r\n gridSettings: gridSettings!,\r\n imageSettings: imageSettings,\r\n catalogs\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 { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport {\r\n ChannelIdentity,\r\n Customer,\r\n OrderOriginator,\r\n OrderShipments,\r\n OrgUnitLocation,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { getGroups, IGroups } from '../common/get-groups';\r\nimport { getOrderInfomationInput, getOrderInformation, IOrderInformation } from '../common/get-order-information';\r\nimport { getSalesLines, getSalesLinesInput } from '../common/get-sales-lines';\r\nimport { IMandsOrderHistoryData } from '../mands-order-history.data';\r\nimport { IMandsOrderHistoryProps } from '../mands-order-history.props.autogenerated';\r\n\r\nexport interface ISalesOrderProps extends IMandsOrderHistoryProps {\r\n salesOrder: OrderShipments;\r\n products: SimpleProduct[];\r\n channelIdentities?: ChannelIdentity[];\r\n orgUnitLocations?: OrgUnitLocation[];\r\n showChannelInfo?: boolean;\r\n customer?: Customer;\r\n originator?: OrderOriginator;\r\n}\r\n\r\nexport interface ISalesOrder {\r\n salesOrderProps: INodeProps;\r\n orderInfomation: IOrderInformation;\r\n groups?: IGroups;\r\n orderDetailsLink: React.ReactNode;\r\n}\r\n\r\nexport const getSalesOrder = (input: ISalesOrderProps): ISalesOrder => {\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n products,\r\n salesOrder,\r\n showChannelInfo,\r\n channelIdentities,\r\n orgUnitLocations,\r\n customer,\r\n originator,\r\n resources: { freePriceText, detailsAriaLabel, detailsLabel, orderItemLabel, orderItemsLabel },\r\n context: { actionContext }\r\n } = input;\r\n\r\n const moduleName = 'ms-order-history';\r\n\r\n const priceContext = {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n freePriceText\r\n };\r\n\r\n const _getorderDetailsPageUrl = (): string => {\r\n const url = getUrlSync('orderDetails', actionContext) || '';\r\n const separator = url.includes('?') ? '&' : '?';\r\n if (salesOrder.SalesId) {\r\n // Redirect with sales order sales id\r\n return `${url}${separator}salesId=${salesOrder.SalesId}`;\r\n } else {\r\n // Redirect with sales order transaction id\r\n return `${url}${separator}transactionId=${salesOrder.TransactionId}`;\r\n }\r\n };\r\n\r\n const salesOrderProps = { className: 'ms-order-history__sales-order', key: salesOrder.SalesId || salesOrder.TransactionId };\r\n\r\n const orderInfomationInput = getOrderInfomationInput(\r\n input,\r\n moduleName,\r\n salesOrder,\r\n priceContext,\r\n channelIdentities,\r\n customer,\r\n originator,\r\n orgUnitLocations,\r\n showChannelInfo\r\n );\r\n const orderInfomation = getOrderInformation(orderInfomationInput);\r\n\r\n const salesLinesInput = products && getSalesLinesInput(input, moduleName, salesOrder, products, priceContext);\r\n const salesLines = salesLinesInput && getSalesLines({ ...salesLinesInput, imageOnly: true });\r\n\r\n const groups =\r\n salesLines &&\r\n getGroups({\r\n moduleName,\r\n salesLines,\r\n resources: { orderItemLabel, orderItemsLabel }\r\n });\r\n\r\n const orderDetailsLink = (\r\n \r\n {detailsLabel}\r\n \r\n );\r\n\r\n return {\r\n salesOrderProps,\r\n orderInfomation,\r\n groups,\r\n orderDetailsLink\r\n };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICommerceApiSettings,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { OrderOriginator, SalesOrdersDataActions, OrderOriginatorSearchCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Action input.\r\n */\r\nexport class GetOrderOriginatorsInput implements IActionInput {\r\n public searchCriteria: OrderOriginatorSearchCriteria = {};\r\n\r\n private readonly apiSettings: ICommerceApiSettings;\r\n\r\n public constructor(transactionIds: string[] | undefined, salesIds: string[] | undefined, apiSettings: ICommerceApiSettings) {\r\n this.searchCriteria = {\r\n TransactionIds: transactionIds,\r\n SalesIds: salesIds\r\n };\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n /**\r\n * GetCacheKey.\r\n * @returns - String.\r\n */\r\n public getCacheKey = (): string =>\r\n buildCacheKey(`OrderOriginators-${this.searchCriteria.TransactionIds}-${this.searchCriteria.SalesIds}`, this.apiSettings);\r\n\r\n /**\r\n * GetCacheObjectType.\r\n * @returns - String.\r\n */\r\n public getCacheObjectType = (): string => 'OrderOriginators';\r\n\r\n /**\r\n * DataCacheType.\r\n * @returns - String.\r\n */\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\n/**\r\n * Get order originators by transaction ids or sales ids action.\r\n * @param input - GetOrderOriginators input.\r\n * @param context - Channel context.\r\n * @returns - Originators array.\r\n */\r\nexport async function getOriginatorsAction(input: GetOrderOriginatorsInput, context: IActionContext): Promise {\r\n return SalesOrdersDataActions.getOrderOriginatorsAsync({ callerContext: context }, input.searchCriteria);\r\n}\r\n\r\n/**\r\n * Creates the input required to make the retail api call.\r\n * @param inputData -- InputData as ICreateActionContext.\r\n * @returns Action Input.\r\n */\r\nexport const createSalesOrderOriginatorsInput = (inputData: ICreateActionContext) => {\r\n const { salesId, transactionId } = inputData.requestContext.query ?? {};\r\n\r\n if (salesId) {\r\n return new GetOrderOriginatorsInput(undefined, [salesId], inputData.requestContext.apiSettings);\r\n } else if (transactionId) {\r\n return new GetOrderOriginatorsInput([transactionId], undefined, inputData.requestContext.apiSettings);\r\n }\r\n\r\n throw new Error('createSalesOrderOriginatorsInput - No salesId or transactionId provided.');\r\n};\r\n\r\n/**\r\n * GetSalesOrderOriginatorsActionDataAction.\r\n * @returns -- IObservableAction.\r\n */\r\nexport const getSalesOrderOriginatorsActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/order-management/get-sales-order-originators',\r\n action: getOriginatorsAction as IAction,\r\n input: createSalesOrderOriginatorsInput\r\n});\r\n\r\nexport default getSalesOrderOriginatorsActionDataAction;\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 classname from 'classnames';\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { Button, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\n\r\nimport LabelComponent from './common/label';\r\nimport {\r\n getSalesOrderHistoryWithHydrationsAction,\r\n GetSalesOrderHistoryWithHydrationsInput,\r\n IOrderHistory,\r\n IPaging\r\n} from './actions/get-order-shipment-history';\r\nimport { getSalesOrder, ISalesOrder } from './components/get-sales-order';\r\nimport { IMandsOrderHistoryData } from './mands-order-history.data';\r\nimport { IMandsOrderHistoryProps } from './mands-order-history.props.autogenerated';\r\nimport { getOriginatorsAction, GetOrderOriginatorsInput } from './actions/get-sales-order-originators';\r\nimport { OrderOriginator, OrderShipments } from '@msdyn365-commerce/retail-proxy';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport * from './common/get-groups';\r\nexport * from './common/get-order-information';\r\nexport * from './common/get-sales-line';\r\nexport * from './common/get-sales-lines';\r\nexport * from './common/utilities';\r\nexport * from './components/get-sales-order';\r\n\r\nexport * from './common/get-order-information';\r\nexport * from './components/get-sales-order';\r\n\r\nexport interface IHeader {\r\n headerProps: INodeProps;\r\n heading: React.ReactNode;\r\n orderCountLabel?: React.ReactNode;\r\n}\r\n\r\nexport interface IList {\r\n listProps: INodeProps;\r\n salesOrders: ISalesOrder[];\r\n}\r\n\r\nexport interface IOrderHistoryViewState {\r\n isDataReady: boolean;\r\n hasError: boolean;\r\n isLoading: boolean;\r\n isShowMoreButton: boolean;\r\n errorCode?: string;\r\n errorMessage?: string;\r\n}\r\n\r\nexport interface IOrderHistoryViewProps extends IMandsOrderHistoryProps {\r\n orderHistory: IOrderHistory;\r\n orderHistoryProps: IModuleProps;\r\n alert?: React.ReactNode;\r\n loading?: React.ReactNode;\r\n emptyMessage?: React.ReactNode;\r\n header: IHeader;\r\n backToShoppingLink?: React.ReactNode;\r\n list?: IList;\r\n moreButton?: React.ReactNode;\r\n viewState: IOrderHistoryViewState;\r\n}\r\n\r\n/**\r\n *\r\n * OrderHistory component\r\n * @extends {React.Component>}\r\n */\r\n@observer\r\nclass OrderHistory extends React.Component> {\r\n @observable private orderHistory: IOrderHistory;\r\n @observable private viewState: IOrderHistoryViewState;\r\n private pageSize: number;\r\n private paging: IPaging;\r\n private originatorList!: OrderOriginator[];\r\n\r\n constructor(props: IMandsOrderHistoryProps) {\r\n super(props);\r\n this.orderHistory = {\r\n salesOrders: [],\r\n products: []\r\n };\r\n this.viewState = {\r\n isDataReady: false,\r\n hasError: false,\r\n isShowMoreButton: (this.props.config.pageSize || 0) > 0,\r\n isLoading: false\r\n };\r\n this.pageSize = this.props.config.pageSize || 10;\r\n this.paging = {\r\n top: this.pageSize,\r\n skip: 0\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.getOrderHistory()\r\n .then(() => {\r\n this.viewState.isDataReady = true;\r\n })\r\n .catch(ex => {\r\n this.viewState.hasError = true;\r\n });\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n config: { heading, className, showChannelInfo, shouldShowCount },\r\n resources: {\r\n genericErrorMessage,\r\n noOrderHistoryLable,\r\n moreButtonText,\r\n backToShopping,\r\n orderCountLabel,\r\n ordersCountLabel,\r\n loadingLabel\r\n }\r\n } = this.props;\r\n const { salesOrders, products } = this.orderHistory;\r\n const { isDataReady, hasError, isShowMoreButton, isLoading } = this.viewState;\r\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\r\n const channelIdentities = this.props.data.channels.result && this.props.data.channels.result.channelIdentities;\r\n const orgUnitLocations = this.props.data.orgUnitLocations.result && this.props.data.orgUnitLocations.result.orgUnitLocations;\r\n const customer = this.props.data.customerInformation && this.props.data.customerInformation.result;\r\n\r\n let viewProps: IOrderHistoryViewProps = {\r\n ...this.props,\r\n orderHistory: this.orderHistory,\r\n viewState: this.viewState,\r\n orderHistoryProps: {\r\n moduleProps: this.props,\r\n className: classname('ms-order-history', className)\r\n },\r\n header: {\r\n headerProps: { className: 'ms-order-history__header' },\r\n heading: heading && \r\n },\r\n backToShoppingLink: backToShoppingUrl && (\r\n \r\n )\r\n };\r\n\r\n if (hasError) {\r\n viewProps = {\r\n ...viewProps,\r\n alert: \r\n };\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n if (!isDataReady) {\r\n viewProps = {\r\n ...viewProps,\r\n loading: \r\n };\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n if (!salesOrders || salesOrders.length === 0) {\r\n if (this.viewState.errorCode === 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed') {\r\n viewProps = {\r\n ...viewProps,\r\n emptyMessage:

{this.viewState.errorMessage}

\r\n };\r\n } else {\r\n viewProps = {\r\n ...viewProps,\r\n emptyMessage:

{noOrderHistoryLable}

\r\n };\r\n }\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n const _orderCountLabel = salesOrders.length === 1 ? orderCountLabel : ordersCountLabel;\r\n\r\n viewProps = {\r\n ...viewProps,\r\n header: {\r\n ...viewProps.header,\r\n orderCountLabel: shouldShowCount ? (\r\n {`(${salesOrders.length} ${_orderCountLabel})`}\r\n ) : (\r\n undefined\r\n )\r\n },\r\n list: {\r\n listProps: { className: 'ms-order-history__sales-order-list' },\r\n salesOrders: salesOrders.map(salesOrder =>\r\n getSalesOrder({\r\n ...this.props,\r\n products,\r\n salesOrder,\r\n channelIdentities,\r\n orgUnitLocations,\r\n showChannelInfo,\r\n customer,\r\n originator:\r\n this.originatorList &&\r\n this.originatorList.find(\r\n o =>\r\n (salesOrder.SalesId && o.SalesId === salesOrder.SalesId) ||\r\n (salesOrder.TransactionId && o.TransactionId === salesOrder.TransactionId)\r\n )\r\n })\r\n )\r\n },\r\n moreButton: isShowMoreButton && (\r\n \r\n {moreButtonText}\r\n \r\n )\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private onMoreButtonClick = () => {\r\n // tslint:disable-next-line:no-floating-promises\r\n this.getOrderHistory();\r\n };\r\n\r\n private getOrderHistory = async (): Promise => {\r\n const actionContext = this.props.context.actionContext;\r\n const input = new GetSalesOrderHistoryWithHydrationsInput(this.paging, this.props.context.request.apiSettings);\r\n\r\n try {\r\n this.viewState.isLoading = true;\r\n const response = await getSalesOrderHistoryWithHydrationsAction(input, actionContext);\r\n if (response) {\r\n const { products, salesOrders } = response;\r\n this.orderHistory.products.push(...products);\r\n this.orderHistory.salesOrders.push(...salesOrders);\r\n this.viewState.isShowMoreButton =\r\n this.viewState.isShowMoreButton && response.salesOrders.length > 0 && response.salesOrders.length === this.pageSize;\r\n this.paging.skip += this.pageSize;\r\n await this.getOriginator(salesOrders);\r\n }\r\n this.viewState.isLoading = false;\r\n return Promise.resolve();\r\n } catch (error) {\r\n this.viewState.isLoading = false;\r\n if (error?.error?.name === 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed') {\r\n this.viewState.errorCode = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\r\n this.viewState.errorMessage = error.error?.name;\r\n return Promise.reject();\r\n }\r\n\r\n return Promise.reject();\r\n }\r\n };\r\n\r\n private readonly getOriginator = async (salesOrders: OrderShipments[]): Promise => {\r\n if (Msdyn365.isUserTypeB2B(this.props.context.request)) {\r\n const actionContext = this.props.context.actionContext;\r\n let result: OrderOriginator[] | undefined;\r\n try {\r\n const salesIds = salesOrders.map(order => order.SalesId ?? '').filter(id => id !== '');\r\n const transactionIds = salesOrders.map(order => order.TransactionId ?? '').filter(id => id !== '');\r\n const originatorsInput = new GetOrderOriginatorsInput(transactionIds, salesIds, this.props.context.request.apiSettings);\r\n result = await getOriginatorsAction(originatorsInput, actionContext);\r\n } catch (error) {\r\n result = undefined;\r\n }\r\n if (result) {\r\n this.originatorList.push(...result);\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport default OrderHistory;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\nexport interface IOrderSummaryProps {\n subTotalLabel: string;\n shippingLabel: string;\n taxLabel: string;\n orderTotalLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n totalDiscountsLabel: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n id: string;\n typeName: string;\n otherChargeLabel?: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isTaxIncludedInPrice?: boolean;\n isShowTaxBreakup?: boolean;\n customerAccountLabel?: string;\n}\n\nexport interface IOrderSummaryLines {\n subtotal: React.ReactNode;\n shipping?: React.ReactNode;\n otherCharge?: React.ReactNode;\n tax: React.ReactNode;\n orderTotal: React.ReactNode;\n totalDiscounts?: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n customerAccount?: React.ReactNode;\n}\n\ninterface IOrderSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n priceCurrency?: string;\n}\n\ninterface IShippingOrderLine {\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n canShip?: boolean;\n hasDeliveryMethod?: boolean;\n hasShippingMethod?: boolean;\n freightFee?: number;\n}\n\nconst OrderSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel,\n priceCurrency\n}) => {\n return (\n

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

\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport checkoutStateDataAction from './checkout-state-data-action';\n\nexport * from './checkout-state';\nexport * from './checkout-state-data-action';\nexport * from './module-state-manager';\nexport * from './checkout-utilities.data';\n\nexport { checkoutStateDataAction };\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","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport {\r\n ICheckoutDeliveryOption,\r\n ICheckoutDeliveryOptionEdit,\r\n ICheckoutDeliveryOptionsError,\r\n ICheckoutDeliveryOptionsList,\r\n ICheckoutDeliveryOptionsViewProps\r\n} from './mands-checkout-delivery-options';\r\n\r\nconst DeliveryOptionList: React.FC = ({ DeliveryOptionsList, list }) => {\r\n if (!list || list.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {list.map((deliveryOption: ICheckoutDeliveryOptionEdit) => {\r\n return (\r\n \r\n {deliveryOption.radioButton}\r\n {deliveryOption.description}\r\n {deliveryOption.price}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst DeliveryOptionSelected: React.FC = ({ DeliveryOption, description, price }) => {\r\n return (\r\n \r\n {description}\r\n {price}\r\n \r\n );\r\n};\r\n\r\nconst ErrorMessage: React.FC = ({ Error, title, message }) => {\r\n return (\r\n \r\n {title}\r\n {message}\r\n \r\n );\r\n};\r\n\r\nconst CheckoutDeliveryOptionsView: React.FC = props => {\r\n const {\r\n CheckoutDeliveryOptions,\r\n viewState,\r\n deliveryOptions,\r\n deliveryOptionSelected,\r\n errorMessage,\r\n waiting,\r\n saveButton,\r\n editButton,\r\n cancelButton,\r\n checkoutErrorRef\r\n } = props;\r\n\r\n return (\r\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\r\n \r\n {viewState.isLoading && waiting}\r\n {viewState.isError && errorMessage && }\r\n {viewState.isShowList && deliveryOptions && }\r\n {viewState.isShowSelected && deliveryOptionSelected && }\r\n {viewState.isShowSaveButton && saveButton}\r\n {viewState.isShowEditButton && editButton}\r\n {viewState.isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel } from '@msdyn365-commerce/components';\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselViewProps } from './carousel';\n\n/**\n * Returns item slots.\n * @returns Array of item slots.\n * @param props -Props.\n */\nconst retrieveItems = (props: ICarouselViewProps): React.ReactNode[] => {\n let items = [];\n items = props.slots && props.slots.content && props.slots.content.length > 0 ? props.slots.content : [];\n return items;\n};\nconst CarouselView: React.FC = props => (\n \n \n \n);\n\nexport default CarouselView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IActiveImageAdditionalContentViewProps } from '../active-image-utilities';\nimport { IActiveImageViewProps } from './active-image';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IActiveImageAdditionalContentViewProps) => {\n return (\n \n {additionalContent.heading}\n \n {additionalContent.text}\n {additionalContent.links}\n \n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nexport const activeImageView: React.FC = props => {\n return (\n \n \n {props.imageMapper}\n \n {props.title}\n {props.text}\n {props.additionalContent && renderAdditionalContent(props.additionalContent)}\n \n {props.links}\n \n \n \n \n {props.overlay}\n {props.productCard}\n \n \n );\n};\n\nexport default activeImageView;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\n/**\r\n * The payment error.\r\n */\r\nexport interface IPaymentError {\r\n title: string;\r\n message: string;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * The payment error.\r\n * @param param0 - First param.\r\n * @param param0.title - Title.\r\n * @param param0.message - Message.\r\n * @param param0.className - ClassName.\r\n * @returns React node.\r\n */\r\nexport const ErrorComponent: React.FC = ({ title, message, className = 'ms-checkout-payment-instrument' }) => (\r\n
\r\n

{title}

\r\n

{message}

\r\n
\r\n);\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nexport * from './add-payment-form';\r\nexport * from './error';\r\nexport * from './iframe';\r\nexport * from './payment-instrument-message';\r\nexport * from './waiting';\r\nexport * from './with-visibility-observer';\r\nexport * from './interfaces';\r\nexport * from './place-order';\r\nexport * from './empty-active-cart';\r\nexport * from './country-codes';\r\nexport { CartCheckout } from './checkout';\r\nexport * from './get-checkout-return-url';\r\n\r\n/**\r\n * AsyncResultStatusCode.\r\n */\r\nexport enum AsyncResultStatusCode {\r\n LOADING = 'LOADING',\r\n SUCCESS = 'SUCCESS',\r\n FAILED = 'FAILED'\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport {\r\n CheckoutModule,\r\n ErrorCode,\r\n ErrorLocation,\r\n ErrorMessageResource,\r\n getCheckoutState,\r\n ICheckoutError,\r\n ICheckoutState\r\n} from '@msdyn365-commerce/global-state/';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- create global class\r\nexport class CheckoutErrors {\r\n public static readonly ActionError: ICheckoutError = {\r\n errorCode: ErrorCode.ActionError,\r\n errorMessageResource: ErrorMessageResource.checkoutTimeoutErrorMessage,\r\n errorLocation: ErrorLocation.Checkout\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard,\r\n errorMessageResource: ErrorMessageResource.blockedLoyaltyCardErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue,\r\n errorMessageResource: ErrorMessageResource.customerAccountLimitSignDifferentFromAmountDueErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsAvailableCreditLimitErrorMessage,\r\n errorLocation: ErrorLocation.Checkout\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_FraudRisk: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_FraudRisk,\r\n errorMessageResource: ErrorMessageResource.fraudRiskErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed,\r\n errorMessageResource: ErrorMessageResource.giftCardBalanceInquiryFailedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutGiftCard\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch,\r\n errorMessageResource: ErrorMessageResource.giftCardCurrencyMismatchErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutGiftCard\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion,\r\n errorMessageResource: ErrorMessageResource.invalidCartVersionErrorMessage,\r\n errorLocation: ErrorLocation.Checkout\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber,\r\n errorMessageResource: ErrorMessageResource.invalidLoyaltyCardNumberErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\r\n errorMessageResource: ErrorMessageResource.invalidPaymentRequestErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\r\n errorMessageResource: ErrorMessageResource.invalidPaymentRequestConsoleErrorMessage,\r\n errorLocation: ErrorLocation.Console\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines,\r\n errorMessageResource: ErrorMessageResource.missingRequiredCartTenderLinesErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed,\r\n errorMessageResource: ErrorMessageResource.multipleCustomerAccountPaymentsNotAllowedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender,\r\n errorMessageResource: ErrorMessageResource.noMoreThanOneLoyaltyTenderErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry,\r\n errorMessageResource: ErrorMessageResource.noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutGiftCard\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard,\r\n errorMessageResource: ErrorMessageResource.noTenderLoyaltyCardErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints,\r\n errorMessageResource: ErrorMessageResource.notEnoughRewardPointsErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided,\r\n errorMessageResource: ErrorMessageResource.paymentAlreadyVoidedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance,\r\n errorMessageResource: ErrorMessageResource.paymentAmountExceedsGiftBalanceErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutGiftCard\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\r\n errorMessageResource: ErrorMessageResource.paymentRequiresMerchantPropertiesErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\r\n errorMessageResource: ErrorMessageResource.paymentRequiresMerchantPropertiesConsoleErrorMessage,\r\n errorLocation: ErrorLocation.Console\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount,\r\n errorMessageResource: ErrorMessageResource.paymentUsingUnauthorizedAccountErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed,\r\n errorMessageResource: ErrorMessageResource.refundAmountMoreThanAllowedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment,\r\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired,\r\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported,\r\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment,\r\n errorMessageResource: ErrorMessageResource.unableToCancelPaymentErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo,\r\n errorMessageResource: ErrorMessageResource.unableToReadCardTokenInfoErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult,\r\n errorMessageResource: ErrorMessageResource.unableToRetrieveCardPaymentAcceptResultErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly checkoutErrorsList: ICheckoutError[] = [\r\n CheckoutErrors.ActionError,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_FraudRisk,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult\r\n ];\r\n}\r\n\r\nexport async function setCheckoutErrors(\r\n errorCode: string,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n resources: any,\r\n isExpressCheckoutApplied: boolean,\r\n ctx: IActionContext,\r\n apiError?: string | undefined\r\n): Promise {\r\n let clientCheckoutError: ICheckoutError | undefined;\r\n const consoleCheckoutErrors: ICheckoutError[] = [];\r\n\r\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\r\n ctx.telemetry.exception(error);\r\n throw error;\r\n });\r\n\r\n // find the checkout errors\r\n for (const checkoutError of CheckoutErrors.checkoutErrorsList) {\r\n if (errorCode === checkoutError.errorCode) {\r\n if (checkoutError.errorLocation === ErrorLocation.Console) {\r\n const consoleCheckoutError: ICheckoutError = {\r\n errorCode: checkoutError.errorCode,\r\n errorMessageResource: checkoutError.errorMessageResource,\r\n errorLocation: checkoutError.errorLocation\r\n };\r\n consoleCheckoutErrors.push(consoleCheckoutError);\r\n } else {\r\n if (clientCheckoutError) {\r\n ctx.telemetry.exception(new Error('Invalid number of client checkout errors.'));\r\n throw new Error('Invalid number of client checkout errors.');\r\n } else {\r\n clientCheckoutError = {\r\n errorCode: checkoutError.errorCode,\r\n errorMessageResource: checkoutError.errorMessageResource,\r\n errorLocation: checkoutError.errorLocation\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n // log the console checkout errors\r\n for (const consoleCheckoutError of consoleCheckoutErrors) {\r\n consoleCheckoutError.errorMessage = getCheckoutErrorMessage(resources, consoleCheckoutError.errorMessageResource!, apiError!);\r\n console.log(consoleCheckoutError.errorMessage);\r\n }\r\n\r\n // handle the client checkout error\r\n if (clientCheckoutError) {\r\n clientCheckoutError.errorMessage = getCheckoutErrorMessage(resources, clientCheckoutError.errorMessageResource!, apiError!);\r\n\r\n if (isExpressCheckoutApplied && clientCheckoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument) {\r\n clientCheckoutError.errorLocation = ErrorLocation.Checkout;\r\n }\r\n\r\n await checkoutState.updateCheckoutError({ newCheckoutError: clientCheckoutError });\r\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: true });\r\n } else {\r\n // if could not map to any checkout error(s), show the API error message over generic error\r\n if (consoleCheckoutErrors.length === 0) {\r\n const genericError = {\r\n errorLocation: ErrorLocation.Checkout\r\n };\r\n if (apiError) {\r\n genericError['errorMessage'] = apiError;\r\n } else {\r\n genericError['errorMessage'] = resources.genericErrorMessage;\r\n }\r\n\r\n await checkoutState.updateCheckoutError({ newCheckoutError: genericError });\r\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: true });\r\n }\r\n }\r\n}\r\n\r\nexport async function focusOnCheckoutError(checkoutErrorRef: React.RefObject, ctx: IActionContext): Promise {\r\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\r\n ctx.telemetry.exception(error);\r\n throw error;\r\n });\r\n\r\n checkoutErrorRef.current && checkoutErrorRef.current.scrollIntoView();\r\n\r\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule.None });\r\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: false });\r\n}\r\n\r\nexport async function setCheckoutErrorFocus(checkoutModuleId: string, ctx: IActionContext): Promise {\r\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\r\n ctx.telemetry.exception(error);\r\n throw error;\r\n });\r\n\r\n for (const checkoutModule of Object.keys(CheckoutModule)) {\r\n if (checkoutModuleId.includes(CheckoutModule[checkoutModule])) {\r\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule[checkoutModule] });\r\n return;\r\n }\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction getCheckoutErrorMessage(resources: any, errorMessageResource: ErrorMessageResource, errorMessageFromAPI: string): string {\r\n const errorResource = Object.keys(resources).find(resource => resource === errorMessageResource);\r\n // return API error when error resource string is not found in checkout definition file\r\n return errorResource !== undefined ? resources[errorResource] : errorMessageFromAPI;\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 { IModule } from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport isMatch from 'lodash/isMatch';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { getModuleStates, updateModuleStates } from './module-state';\nimport { IModuleState, IModuleStateManager, IModuleStateProps, IModuleStates } from './module-state.data';\n\nexport interface IProps extends IModule, IModuleStateProps {\n enableControl?: boolean;\n}\n\nconst sectionContainerModuleId = 'section-container';\nconst paymentInstrumentModuleId = 'payment-instrument';\n\nconst withModuleState =

(WrappedComponent: React.ComponentType

): React.ComponentType

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

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

{\n constructor(props: P) {\n super(props);\n this.initializeState();\n }\n\n public shouldComponentUpdate(nextProps: IModuleStateProps): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { id } = this.props;\n return ;\n }\n\n private readonly initializeState = (): void => {\n const { id, typeName, context } = this.props;\n const states = getModuleStates(context.actionContext);\n if (!states) {\n this.props.telemetry.error('withModuleState initializeState() - states not found');\n return;\n }\n\n if (states[id]) {\n // State has been initialized\n return;\n }\n\n updateModuleStates(\n {\n ...states,\n [id]: {\n id,\n typeName,\n hasInitialized: false,\n hasError: false,\n isRequired: true,\n isCancellable: true,\n isSubmitContainer: false,\n status: undefined,\n childIds: []\n }\n },\n context.actionContext\n );\n };\n\n /**\n * GetModuleStateManager\n * Get module state manager by id.\n * @param id\n */\n private readonly getModuleStateManager = (id: string): IModuleStateManager => {\n const moduleState = this.get()[id];\n return {\n ...moduleState!,\n hasInitialized: this.validate(id, { hasInitialized: true }, true), // All has initialized is initialized\n hasError: this.validate(id, { hasError: true }), // Partial has error is error\n isReady: this.validate(id, { status: 'ready' }, true, true), // All ready is ready (exclued disabled and skipped)\n isUpdating: this.validate(id, { status: 'updating' }), // Partial updating is updating\n isPending: this.validate(id, { status: 'pending' }), // Partial pending is pending\n isSkipped: this.validate(id, { status: 'skipped' }, true, true), // All skipped is skipped (exclued disabled)\n isDisabled: this.validate(id, { status: 'disabled' }, true), // All disabled is disabled\n isCancelAllowed: this.validate(id, { isCancellable: true }, true, true), // Partial not allowed is not allowed\n shouldSubmitContainer: this.validate(id, { isSubmitContainer: true }), // Partial submit is submit.\n hasExternalSubmitGroup: this.hasExternalSubmitGroup(),\n hasModuleState: this.hasModuleState(id),\n setIsRequired: (value: boolean): void => {\n this.update(id, { isRequired: value });\n },\n setIsCancellable: (value: boolean): void => {\n this.update(id, { isCancellable: value });\n },\n setIsSubmitContainer: (value: boolean): void => {\n this.update(id, { isSubmitContainer: value });\n },\n setHasError: (value: boolean): void => {\n this.update(id, { hasError: value });\n },\n onReady: (): void => {\n this.update(id, { status: 'ready' });\n },\n onUpdating: (): void => {\n this.update(id, { status: 'updating' });\n },\n onPending: (): void => {\n this.update(id, { status: 'pending' });\n },\n onSkip: (): void => {\n this.update(id, { status: 'skipped' });\n },\n onDisable: (): void => {\n this.update(id, { status: 'disabled' });\n },\n getModule: (moduleId: string): IModuleStateManager => this.getModuleStateManager(moduleId),\n getModuleByTypeName: (typeName: string): IModuleStateManager => this.getModuleStateManagerByTypeName(typeName),\n init: (options?: Partial): void => {\n if (moduleState?.hasInitialized) {\n // State has been initialized\n return;\n }\n this.update(id, {\n hasInitialized: true,\n ...options\n });\n }\n };\n };\n\n /**\n * GetModuleStateManagerByTypeName\n * Get module state manager by type name.\n * @param typeName\n */\n private readonly getModuleStateManagerByTypeName = (typeName: string): IModuleStateManager => {\n const moduleStates = getModuleStates(this.props.context.actionContext);\n const moduleState = Object.values(moduleStates).find(_moduleState => _moduleState?.typeName === typeName);\n return this.getModuleStateManager((moduleState && moduleState.id) || '');\n };\n\n /**\n * Get\n * Get all module states.\n */\n private readonly get = (): IModuleStates => {\n return getModuleStates(this.props.context.actionContext);\n };\n\n /**\n * Update\n * Update module state.\n * @param id\n * @param value\n */\n private readonly update = (id: string, value: Partial): void => {\n // Console.log('withModuleState - update', id, value);\n const modules = this.get();\n if (!modules[id]) {\n this.props.telemetry.error(`withModuleState update() - Module state with id ${id} is not found.`);\n return;\n }\n modules[id] = {\n ...modules[id]!,\n ...value\n };\n };\n\n private readonly _validateLeaf = (id: string, source: Partial): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n return isMatch(module, source);\n };\n\n private readonly _validateContainer = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n // Module doesn't has module state\n return !!allMatched;\n }\n\n if (skipSkippableItem && (module.status === 'disabled' || module.status === 'skipped')) {\n // Skip disabled or skipped modules\n return !!allMatched;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n let childIds = module.childIds;\n\n if (this.props.context.app.config.shouldEnableSinglePaymentAuthorizationCheckout) {\n // For new checkout flow, we bypass the isReady check for payment section container to enable the place order button.\n childIds = childIds.filter(childId => !this._isPaymentSectionContainer(childId));\n }\n\n // It is container module\n const method = allMatched ? 'every' : 'some';\n return childIds[method](childId => this._validateContainer(childId, source, allMatched, skipSkippableItem));\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n if (!moduleId.includes(sectionContainerModuleId)) {\n return false;\n }\n\n const modules = this.get();\n const module = modules[moduleId];\n\n if (module && ArrayExtensions.hasElements(module.childIds.filter(childId => childId.includes(paymentInstrumentModuleId)))) {\n return true;\n }\n\n return false;\n };\n\n /**\n * Validate\n * Validate current module and all its child module match the provided condition.\n * @param id\n * @param source\n * @param allMatched\n * @param skipSkippableItem\n */\n private readonly validate = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n // It is container module\n return this._validateContainer(id, source, allMatched, skipSkippableItem);\n };\n\n /**\n * HasExternalSubmitGroup\n * Module will use external submit group.\n */\n private readonly hasExternalSubmitGroup = (): boolean => {\n return !!this.props.enableControl;\n };\n\n /**\n * HasModuleState\n * Module is using module state manager.\n * @param id\n */\n private readonly hasModuleState = (id: string): boolean => {\n const modules = this.get();\n const module = modules[id];\n return !!module;\n };\n }\n\n return ModuleState;\n};\n\nexport default withModuleState;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * 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 { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../checkout-gift-card.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n disableAddGiftCard?: boolean;\n resources: {\n applyGiftCardButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On Apply Function.\n * @param onApplyGiftCard -On Apply Gift Card Function.\n * @returns Call of Apply Gift Card Function.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number Function.\n * @param onEnterGiftCardNumber -On enter gift card number Function.\n * @returns Call of on enter gift card number Function.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On Change pin event.\n * @param onEnterGiftCardPin -On enter gift card pin Function.\n * @returns Call of on enter gift card pin Function.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On Change Event.\n * @param onEnterGiftCardExp -On enter gift card function.\n * @returns Call of On enter gift card function.\n */\n// Need to filter out the month and year\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard,\n resources: {\n applyGiftCardButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-checkout-gift-card__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-checkout-gift-card__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-checkout-gift-card__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-checkout-gift-card__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-checkout-gift-card__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {applyGiftCardButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: IGiftCardExtend;\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * On remove function.\n * @param onRemoveGiftCard -Gift card number function.\n * @param giftCard -Gift card values.\n * @returns Call of onRemoveGiftCard function.\n */\nconst onRemoveHandler = (onRemoveGiftCard: (giftCardNumber: string) => void, giftCard: IGiftCardExtend) => (): void => {\n onRemoveGiftCard(giftCard.Id ?? '');\n};\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.canRemove\n * @param root0.onRemoveGiftCard\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @param root0.resources.removeGiftCardButton\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n canRemove,\n onRemoveGiftCard,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel, removeGiftCardButton }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-checkout-gift-card__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {' ('}\n {giftCardAvailableBalanceLabel}\n {` `}\n {balance}\n {')'}\n \n );\n\n const removeButton = canRemove && (\n \n );\n\n return {\n itemProps,\n id: giftCard.Id,\n selectedGiftCard,\n removeButton\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\n\nimport { getItem, IItem } from './get-item';\n\ninterface IGetListInput {\n giftCards?: IGiftCardExtend[];\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IList {\n listProps: INodeProps;\n list: IItem[];\n}\n\nexport const getList = ({ giftCards, canRemove, resources, getFormattedPrice, onRemoveGiftCard }: IGetListInput): IList | undefined => {\n if (!giftCards || giftCards.length === 0) {\n return undefined;\n }\n\n const listProps = {\n className: 'ms-checkout-gift-card__list'\n };\n\n const list = giftCards.map(giftCard =>\n getItem({\n canRemove,\n getFormattedPrice,\n giftCard,\n onRemoveGiftCard,\n resources\n })\n );\n\n return {\n listProps,\n list\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IGiftCardTitleProps {\n title: string;\n}\n\nconst GiftCardTitle: React.FC = ({ title }) => ;\n\nexport default GiftCardTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CheckoutModule, ErrorLocation, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { ICheckoutGiftCardData } from './checkout-gift-card.data';\nimport { ICheckoutGiftCardProps } from './checkout-gift-card.props.autogenerated';\nimport { getForm, IForm } from './components/get-form';\nimport { getList, IList } from './components/get-list';\nimport TitleCompoent from './components/title';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport * from './components/get-form';\nexport * from './components/get-item';\nexport * from './components/get-list';\n\ninterface ICheckoutGiftCardState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface ICheckoutGiftCardModuleProps extends ICheckoutGiftCardProps, IModuleStateProps {}\n\nexport interface IShowResource {\n title: React.ReactNode;\n list?: IList;\n}\n\nexport interface IAddResource {\n form: IForm;\n list?: IList;\n}\n\nexport interface ICheckoutGiftCardViewProps extends ICheckoutGiftCardProps<{}>, ICheckoutGiftCardState {\n className?: string;\n\n showGiftCard?: IShowResource;\n addGiftCard?: IAddResource;\n\n checkoutGiftCardProps: IModuleProps;\n couldPaidByGiftCard?: boolean;\n isEnabled?: boolean;\n checkoutErrorRef?: React.RefObject;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardNumber: string): void;\n enterGiftCardExp?(giftCardNumber: string): void;\n removeGiftCard?(giftCardNumber: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * CheckoutGiftCard component.\n * @extends {React.Component, ICheckoutGiftCardState>}\n */\n@observer\nexport class CheckoutGiftCard extends React.Component {\n public state: ICheckoutGiftCardState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n @computed get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get getLoyaltyAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.loyaltyAmount) {\n return 0;\n }\n return checkoutState.loyaltyAmount;\n }\n\n @computed get getCustomerAccountAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n return checkoutState && checkoutState.customerAccountAmount ? checkoutState.customerAccountAmount : 0;\n }\n\n @computed get getGiftCardTotalAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.giftCardExtends) {\n return 0;\n }\n return checkoutState.giftCardExtends.reduce((count: number, giftCard: IGiftCardExtend) => {\n const balance: number = giftCard.Balance || 0;\n return count + balance;\n }, 0);\n }\n\n @computed get disableAddGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return true;\n }\n return (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getGiftCardTotalAmount <= 0;\n }\n\n @computed get shouldPayGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card card when loyalty points do not cover the total amount\n const amountDue = (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getCustomerAccountAmount;\n return amountDue > 0;\n }\n\n @computed get hasSelectedItem(): boolean {\n const {\n data: { checkout }\n } = this.props;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n return !!giftCards && giftCards.length > 0;\n }\n\n public componentDidMount(): void {\n when(\n () => this.isDataReady,\n () => {\n this.init();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutGiftCard && checkoutError.errorMessage) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutGiftCard) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutGiftCardModuleProps, nextState: ICheckoutGiftCardState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n moduleState: { isReady },\n data: { checkout },\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n const additionalFields = showAdditionalFields;\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this.isEnabled() || (!this.shouldPayGiftCard && !isReady)) {\n this.props.context.telemetry.error('Checkout giftcard content is empty, module wont render');\n return null;\n }\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.GiftCard === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout gift card module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-checkout-gift-card', className, isReady ? 'show' : 'add');\n\n const viewProps: ICheckoutGiftCardViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n checkoutErrorRef: this.checkoutErrorRef,\n\n checkoutGiftCardProps: { moduleProps: this.props, className: moduleClassName },\n couldPaidByGiftCard: this.couldPaidByGiftCard(),\n isEnabled: this.isEnabled(),\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n enterGiftCardNumber: this.enterGiftCardNumber,\n enterGiftCardPin: this.enterGiftCardPin,\n enterGiftCardExp: this.enterGiftCardExp,\n removeGiftCard: this.removeGiftCard,\n applyGiftCard: this.applyGiftCard,\n showGiftCard: isReady\n ? {\n title: ,\n list: getList({\n canRemove: false,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined,\n addGiftCard: !isReady\n ? {\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n onEnterGiftCardNumber: this.enterGiftCardNumber,\n onEnterGiftCardPin: this.enterGiftCardPin,\n onEnterGiftCardExp: this.enterGiftCardExp,\n onApplyGiftCard: this.applyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard: this.disableAddGiftCard\n }),\n list: getList({\n canRemove: true,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly init = (): void => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const giftCards = this.props.data.checkout.result?.giftCardExtends;\n if (giftCards && giftCards.length > 0) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly couldPaidByGiftCard = (): boolean => {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart?.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card when it is not free\n return (cart.TotalAmount || 0) > 0;\n };\n\n private readonly isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return this.couldPaidByGiftCard();\n };\n\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Payment section gift card onEdit is called.');\n\n // Show add gift card form\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = (): void => {\n this.props.telemetry.information('Payment section gift card onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = (): void => {\n this.props.telemetry.information('Payment section gift card onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n if (this.hasSelectedItem) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this.clearError();\n };\n\n private readonly enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this.clearError();\n };\n\n private readonly enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this.clearError();\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.props.moduleState.setHasError(true);\n this.setState({\n errorMessage\n });\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly removeGiftCard = async (giftCardNumber: string): Promise => {\n this.props.telemetry.information('Payment section gift card remove is called.');\n\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState) {\n return;\n }\n\n await checkoutState.removeGiftCard({ giftCardNumber });\n };\n\n private readonly applyGiftCard = async (): Promise => {\n this.props.telemetry.information('Payment section gift card apply is called.');\n\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const checkoutState = this.props.data.checkout.result;\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this.getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this.getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (checkoutState && giftCard) {\n await checkoutState.addGiftCard({\n giftCard,\n additionalProperties: { Pin: giftCardPin, ExpirationDate: giftCardExp, TenderTypeId: tenderTypeId }\n });\n this.clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false\n });\n this.props.telemetry.information('Payment section fetching gift card is failed.');\n };\n\n private readonly findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { noBalanceError, invalidCardInfoError, invalidCardTypeError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n const internalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (isPinRequired && giftCardPin === '') {\n this.setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this.setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this.setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this.setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, duplicatedCodeError, invalidCodeError },\n data: { checkout }\n } = this.props;\n\n if (!giftCardNumber) {\n this.setError(emptyInputError);\n return undefined;\n }\n\n const isDuplicated = checkout.result && checkout.result.giftCardExtends.some((card: GiftCard) => card.Id === giftCardNumber);\n if (isDuplicated) {\n this.setError(duplicatedCodeError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this.setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this.setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default withModuleState(CheckoutGiftCard);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Address, GiftCard, TenderLine, TokenizedPaymentCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { action, computed, observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a checkout.\n */\nexport class CheckoutState {\n @observable private _tokenizedPaymentCard: TokenizedPaymentCard | undefined;\n\n @computed public get tokenizedPaymentCard(): Readonly | undefined {\n return this._tokenizedPaymentCard;\n }\n\n @observable private _tenderLine: TenderLine | undefined;\n\n @computed public get tenderLine(): Readonly | undefined {\n return this._tenderLine;\n }\n\n @observable private _billingAddress: Address | undefined;\n\n @computed public get billingAddress(): Readonly
| undefined {\n return this._billingAddress;\n }\n\n @observable private _shippingAddress: Address | undefined;\n\n @computed public get shippingAddress(): Readonly
| undefined {\n return this._shippingAddress;\n }\n\n @observable private _cardPrefix: string | undefined;\n\n @computed public get cardPrefix(): Readonly | undefined {\n return this._cardPrefix;\n }\n\n @observable private _giftCards: GiftCard[] = [];\n\n @computed public get giftCards(): readonly GiftCard[] {\n return this._giftCards;\n }\n\n @observable private _giftCardExtends: IGiftCardExtend[] = [];\n\n @computed public get giftCardExtends(): readonly IGiftCardExtend[] {\n return this._giftCardExtends;\n }\n\n @observable private _loyaltyCardNumber?: string;\n\n @computed public get loyaltyCardNumber(): Readonly | undefined {\n return this._loyaltyCardNumber;\n }\n\n @observable private _loyaltyAmount: number = 0;\n\n @computed public get loyaltyAmount(): Readonly | number {\n return this._loyaltyAmount;\n }\n\n @observable private _guestCheckoutEmail: string = '';\n\n @computed public get guestCheckoutEmail(): Readonly | string {\n return this._guestCheckoutEmail;\n }\n\n @observable private _isTermsAndConditionAccepted: boolean = false;\n\n @computed public get isTermsAndConditionAccepted(): Readonly | boolean {\n return this._isTermsAndConditionAccepted;\n }\n\n @observable private _customerAccountAmount: number = 0;\n\n @computed public get customerAccountAmount(): Readonly | number {\n return this._customerAccountAmount;\n }\n\n @action\n public updateTokenizedPaymentCard(newTokenizedPaymentCard: TokenizedPaymentCard): void {\n this._tokenizedPaymentCard = newTokenizedPaymentCard;\n }\n\n @action\n public updateTenderLine(newTenderLine: TenderLine | undefined): void {\n this._tenderLine = newTenderLine;\n }\n\n @action\n public updateShippingAddress(newShippingAddress: Address): void {\n this._shippingAddress = newShippingAddress;\n }\n\n @action\n public updateBillingAddress(newBillingAddress: Address): void {\n this._billingAddress = newBillingAddress;\n }\n\n @action\n public updateCardPrefix(newCardPrefix: string): void {\n this._cardPrefix = newCardPrefix;\n }\n\n @action\n public removeGiftCard(giftCardNumber: string): void {\n this._giftCards = this._giftCards.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public removeGiftCardExtend(giftCardNumber: string): void {\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public addGiftCard(giftCard: GiftCard): void {\n this._giftCards = [giftCard, ...this._giftCards];\n }\n\n @action\n public addGiftCardExtend(giftCard: IGiftCardExtend): void {\n this._giftCardExtends = [giftCard, ...this._giftCards];\n }\n\n @action\n public updateLoyaltyCardNumber(newLoyaltyCardNumber: string): void {\n this._loyaltyCardNumber = newLoyaltyCardNumber;\n }\n\n @action\n public updateLoyaltyAmount(newAmount: number): void {\n this._loyaltyAmount = newAmount;\n }\n\n @action\n public updateGuestCheckoutEmail(newGuestCheckoutEmail: string): void {\n this._guestCheckoutEmail = newGuestCheckoutEmail;\n }\n\n @action\n public updateTermsAndConditionsAcceptance(newIsTermsAndConditionAccepted: boolean): void {\n this._isTermsAndConditionAccepted = newIsTermsAndConditionAccepted;\n }\n\n @action\n public updateCustomerAccountAmount(newAmount: number): void {\n this._customerAccountAmount = newAmount;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './add-payment-form';\nexport * from './error';\nexport * from './iframe';\nexport * from './payment-instrument-message';\nexport * from './waiting';\nexport * from './with-visibility-observer';\nexport * from './interfaces';\nexport * from './place-order';\nexport * from './empty-active-cart';\nexport * from './country-codes';\nexport { CartCheckout } from './checkout';\nexport * from './get-checkout-return-url';\n\n/**\n * AsyncResultStatusCode.\n */\nexport enum AsyncResultStatusCode {\n LOADING = 'LOADING',\n SUCCESS = 'SUCCESS',\n FAILED = 'FAILED'\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 { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IVideoPlayerAdditionalContentViewProps } from './components/additional-content';\nimport { IVideoPlayerViewProps } from './video-player';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IVideoPlayerAdditionalContentViewProps) => {\n if (additionalContent.additionalContentItems) {\n return (\n \n <>\n {additionalContent.additionalContentItems.heading}\n \n {additionalContent.additionalContentItems.text}\n \n {additionalContent.additionalContentItems.links}\n \n \n \n \n );\n }\n\n return null;\n};\n\nconst VideoPlayerView: React.FC = props => {\n return (\n
\n {props.player}\n \n {props.title}\n {props.text}\n {props.additionalContent && renderAdditionalContent(props.additionalContent)}\n \n {props.links}\n \n \n
\n );\n};\n\nexport default VideoPlayerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport Checkout from './checkout';\nimport CheckoutView from './checkout.view';\n\nexport * from './actions/get-products-in-active-checkout-cart';\nexport * from './checkout';\nexport * from './checkout.data';\nexport * from './checkout.props.autogenerated';\nexport * from './checkout.view';\nexport * from './components';\nexport * from './methods';\n\nexport { Checkout, CheckoutView };\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { ICheckoutData } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/checkout.data';\r\nimport { ICheckoutProps } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/checkout.props.autogenerated';\r\n\r\ntype deliveryType = 'pickup' | 'ship';\r\n\r\nexport interface IPickUpAtStore {\r\n PickUpAtStore: INodeProps;\r\n label: React.ReactNode;\r\n location: React.ReactNode;\r\n}\r\n\r\nexport interface ILineItem {\r\n LineId: string;\r\n LineItem: INodeProps;\r\n item?: React.ReactNode;\r\n pickUpAtStore?: IPickUpAtStore;\r\n}\r\n\r\nexport interface ILineItemDeliveryGroup {\r\n LineItemDeliveryGroup: INodeProps;\r\n LineItemList: INodeProps;\r\n heading: React.ReactNode;\r\n lineItems: ILineItem[];\r\n}\r\n\r\nexport interface ILineItems {\r\n LineItems: INodeProps;\r\n Header: INodeProps;\r\n heading: React.ReactNode;\r\n editLink: React.ReactNode;\r\n itemsForPickup?: ILineItemDeliveryGroup;\r\n itemsForShip?: ILineItemDeliveryGroup;\r\n}\r\n\r\nexport const getLineItems = (input: ICheckoutProps): ILineItems | undefined => {\r\n const _getProduct = (productId: number): SimpleProduct | undefined => {\r\n const products = get(input, 'data.products.result') || [];\r\n return products.find((_product: SimpleProduct) => {\r\n return productId === _product.RecordId;\r\n });\r\n };\r\n\r\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\r\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n config: { imageSettings },\r\n resources: {\r\n quantityDisplayString,\r\n productDimensionTypeColor,\r\n productDimensionTypeSize,\r\n productDimensionTypeStyle,\r\n configString,\r\n inputQuantityAriaLabel,\r\n discountStringText\r\n },\r\n context: {\r\n request: { gridSettings }\r\n }\r\n } = input;\r\n\r\n if (!product) {\r\n return;\r\n }\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\r\n return items.map(cartLine => {\r\n return {\r\n LineId: cartLine.LineId || '',\r\n LineItem: { className: 'ms-checkout__line-item' },\r\n item: _getLineItemComponent(cartLine)\r\n };\r\n });\r\n };\r\n\r\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\r\n const {\r\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\r\n } = input;\r\n\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n const title = type === 'ship' ? shippingCountCheckoutLineItem : inStorePickUpLabel;\r\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\r\n };\r\n\r\n const _countItems = (items: CartLine[]): number => {\r\n return items.reduce((count, item) => {\r\n return count + (item.Quantity || 0);\r\n }, 0);\r\n };\r\n\r\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\r\n return type === 'ship'\r\n ? cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode !== pickupDeliveryModeCode)\r\n : cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === pickupDeliveryModeCode);\r\n };\r\n\r\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\r\n const items = _filterItemsByDiliveryType(type);\r\n\r\n if (items.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const count = _countItems(items);\r\n const title = _getGroupTitleComponent(count, type);\r\n\r\n return {\r\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\r\n LineItemList: { className: 'ms-checkout__line-items-list' },\r\n heading:
{title}
,\r\n lineItems: _getLineItemsComponents(items)\r\n };\r\n };\r\n\r\n const _getLineItems = (): ILineItems | undefined => {\r\n const {\r\n context,\r\n config: { lineItemsHeading },\r\n data: { products },\r\n resources: { editCartText }\r\n } = input;\r\n\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n\r\n if (!cart || !cart.CartLines || !cart.CartLines.length || !products) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n LineItems: { className: 'ms-checkout__line-items' },\r\n Header: { className: 'ms-checkout__line-items-header' },\r\n heading: lineItemsHeading && ,\r\n editLink: (\r\n \r\n {editCartText}\r\n \r\n ),\r\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\r\n itemsForShip: _getLineItemsByDeliveryType('ship')\r\n };\r\n };\r\n\r\n return _getLineItems();\r\n};\r\n","/*!\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","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node, Button, Collapse } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/src/modules/checkout';\r\nimport { getLineItems, ILineItems } from './custom-components/get-line-items';\r\nimport { IMandsCheckoutProps } from '../../../modules/mands-checkout/mands-checkout.props.autogenerated';\r\nimport { ICheckoutData } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/checkout.data';\r\nimport { IMandsCheckoutProps as ICheckoutExtensionProps } from '../definition-extensions/mands-checkout.ext.props.autogenerated';\r\n\r\nimport get from 'lodash/get';\r\n\r\nexport interface IState {\r\n _editLink: React.ReactNode;\r\n _heading: React.ReactNode;\r\n isChecked: boolean;\r\n isOpen: boolean;\r\n}\r\nexport interface IRenderLines {\r\n lineItem: React.ReactNode;\r\n}\r\n\r\ninterface IOrderSummaryExtendedProps {\r\n totalItems: number;\r\n cartUrl: string;\r\n}\r\n/**\r\n *\r\n * BuyboxView component\r\n * @extends {React.PureComponent>}\r\n */\r\n\r\nexport class CheckoutView extends React.PureComponent<\r\n ICheckoutViewProps & IMandsCheckoutProps & ICheckoutExtensionProps<{}>,\r\n IState\r\n> {\r\n constructor(props: ICheckoutViewProps & IMandsCheckoutProps & ICheckoutExtensionProps<{}>, state: IState) {\r\n super(props);\r\n this.state = {\r\n _editLink: <>,\r\n _heading: <>,\r\n isChecked: false,\r\n isOpen: false\r\n };\r\n }\r\n public render(): JSX.Element {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n context: { request },\r\n guidedForm,\r\n orderSummary,\r\n placeOrderButton,\r\n data: { checkout }\r\n // keepShoppingButton\r\n } = this.props;\r\n let { lineItems } = this.props;\r\n const lineItemsUpdated = getLineItems(this.props);\r\n lineItems = lineItemsUpdated;\r\n\r\n const cart = get(checkout, 'result.checkoutCart.cart');\r\n const totalItems = cart && cart.TotalItems ? cart.TotalItems : 0;\r\n const totalItemsText = totalItems > 1 ? 'Items' : 'Item';\r\n const sitePath = request.sitePath ? request.sitePath : '';\r\n const cartUrl = `${request.url.requestUrl.origin}${sitePath}/cart`;\r\n const orderTotal = cart && cart.TotalAmount;\r\n const {\r\n config: { toolTipText }\r\n } = this.props;\r\n const mobileView = request && request.device && request.device.Type === 'Mobile' ? true : false;\r\n return (\r\n \r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n
\r\n {guidedForm}\r\n
\r\n
{this.renderCheckBox()}
\r\n \r\n
\r\n {placeOrderButton}\r\n {toolTipText && {toolTipText}}\r\n
\r\n
\r\n
\r\n {lineItems && }\r\n
\r\n
{this.renderCheckBox()}
\r\n
\r\n {placeOrderButton}\r\n {toolTipText && {toolTipText}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n {mobileView && (\r\n <>\r\n \r\n Checkout{' '}\r\n \r\n {totalItems} {totalItemsText}{' '}\r\n {this.props.context.cultureFormatter.formatCurrency(orderTotal)}\r\n \r\n \r\n \r\n {orderSummary && (\r\n \r\n )}\r\n \r\n \r\n )}\r\n {orderSummary && !mobileView && (\r\n \r\n )}\r\n \r\n {placeOrderButton}\r\n {/* {keepShoppingButton} */}\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n );\r\n }\r\n private handleClick = () => {\r\n this.setState({ isOpen: !this.state.isOpen });\r\n };\r\n private toggleChange = () => {\r\n this.setState({\r\n isChecked: !this.state.isChecked\r\n });\r\n };\r\n private renderCheckBox = () => {\r\n const {\r\n config: { termsConditionsUrl, acceptTermsAndConditionText }\r\n } = this.props;\r\n return (\r\n \r\n );\r\n };\r\n private PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n );\r\n private LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n );\r\n private LineItemGroupComponent: React.FC = props => {\r\n const { LineItemDeliveryGroup, LineItemList, lineItems } = props;\r\n return (\r\n \r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n );\r\n };\r\n private LineItemsComponent: React.FC = props => {\r\n const { LineItems, Header, heading, itemsForPickup, itemsForShip } = props;\r\n return (\r\n \r\n {heading}\r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n );\r\n };\r\n private OrderSummaryComponent: React.FC = props => {\r\n const { lines } = props;\r\n // const {\r\n // config: { helpLink }\r\n // } = this.props;\r\n const item = props.totalItems > 1 ? 'Items' : 'Item';\r\n return (\r\n
\r\n
\r\n
\r\n

\r\n {props.totalItems} {item}\r\n

\r\n \r\n edit bag\r\n \r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\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 { 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 } 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}\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 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 if (image) {\n return (\n \n );\n }\n return null;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyAdd, ICheckoutLoyaltyRewardPoint, ICheckoutLoyaltyShow, ICheckoutLoyaltyViewProps } from './checkout-loyalty';\n\nconst AddCheckoutLoyalty: React.FC = ({\n heading,\n cardNumber,\n drawer,\n rewardPoints,\n loyaltyAmountContainer,\n appliedLoyaltyAmountContainer,\n loyaltyAmountLabel,\n loyaltyAmountInput,\n loyaltyAmountApplyButton,\n showAppliedAmount,\n loyaltyAmountAppliedText,\n loyaltyAmountAppliedPrice,\n loyaltyAmountRemoveButton\n}) => {\n return (\n <>\n {heading}\n {cardNumber}\n \n {rewardPoints.map((rewardPoint: ICheckoutLoyaltyRewardPoint) => {\n return (\n \n {rewardPoint.title}\n {rewardPoint.availablePointsText}\n {rewardPoint.activePoints}\n {rewardPoint.expiringPointsText}\n {rewardPoint.expiringPoints}\n \n );\n })}\n \n \n {loyaltyAmountLabel}\n {loyaltyAmountInput}\n {loyaltyAmountApplyButton}\n {showAppliedAmount && (\n \n {loyaltyAmountAppliedText}\n {loyaltyAmountAppliedPrice}\n {loyaltyAmountRemoveButton}\n \n )}\n \n \n );\n};\n\nconst ShowCheckoutLoyalty: React.FC = ({ heading, coveredAmountText, amount }) => {\n return (\n <>\n {heading}\n {coveredAmountText}\n {amount}\n \n );\n};\n\nconst CheckoutLoyaltyView: React.FC = props => {\n const { checkoutLoyalty, checkoutErrorRef, alert, viewState, showLoyalty, addLoyalty } = props;\n\n return (\n \n {alert}\n {viewState.isShowLoyalty && }\n {viewState.isShowAddLoyalty && }\n \n );\n};\n\nexport default CheckoutLoyaltyView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from './checkout';\nimport { IEmailDelivery } from './components';\nimport { IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\n\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\n\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {pickUpAtStore && }\n {emailDelivery && }\n \n);\n\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\n \n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC = ({\n LineItemDeliveryGroup,\n LineItemList,\n heading,\n lineItems,\n lineItemWraper,\n lineItemWraperIcon\n}) => (\n \n {lineItemWraperIcon}\n {lineItemWraper}\n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemComponentWithMultiplePickUp: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {emailDelivery && }\n \n);\n\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const LineItemsComponent: React.FC = ({\n LineItems,\n Header,\n heading,\n editLink,\n itemsForPickup,\n itemsForShip,\n itemsForEmail,\n itemsGroupWithMulitplePickupMode\n}) => (\n \n \n {heading}\n {editLink}\n \n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\n {itemsGroupWithMulitplePickupMode !== undefined\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\n return ;\n })\n : null}\n \n);\n\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\n
\n {heading}\n
\n {lines && (\n <>\n {lines.subtotal}\n {lines.shipping}\n {lines.otherCharge}\n {lines.tax}\n {lines.totalDiscounts}\n {lines.loyalty}\n {lines.customerAccount}\n {lines.giftCard}\n {lines.orderTotal}\n \n )}\n
\n
\n);\n\nconst PaymentSummaryComponent: React.FC = ({ heading, lines }) => (\n
\n {heading}\n
\n {lines && (\n <>\n {lines.invoices}\n {lines.giftCard}\n {lines.loyalty}\n {lines.orderTotal}\n \n )}\n
\n
\n);\n\nconst CheckoutView: React.FC = props => {\n const {\n isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n canShow,\n checkoutProps,\n headerProps,\n hasSalesOrder,\n hasInvoiceLine,\n bodyProps,\n mainProps,\n mainControlProps,\n sideProps,\n sideControlFirstProps,\n sideControlSecondProps,\n termsAndConditionsProps,\n orderConfirmation,\n loading,\n alert,\n title,\n guidedForm,\n orderSummary,\n invoicePaymentSummary,\n lineItems,\n placeOrderButton,\n termsAndConditions,\n keepShoppingButton,\n checkoutExpressPaymentContainer,\n checkoutErrorRef\n } = props;\n\n return (\n \n {!hasSalesOrder && !checkoutExpressPaymentContainer && {title}}\n {!hasSalesOrder && isPaymentVerificationRedirection && shouldEnableSinglePaymentAuthorizationCheckout && !alert && !loading && (\n \n )}\n {!hasSalesOrder && (\n \n {loading}\n {alert}\n {canShow && (\n <>\n \n {checkoutExpressPaymentContainer}\n {checkoutExpressPaymentContainer && {title}}\n {guidedForm}\n {termsAndConditions}\n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n {!hasInvoiceLine\n ? orderSummary && \n : invoicePaymentSummary && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n {lineItems && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n )}\n \n )}\n {hasSalesOrder && orderConfirmation}\n \n );\n};\n\nexport default CheckoutView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IInvoicePaymentSummary {\n heading?: React.ReactNode;\n lines?: IInvoiceSummaryLines;\n}\nexport const getInvoicePaymentSummary = (input: ICheckoutProps): IInvoicePaymentSummary => {\n const {\n data: { checkout },\n resources: { totalAmountLabel, invoiceLabel, invoiceSummaryTitle },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutCart = get(checkout, 'result.checkoutCart');\n const cart = get(checkout, 'result.checkoutCart.cart');\n\n return {\n heading:

{invoiceSummaryTitle}

,\n lines: checkoutCart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: totalAmountLabel,\n invoiceLabel,\n cart,\n context,\n typeName,\n telemetry,\n id,\n checkoutState: checkout.result\n })\n : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { AsyncResultStatus, Cart, CartLineValidationResults } from '@msdyn365-commerce/retail-proxy';\nimport {\n updateLineDeliverySpecificationsAsync,\n validateForCheckoutAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address,\n DeliveryPreferenceType,\n LineDeliverySpecification,\n SimpleProduct,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n ArrayExtensions,\n getAvailabilitiesForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n validateCartLinesInventory\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n Waiting\n} from '@msdyn365-commerce-modules/utilities';\nimport { ErrorCode, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\nimport { action, computed, get, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutData } from './checkout.data';\nimport { ICheckoutHeadingData, ICheckoutProps } from './checkout.props.autogenerated';\nimport AlertComponent from './components/alert';\nimport { getInvoicePaymentSummary, IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\nimport { getLineItems, ILineItems } from './components/get-line-items';\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\nimport GuidedFormComponent from './components/guided-form';\nimport PlaceOrderButtonComponent from './components/place-order-button';\nimport placeOrder from './methods/place-order';\nimport { focusOnCheckoutError, setCheckoutErrors } from '../../checkout-errors';\nimport { AsyncResultStatusCode, IExpressPaymentDetails } from '../../common';\n\nexport * from './components/get-line-items';\nexport * from './components/get-order-summary';\n\n/**\n * Device type.\n */\ntype DeviceType = 'Mobile';\n\n/**\n * The Checkout state.\n */\ninterface ICheckoutState {\n errorMessage: string;\n isValidationPassed: boolean;\n isPlaceOrderLoading?: boolean;\n isPlaceOrderClicked?: boolean;\n}\n\n/**\n * The Checkout view props.\n * @extends ICheckoutProps\n */\nexport interface ICheckoutViewProps extends ICheckoutProps {\n className: string;\n canShow?: boolean;\n isEmptyCart?: boolean;\n isConsentGiven?: boolean;\n hasError?: boolean;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n cartStatus?: string;\n isMobile?: boolean;\n isEditorialMode?: boolean;\n backToShoppingUrl?: string;\n editCartLink?: string;\n hasSalesOrder: boolean;\n hasInvoiceLine?: boolean;\n\n checkoutProps: IModuleProps;\n headerProps: INodeProps;\n bodyProps: INodeProps;\n mainProps: INodeProps;\n mainControlProps: INodeProps;\n sideProps: INodeProps;\n sideControlFirstProps: INodeProps;\n sideControlSecondProps: INodeProps;\n termsAndConditionsProps: INodeProps;\n\n guidedForm?: React.ReactNode;\n title?: React.ReactNode;\n loading?: React.ReactNode;\n alert?: React.ReactNode;\n orderSummary?: IOrderSummary;\n invoicePaymentSummary?: IInvoicePaymentSummary;\n lineItems?: ILineItems;\n placeOrderButton?: React.ReactNode;\n termsAndConditions?: React.ReactNode;\n keepShoppingButton?: React.ReactNode;\n orderConfirmation?: React.ReactNode;\n\n checkoutExpressPaymentContainer?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n * The checkout module props interface.\n */\nexport interface ICheckoutModuleProps extends ICheckoutProps, IModuleStateProps {}\n\nconst expressPaymentSectionClassName = 'msc-express-payment-container';\n\n/**\n *\n * CheckoutContainer component.\n * @extends {React.Component}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass Checkout extends React.PureComponent {\n @computed get cartStatus(): Msdyn365.AsyncResultStatus {\n return this.props.data.checkout?.status;\n }\n\n @computed get isEmptyCart(): boolean {\n if (this.isEditorialMode) {\n // Editorial mode: Ignore empty cart\n return false;\n }\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\n }\n\n @computed get hasError(): boolean {\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\n }\n\n @computed get isEditorialMode(): boolean {\n return this.props.context.request.params.isEditor;\n }\n\n @computed get canPlaceOrder(): boolean {\n const isTermsAndConditionAccepted = this.props.data.checkout.result && this.props.data.checkout.result?.isTermsAndConditionAccepted;\n\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n const disableForOBO = Msdyn365.isOboRequest(this.props.context.request) && !this.isPaidOffByCustomerAccount;\n\n // If isTermsAndConditionAccepted is undefined means TermsAndCondition module is not added to page and we should able to place order.\n return (\n this.props.moduleState.isReady &&\n (isTermsAndConditionAccepted === undefined || isTermsAndConditionAccepted || shouldEnableSinglePaymentAuthorizationCheckout) &&\n (this.state.errorMessage === '' ||\n shouldEnableSinglePaymentAuthorizationCheckout ||\n (this.props.data.checkout.result?.isPaymentVerificationRedirection ?? false)) &&\n !(shouldEnableSinglePaymentAuthorizationCheckout && disableForOBO)\n );\n }\n\n @computed get isPaidOffByCustomerAccount(): boolean {\n const amountDue = this.props.data.checkout.result?.checkoutCart.cart.TotalAmount ?? 0;\n const customerAccountAmount = this.props.data.checkout.result?.customerAccountAmount ?? 0;\n\n return customerAccountAmount === amountDue;\n }\n\n @computed get isCartReady(): boolean {\n return (\n !!this.props.data.checkout.result?.checkoutCart?.cart &&\n this.props.data.customerInformation.status !== 'LOADING' &&\n this.props.data.featureState.status !== 'LOADING'\n );\n }\n\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\n const properties =\n this.props.data.checkout?.result?.checkoutCart?.cart?.ExtensionProperties?.find(\n property => property.Key === 'expressPaymentDetails'\n )?.Value?.StringValue ?? '';\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\n }\n\n public state: ICheckoutState = {\n errorMessage: '',\n isValidationPassed: false,\n isPlaceOrderLoading: false,\n isPlaceOrderClicked: false\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 private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public componentDidMount(): void {\n const {\n resources: { genericErrorMessage }\n } = this.props;\n\n when(\n () => this.asyncResultStatus !== AsyncResultStatusCode.LOADING,\n async () => {\n if (this.expressPaymentDetailsFromCartPage) {\n const {\n email,\n tenderLine,\n tokenizedPaymentCard,\n paymentTenderType: paymentTenderTypeFromCartPage,\n isExpressCheckoutAppliedInCartPage,\n isExpressAddressAppliedInCartPage,\n cardPaymentAcceptResult,\n address\n } = this.expressPaymentDetailsFromCartPage;\n\n this.props.data.checkout.result?.updateExpressCheckoutDetails({\n newEmailAddressFromExpressCheckout: email ?? '',\n newTenderLine: tenderLine,\n newTokenizedPaymentCard: tokenizedPaymentCard,\n newPaymentTenderType: paymentTenderTypeFromCartPage,\n newIsExpressCheckoutApplied: isExpressCheckoutAppliedInCartPage,\n newIsExpressAddressApplied: isExpressAddressAppliedInCartPage,\n newCardPaymentAcceptResult: cardPaymentAcceptResult\n });\n\n if (isExpressAddressAppliedInCartPage && address) {\n this.props.data.checkout.result?.updateBillingAddressFromExpressCheckout({\n newBillingAddressFromExpressCheckout: address\n });\n this.props.data.checkout.result?.updateShippingAddressFromExpressCheckout({\n newShippingAddressFromExpressCheckout: address\n });\n } else {\n void this._saveShippingAndBillingAddress(tokenizedPaymentCard);\n }\n\n this.props.data.checkout.result?.checkoutCart.updateExtensionProperties({\n newExtensionProperties: [\n {\n Key: 'expressPaymentDetails',\n Value: { StringValue: '' }\n }\n ]\n });\n }\n }\n );\n\n when(\n () => this.hasError,\n () => {\n this.setState({\n errorMessage: genericErrorMessage\n });\n this.props.context.telemetry.error('Failed to get cart');\n }\n );\n\n when(\n () => {\n return this.isEmptyCart;\n },\n () => {\n this.redirectToCartPage('Cart is empty, but no editCartLink found');\n }\n );\n\n when(\n () => this.isCartReady,\n () => {\n this.validateForCheckout();\n }\n );\n\n reaction(\n () => this.props.moduleState.isReady,\n () => {\n this.onContainerReady();\n }\n );\n\n // Reaction to call place order when isPaymentSectionContainerReady is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerReady,\n async isReady => {\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n isReady &&\n !this.props.data.checkout.result?.redirectAdditionalContext &&\n (!this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.props.data.checkout.result?.isPaymentVerificationRedirection)\n ) {\n if (!this.state.isPlaceOrderLoading) {\n this.setState({ isPlaceOrderLoading: true });\n }\n\n this.props.telemetry.information(\n 'Call onPlaceOrder as reaction when isPaymentSectionContainerReady is updated for single auth payment.'\n );\n\n await this.onPlaceOrder();\n\n // If 3D authentication redirection, don't update isPlaceOrderLoading\n if (!this.props.data.checkout.result.isPaymentVerificationRequired) {\n this.setState({ isPlaceOrderLoading: false });\n }\n }\n }\n );\n\n // Reaction to enable place order button when isPaymentSectionContainerHasError is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isPaymentSectionContainerHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isPaymentSectionContainerHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isBillingAddressHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.data.checkout.result?.updateIsBillingAddressHasError({ newIsBillingAddressHasError: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isBillingAddressHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isBillingAddressHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n // Reaction to enable place order button when redirection is true for new checkout flow.\n reaction(\n () => this.canPlaceOrder,\n async () => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && this.canPlaceOrder) {\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateIsPlaceOrderEnabledInRedirection({\n newIsPlaceOrderEnabledInRedirection: true\n });\n\n this.props.telemetry.information(\n 'Set isPaymentVerificationRedirection to true as reaction when canPlaceOrder is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when canPlaceOrder is updated to true but isPaymentVerificationRedirection is false for single auth payment.'\n );\n this.props.telemetry.information(\n `isOBORequest is ${Msdyn365.isOboRequest(this.props.context.request)} and canPlaceOrder is ${\n this.canPlaceOrder\n }.`\n );\n }\n } else {\n this.props.telemetry.information('No reaction when canPlaceOrder is updated to false or not single auth payment.');\n }\n }\n );\n\n // Reaction to update the error message when there is a checkout error.\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n const checkoutErrorLocation: boolean = checkoutError?.errorLocation === ErrorLocation.Checkout;\n // If there is an Error in CheckoutPaymentInstrument module, checkout error location will be updated.\n const checkoutPaymentErrorLocation: boolean =\n checkoutError?.errorCode === ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment\n ? checkoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument\n : checkoutErrorLocation;\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n checkoutError &&\n checkoutError.errorMessage &&\n (checkoutErrorLocation ? checkoutErrorLocation : checkoutPaymentErrorLocation)\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n }\n\n public componentDidUpdate(): void {\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n this.props.data.checkout.result?.shouldFocusOnCheckoutError &&\n this.state.errorMessage\n ) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n\n // eslint-disable-next-line complexity -- ignore the complexity.\n public render(): JSX.Element {\n const {\n moduleState,\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\n resources,\n context: {\n request: {\n user: { isAuthenticated }\n }\n }\n } = this.props;\n const { errorMessage } = this.state;\n const { backToShopping, placeOrderText, confirmPaymentText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\n const checkoutClass = classnames('ms-checkout', className);\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\n\n // @ts-expect-error - check the key of slot\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\n\n // @ts-expect-error - check the key of slot\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\n\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n const isMobile =\n this.props.context.request &&\n this.props.context.request.device &&\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\n\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n\n const termsAndConditions =\n this.props.slots.termsAndConditions && this.props.slots.termsAndConditions.length > 0 && this.props.slots.termsAndConditions[0];\n\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\n const backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n\n const hasInvoiceLine = this.props.data.checkout && this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderText;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout?.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isExpressCheckoutApplied = this.props.data.checkout?.result?.isExpressCheckoutApplied ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasCartDeliveryMode = this.props.data.checkout?.result?.hasCartDeliveryMode;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasGuestCheckoutEmail = this.props.data.checkout?.result?.hasGuestCheckoutEmail;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isTermsAndConditionAccepted = this.props.data.checkout?.result?.isTermsAndConditionAccepted;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isPaymentVerificationRedirection = this.props.data.checkout?.result?.isPaymentVerificationRedirection ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldEnableCheckoutErrorDisplayMessaging =\n this.props.data.checkout?.result?.shouldEnableCheckoutErrorDisplayMessaging ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldFocusOnCheckoutError = this.props.data.checkout?.result?.shouldFocusOnCheckoutError;\n\n let hasExpressPaymentContainer = false;\n\n if (\n typeof window !== 'undefined' &&\n (document?.getElementsByClassName(expressPaymentSectionClassName) as HTMLCollectionOf)[0]?.style.display === ''\n ) {\n hasExpressPaymentContainer = true;\n }\n\n let viewProps: ICheckoutViewProps = {\n ...this.props,\n className: checkoutClass,\n checkoutErrorRef: this.checkoutErrorRef,\n isEmptyCart: this.isEmptyCart,\n isConsentGiven,\n hasError: this.hasError,\n isPaymentVerificationRedirection: this.props.data.checkout?.result?.isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n hasSalesOrder:\n this.props.data.checkout &&\n this.props.data.checkout.result !== undefined &&\n this.props.data.checkout.result.salesOrder !== undefined,\n hasInvoiceLine,\n cartStatus: this.cartStatus,\n isMobile,\n backToShoppingUrl,\n editCartLink,\n isEditorialMode: this.isEditorialMode,\n orderConfirmation:\n this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\n ? this.props.slots.orderConfirmation[0]\n : undefined,\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\n headerProps: { className: 'ms-checkout__head' },\n bodyProps: { className: 'ms-checkout__body' },\n mainProps: { className: 'ms-checkout__main' },\n mainControlProps: { className: 'ms-checkout__main-control' },\n sideProps: { className: hasExpressPaymentContainer ? 'ms-checkout__has-express-side' : 'ms-checkout__side' },\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\n termsAndConditionsProps: { className: 'ms-checkout__terms-and-conditions' },\n title: checkoutHeading && this.renderMsdyn365Text(checkoutHeading),\n checkoutExpressPaymentContainer\n };\n\n if (!isConsentGiven && isAuthenticated) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else if (this.isLoading()) {\n viewProps = {\n ...viewProps,\n loading: \n };\n } else if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else {\n viewProps = {\n ...viewProps,\n alert: errorMessage && ,\n canShow: true,\n guidedForm: checkoutInformation ? (\n \n ) : (\n undefined\n ),\n orderSummary: getOrderSummary(this.props),\n invoicePaymentSummary: getInvoicePaymentSummary(this.props),\n lineItems: hasInvoiceLine ? undefined : getLineItems(this.props, this.telemetryContent),\n placeOrderButton: (\n \n ),\n termsAndConditions,\n keepShoppingButton: backToShoppingUrl && (\n \n {backToShopping}\n \n )\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @computed public get asyncResultStatus(): AsyncResultStatus | undefined {\n const isLoading = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.LOADING);\n if (isLoading) {\n return AsyncResultStatusCode.LOADING;\n }\n\n const isSuccess = Object.values(this.props.data).every(data => get(data, 'status') === AsyncResultStatusCode.SUCCESS);\n if (isSuccess) {\n return AsyncResultStatusCode.SUCCESS;\n }\n\n const isFailed = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.FAILED);\n if (isFailed) {\n return AsyncResultStatusCode.FAILED;\n }\n\n return undefined;\n }\n\n /**\n * Renders heading.\n * @param checkoutHeading - The checkout heading.\n * @returns React node.\n */\n public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\n return (\n \n );\n }\n\n /**\n * Event handler for heading change event.\n * @param event - The content change event in heading element.\n * @returns The new heading value.\n */\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.checkoutHeading!.text = event.target.value);\n\n /**\n * Checks if cart is loading.\n * @returns True if is loading, false otherwise.\n */\n private readonly isLoading = (): boolean => {\n return !this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart || !this.state.isValidationPassed;\n };\n\n /**\n * Get slot items.\n * @param key - The slot key.\n * @returns React node or undefined.\n */\n private readonly getSlotItems = (key: string): React.ReactNode[] | undefined => {\n const { slots } = this.props;\n return slots && slots[key] && slots[key].length > 0 ? slots[key] : undefined;\n };\n\n /**\n * Trigger the payment section container submit when placing order.\n */\n private readonly triggerPaymentWithPlaceOrder = async (): Promise => {\n this.setState({ isPlaceOrderLoading: true });\n\n await this.props.data.checkout.result?.updateShouldTriggerPaymentWithPlaceOrder({\n newShouldTriggerPaymentWithPlaceOrder: !this.props.data.checkout.result.shouldTriggerPaymentWithPlaceOrder\n });\n };\n\n /**\n * On place order.\n * @returns Void promise.\n */\n private readonly onPlaceOrder = async (): Promise => {\n const {\n resources: { checkoutOutOfStockErrorMessage },\n context: {\n actionContext,\n app: {\n config: { enableStockCheck = false }\n }\n },\n slots: { orderConfirmation },\n data: { checkout, products }\n } = this.props;\n\n this.props.telemetry.information('Checkout onPlaceOrder is called.');\n this.setState({ isPlaceOrderClicked: true });\n\n // If hasInvoiceLine is true, no inventory check\n if (\n !this.props.data.checkout.result?.checkoutCart.hasInvoiceLine &&\n enableStockCheck &&\n (await this.isOverMaxQuantity((await checkout).checkoutCart.cart, await products))\n ) {\n this.setState({\n errorMessage: checkoutOutOfStockErrorMessage\n });\n this.props.context.telemetry.error(checkoutOutOfStockErrorMessage);\n } else {\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\n\n const updatedCartVersion = await this.updateCartLineEmailAddress(this.props.data.checkout.result?.guestCheckoutEmail || '');\n\n await placeOrder(\n actionContext,\n this.props.data.checkout.result,\n this.props.data.products.result,\n !hasOrderConfirmation,\n updatedCartVersion,\n this.props.data.checkout.result?.isPaymentVerificationRedirection\n ).catch(error => {\n this.handleCheckoutError(error);\n });\n\n await checkout.result?.updateIsPaymentSectionContainerReady({ newIsPaymentSectionContainerReady: false });\n }\n };\n\n /**\n * Update receipt email address for electronic cart line.\n * @param newGuestCheckoutEmail - The guest checkout email.\n * @returns The updated cart version.\n */\n private readonly updateCartLineEmailAddress = async (newGuestCheckoutEmail: string): Promise => {\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n const emailDeliveryCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(\n cartLine => cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && cartLine.DeliveryMode === emailDeliveryModeCode\n );\n\n let updatedCartVersion: number | undefined;\n if (emailDeliveryCartLines && emailDeliveryCartLines.length > 0) {\n const lineDeliverySpecifications: LineDeliverySpecification[] = emailDeliveryCartLines.map(line => {\n return {\n LineId: line.LineId,\n DeliverySpecification: {\n DeliveryModeId: emailDeliveryModeCode,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail\n }\n };\n });\n\n await updateLineDeliverySpecificationsAsync(\n { callerContext: this.props.context.actionContext },\n (await this.props.data.checkout).checkoutCart.cart.Id,\n lineDeliverySpecifications\n )\n .then(updatedCart => {\n updatedCartVersion = updatedCart.Version;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[updateLineDeliverySpecificationsAsync] Unable to update electronic delivery email address in cart');\n });\n }\n\n return updatedCartVersion;\n };\n\n /**\n * Return true if any product in the cart is over its max quantity.\n * @param cart -- The checkout cart.\n * @param products -- The checkout products.\n * @returns - Is any product in the cart is over max quantity.\n */\n private readonly isOverMaxQuantity = async (cart: Cart, products: SimpleProduct[]): Promise => {\n let isOverMaxQuantity = false;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n await getAvailabilitiesForCartLineItems(\n new ProductAvailabilitiesForCartLineItems(this.props.context.actionContext.requestContext.apiSettings),\n this.props.context.actionContext\n )\n .then(productInventoryInformation => {\n const productsThatShouldValidateInventory: IProductInventoryInformation[] = [];\n\n cart.CartLines?.map(cartline => {\n const cartlineProduct = products.find(product => product.RecordId === cartline.ProductId);\n\n // If product is non-stocked or cartline is electronic delivery, then no inventory check\n const isStockedItem = cartlineProduct?.Behavior?.IsStockedProduct;\n const isEmailDelivery =\n cartline.DeliveryMode && cartline.DeliveryMode !== '' ? cartline.DeliveryMode === emailDeliveryModeCode : false;\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\n if (!shouldSkipInventoryCheck && ArrayExtensions.hasElements(productInventoryInformation)) {\n const foundProductAvailability = productInventoryInformation.find(productInventory => {\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n if (foundProductAvailability) {\n productsThatShouldValidateInventory.push(foundProductAvailability);\n }\n }\n });\n\n const cartLinesInventoryValidation = validateCartLinesInventory(\n cart.CartLines ?? [],\n productsThatShouldValidateInventory,\n this.props.context.actionContext,\n products,\n emailDeliveryModeCode\n );\n\n // If is invalid then exceeds the available quantity\n isOverMaxQuantity = !cartLinesInventoryValidation.isValid;\n return isOverMaxQuantity;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[getAvailabilitiesForCartLineItems] Unable to get availabilities for products in checkout cart');\n });\n\n return isOverMaxQuantity;\n };\n\n /**\n * Gets active child in module state.\n * @returns - The module state manager collection.\n */\n private readonly getActiveChildModuleStates = (): IModuleStateManager[] => {\n const { childIds, getModule } = this.props.moduleState;\n return childIds\n .map(getModule)\n .filter((state): state is IModuleStateManager => !!state && !state.isDisabled && state.hasModuleState);\n };\n\n /**\n * On container ready.\n */\n private readonly onContainerReady = (): void => {\n this.props.telemetry.information('Checkout onContainerReady is called.');\n\n this.getActiveChildModuleStates().forEach(state => {\n state.isReady && state.onContainerReady && state.onContainerReady();\n });\n };\n\n /**\n * Redirects to cart page.\n * @param notFoundEditCartLinkMessage - Not found edit cart link message.\n */\n private readonly redirectToCartPage = (notFoundEditCartLinkMessage: string): void => {\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n if (window && editCartLink) {\n window.location.assign(editCartLink);\n } else {\n this.setState({\n errorMessage: this.props.resources.genericErrorMessage\n });\n this.props.context.telemetry.error(notFoundEditCartLinkMessage);\n }\n };\n\n /**\n * Validates for checkout.\n * @param retry - Retry flag.\n */\n private readonly validateForCheckout = (retry: boolean = true): void => {\n const notFoundEditCartLinkMessage = \"Cart doesn't pass validation, but no editCartLink found\";\n const cart = this.props.data.checkout.result!.checkoutCart.cart;\n const { Id, Version } = cart;\n const isOrderQuantityLimitsFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n const isEcommerceQuantityLimitsFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n const customerInfo = this.props.data.customerInformation.result;\n const isB2BSite = isChannelTypeB2B(this.props.context.actionContext.requestContext);\n\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings =\n defaultOrderQuantityLimitsFeatureConfig === 'all' ||\n (customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && isB2BSite) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !isB2BSite)));\n if (\n (isOrderQuantityLimitsFeatureEnabledInHq && isOrderQuantityLimitsFeatureEnabledInSiteSettings) ||\n isEcommerceQuantityLimitsFeatureEnabledInHq\n ) {\n if (Version && Id) {\n validateForCheckoutAsync({ callerContext: this.props.context.actionContext, bypassCache: 'none' }, Id, Version)\n .then((result: CartLineValidationResults) => {\n if (result.ValidationFailuresByCartLines?.length !== 0) {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n } else {\n this.setState({ isValidationPassed: true });\n }\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n if (retry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n const cartState = this.props.data.checkout.result?.checkoutCart;\n cartState\n ?.refreshCart({})\n .then(() => {\n this.validateForCheckout(false);\n })\n .catch((refreshError: Error) => {\n this.props.telemetry.warning(refreshError.message);\n this.props.telemetry.debug('Unable to refresh Cart');\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n } else {\n this.setState({ isValidationPassed: true });\n }\n };\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n /**\n * Save the address as Shipping and Billing address.\n * @param tokenizedPaymentCard - Tokenized payment card.\n */\n private readonly _saveShippingAndBillingAddress = async (tokenizedPaymentCard?: TokenizedPaymentCard): Promise => {\n const checkoutState = this.props.data.checkout.result;\n\n // For Paypal, the address returned in TokenizedPaymentCard will be used as both shipping and billing address.\n if (checkoutState && tokenizedPaymentCard && tokenizedPaymentCard.Zip) {\n const address: Address = this._getAddressFromTokenizedPaymentCard(tokenizedPaymentCard);\n\n await checkoutState.updateBillingAddressFromExpressCheckout({ newBillingAddressFromExpressCheckout: address });\n await checkoutState.updateShippingAddressFromExpressCheckout({ newShippingAddressFromExpressCheckout: address });\n }\n };\n\n /**\n * Get address from tokenizedPaymentCard.\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\n * @returns The address.\n */\n private readonly _getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\n const address: Address = {\n TwoLetterISORegionName: tokenizedPaymentCard.Country,\n Name: tokenizedPaymentCard.NameOnCard,\n Street: tokenizedPaymentCard.Address1,\n StreetNumber: tokenizedPaymentCard.Address2,\n City: tokenizedPaymentCard.City,\n State: tokenizedPaymentCard.State,\n ZipCode: tokenizedPaymentCard.Zip,\n Phone: tokenizedPaymentCard.Phone\n };\n\n return address;\n };\n\n /**\n * Handle checkout errors.\n * @param error -- The error on checkout api failure.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly handleCheckoutError = (error: any) => {\n const {\n resources: {\n genericErrorMessage,\n invalidCartVersionErrorMessage,\n missingRequiredCartTenderLinesErrorMessage,\n timeoutErrorMessage\n },\n context: { actionContext }\n } = this.props;\n const checkoutResult = this.props.data.checkout.result;\n const apiError = error && error.message;\n if (error?.statusCode === 500) {\n const errorMessage = timeoutErrorMessage;\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n this.setState({ isPlaceOrderLoading: false });\n return;\n }\n if (checkoutResult && checkoutResult.shouldEnableCheckoutErrorDisplayMessaging) {\n const errorCode = error && error.name ? error.name : '';\n // apiError message will be used if errorcode resource/enums is unavailable\n setCheckoutErrors(errorCode, this.props.resources, !!checkoutResult.isExpressCheckoutApplied, actionContext, apiError);\n } else {\n let errorMessage = genericErrorMessage;\n this.setState({ isPlaceOrderClicked: false });\n\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n errorMessage = invalidCartVersionErrorMessage;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ExclusiveCouponCannotBeAppliedWithOtherCoupons') {\n // If api error is not available show generic message\n errorMessage = apiError || genericErrorMessage;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n error.data?.AdditionalContext &&\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\n ) {\n return;\n }\n\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n }\n };\n}\n\nexport default Checkout;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport {\n CheckoutModule,\n ErrorCode,\n ErrorLocation,\n ErrorMessageResource,\n getCheckoutState,\n ICheckoutError,\n ICheckoutState\n} from '@msdyn365-commerce/global-state/';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- create global class\nexport class CheckoutErrors {\n public static readonly ActionError: ICheckoutError = {\n errorCode: ErrorCode.ActionError,\n errorMessageResource: ErrorMessageResource.checkoutTimeoutErrorMessage,\n errorLocation: ErrorLocation.Checkout\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard,\n errorMessageResource: ErrorMessageResource.blockedLoyaltyCardErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue,\n errorMessageResource: ErrorMessageResource.customerAccountLimitSignDifferentFromAmountDueErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsAvailableCreditLimitErrorMessage,\n errorLocation: ErrorLocation.Checkout\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_FraudRisk: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_FraudRisk,\n errorMessageResource: ErrorMessageResource.fraudRiskErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed,\n errorMessageResource: ErrorMessageResource.giftCardBalanceInquiryFailedErrorMessage,\n errorLocation: ErrorLocation.CheckoutGiftCard\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch,\n errorMessageResource: ErrorMessageResource.giftCardCurrencyMismatchErrorMessage,\n errorLocation: ErrorLocation.CheckoutGiftCard\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion,\n errorMessageResource: ErrorMessageResource.invalidCartVersionErrorMessage,\n errorLocation: ErrorLocation.Checkout\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber,\n errorMessageResource: ErrorMessageResource.invalidLoyaltyCardNumberErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\n errorMessageResource: ErrorMessageResource.invalidPaymentRequestErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\n errorMessageResource: ErrorMessageResource.invalidPaymentRequestConsoleErrorMessage,\n errorLocation: ErrorLocation.Console\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines,\n errorMessageResource: ErrorMessageResource.missingRequiredCartTenderLinesErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed,\n errorMessageResource: ErrorMessageResource.multipleCustomerAccountPaymentsNotAllowedErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender,\n errorMessageResource: ErrorMessageResource.noMoreThanOneLoyaltyTenderErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry,\n errorMessageResource: ErrorMessageResource.noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage,\n errorLocation: ErrorLocation.CheckoutGiftCard\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard,\n errorMessageResource: ErrorMessageResource.noTenderLoyaltyCardErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints,\n errorMessageResource: ErrorMessageResource.notEnoughRewardPointsErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided,\n errorMessageResource: ErrorMessageResource.paymentAlreadyVoidedErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance,\n errorMessageResource: ErrorMessageResource.paymentAmountExceedsGiftBalanceErrorMessage,\n errorLocation: ErrorLocation.CheckoutGiftCard\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\n errorMessageResource: ErrorMessageResource.paymentRequiresMerchantPropertiesErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\n errorMessageResource: ErrorMessageResource.paymentRequiresMerchantPropertiesConsoleErrorMessage,\n errorLocation: ErrorLocation.Console\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount,\n errorMessageResource: ErrorMessageResource.paymentUsingUnauthorizedAccountErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed,\n errorMessageResource: ErrorMessageResource.refundAmountMoreThanAllowedErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment,\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired,\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported,\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment,\n errorMessageResource: ErrorMessageResource.unableToCancelPaymentErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo,\n errorMessageResource: ErrorMessageResource.unableToReadCardTokenInfoErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult,\n errorMessageResource: ErrorMessageResource.unableToRetrieveCardPaymentAcceptResultErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly checkoutErrorsList: ICheckoutError[] = [\n CheckoutErrors.ActionError,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_FraudRisk,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult\n ];\n}\n\nexport async function setCheckoutErrors(\n errorCode: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resources: any,\n isExpressCheckoutApplied: boolean,\n ctx: IActionContext,\n apiError?: string | undefined\n): Promise {\n let clientCheckoutError: ICheckoutError | undefined;\n const consoleCheckoutErrors: ICheckoutError[] = [];\n\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n // find the checkout errors\n for (const checkoutError of CheckoutErrors.checkoutErrorsList) {\n if (errorCode === checkoutError.errorCode) {\n if (checkoutError.errorLocation === ErrorLocation.Console) {\n const consoleCheckoutError: ICheckoutError = {\n errorCode: checkoutError.errorCode,\n errorMessageResource: checkoutError.errorMessageResource,\n errorLocation: checkoutError.errorLocation\n };\n consoleCheckoutErrors.push(consoleCheckoutError);\n } else {\n if (clientCheckoutError) {\n ctx.telemetry.exception(new Error('Invalid number of client checkout errors.'));\n throw new Error('Invalid number of client checkout errors.');\n } else {\n clientCheckoutError = {\n errorCode: checkoutError.errorCode,\n errorMessageResource: checkoutError.errorMessageResource,\n errorLocation: checkoutError.errorLocation\n };\n }\n }\n }\n }\n\n // log the console checkout errors\n for (const consoleCheckoutError of consoleCheckoutErrors) {\n consoleCheckoutError.errorMessage = getCheckoutErrorMessage(resources, consoleCheckoutError.errorMessageResource!, apiError!);\n console.log(consoleCheckoutError.errorMessage);\n }\n\n // handle the client checkout error\n if (clientCheckoutError) {\n clientCheckoutError.errorMessage = getCheckoutErrorMessage(resources, clientCheckoutError.errorMessageResource!, apiError!);\n\n if (isExpressCheckoutApplied && clientCheckoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument) {\n clientCheckoutError.errorLocation = ErrorLocation.Checkout;\n }\n\n await checkoutState.updateCheckoutError({ newCheckoutError: clientCheckoutError });\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: true });\n } else {\n // if could not map to any checkout error(s), show the API error message over generic error\n if (consoleCheckoutErrors.length === 0) {\n const genericError = {\n errorLocation: ErrorLocation.Checkout\n };\n if (apiError) {\n genericError['errorMessage'] = apiError;\n } else {\n genericError['errorMessage'] = resources.genericErrorMessage;\n }\n\n await checkoutState.updateCheckoutError({ newCheckoutError: genericError });\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: true });\n }\n }\n}\n\nexport async function focusOnCheckoutError(checkoutErrorRef: React.RefObject, ctx: IActionContext): Promise {\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n checkoutErrorRef.current && checkoutErrorRef.current.scrollIntoView();\n\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule.None });\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: false });\n}\n\nexport async function setCheckoutErrorFocus(checkoutModuleId: string, ctx: IActionContext): Promise {\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n for (const checkoutModule of Object.keys(CheckoutModule)) {\n if (checkoutModuleId.includes(CheckoutModule[checkoutModule])) {\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule[checkoutModule] });\n return;\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getCheckoutErrorMessage(resources: any, errorMessageResource: ErrorMessageResource, errorMessageFromAPI: string): string {\n const errorResource = Object.keys(resources).find(resource => resource === errorMessageResource);\n // return API error when error resource string is not found in checkout definition file\n return errorResource !== undefined ? resources[errorResource] : errorMessageFromAPI;\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\n/**\n * The payment error.\n */\nexport interface IPaymentError {\n title: string;\n message: string;\n className?: string;\n}\n\n/**\n * The payment error.\n * @param param0 - First param.\n * @param param0.title - Title.\n * @param param0.message - Message.\n * @param param0.className - ClassName.\n * @returns React node.\n */\nexport const ErrorComponent: React.FC = ({ title, message, className = 'ms-checkout-payment-instrument' }) => (\n
\n

{title}

\n

{message}

\n
\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../gift-card-balance-check.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n resources: {\n balanceCheckButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On apply function.\n * @param onApplyGiftCard -On apply gift card.\n * @returns Apply gift card.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number function.\n * @param onEnterGiftCardNumber -On enter gift card number.\n * @returns On gift card enter pin function result.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On change pin function.\n * @param onEnterGiftCardPin -On enter gift card pin.\n * @returns On enter gift card pin function result.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On change exp function.\n * @param onEnterGiftCardExp -On enter gift card.\n * @returns On enter gift card function result.\n */\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n resources: {\n balanceCheckButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-gift-card-balance-check__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-gift-card-balance-check__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-gift-card-balance-check__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-gift-card-balance-check__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-gift-card-balance-check__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {balanceCheckButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { GiftCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: GiftCard;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-gift-card-balance-check__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {` `}({giftCardAvailableBalanceLabel}\n {` `}\n {balance})\n \n );\n\n return {\n itemProps,\n id: giftCard && giftCard.Id,\n selectedGiftCard\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 getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { getForm, IForm } from './components/get-form';\nimport { getItem, IItem } from './components/get-item';\nimport { IGiftCardBalanceCheckProps } from './gift-card-balance-check.props.autogenerated';\n\ninterface IGiftCardBalanceCheckState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n giftCard?: GiftCard;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface IGiftCardBalanceCheckModuleProps extends IGiftCardBalanceCheckProps<{}> {}\n\nexport interface IGiftCardBalanceCheckViewProps extends IGiftCardBalanceCheckProps<{}>, IGiftCardBalanceCheckState {\n className?: string;\n\n form: IForm;\n item?: IItem;\n\n giftCardBalanceCheckProps: IModuleProps;\n\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardPin: string): void;\n enterGiftCardExp?(giftCardExp: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * GiftCardBalanceCheck component.\n * @extends {React.Component}\n */\nexport class GiftCardBalanceCheck extends React.Component {\n public state: IGiftCardBalanceCheckState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n public shouldComponentUpdate(nextProps: IGiftCardBalanceCheckModuleProps, nextState: IGiftCardBalanceCheckState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this._isEnabled()) {\n this.props.context.telemetry.error('Gift card balance check is not supported, module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-gift-card-balance-check', className);\n\n const viewProps: IGiftCardBalanceCheckViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n giftCardBalanceCheckProps: { moduleProps: this.props, className: moduleClassName },\n\n enterGiftCardNumber: this._enterGiftCardNumber,\n enterGiftCardPin: this._enterGiftCardPin,\n enterGiftCardExp: this._enterGiftCardExp,\n applyGiftCard: this._applyGiftCard,\n\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n supportExternalGiftCard,\n additionalFields: showAdditionalFields,\n onEnterGiftCardNumber: this._enterGiftCardNumber,\n onEnterGiftCardPin: this._enterGiftCardPin,\n onEnterGiftCardExp: this._enterGiftCardExp,\n onApplyGiftCard: this._applyGiftCard\n }),\n item:\n this.state.giftCard &&\n getItem({\n giftCard: this.state.giftCard,\n getFormattedPrice: this._getFormattedPrice,\n resources\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly _isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return true;\n };\n\n private readonly _getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly _enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this._clearError();\n };\n\n private readonly _clearError = (): void => {\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly _setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.setState({\n errorMessage\n });\n };\n\n private readonly _applyGiftCard = async (): Promise => {\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this._getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this._getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (giftCard) {\n this._clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false,\n giftCard\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false,\n giftCard: undefined\n });\n };\n\n private readonly _findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly _getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { invalidCardTypeError, noBalanceError, invalidCardInfoError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const internalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (!this.props.context.request.user.isAuthenticated && internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n\n if (isPinRequired && giftCardPin === '') {\n this._setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this._setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this._setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this._setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly _getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, invalidCodeError }\n } = this.props;\n\n if (!giftCardNumber) {\n this._setError(emptyInputError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this._setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this._setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default GiftCardBalanceCheck;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionContext, IActionInput } from '@msdyn365-commerce/core';\n\nimport { IModuleStates } from './module-state.data';\n\n/**\n * GetModulesInput.\n */\nexport class ModuleStatesCacheKey implements IActionInput {\n public getCacheKey = () => 'ModuleState';\n\n public getCacheObjectType = () => 'ModuleState';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport function getModuleStates(ctx: IActionContext): IModuleStates {\n const cacheKey = new ModuleStatesCacheKey();\n\n let moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n if (moduleStates) {\n return moduleStates;\n }\n ctx.update(cacheKey, {});\n moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n return moduleStates;\n}\n\nexport function updateModuleStates(value: IModuleStates, ctx: IActionContext): void {\n const cacheKey = new ModuleStatesCacheKey();\n ctx.update(cacheKey, value);\n}\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IMandsCheckoutDeliveryOptions contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum filterDeliveryModeOption {\r\n none = 'none',\r\n filterOutNonCarrierDeliveryMode = 'filterOutNonCarrierDeliveryMode'\r\n}\r\n\r\nexport interface IMandsCheckoutDeliveryOptionsConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n className?: string;\r\n headerChargesWithoutProration?: boolean;\r\n filterDeliveryModeOption?: filterDeliveryModeOption;\r\n}\r\n\r\nexport interface IMandsCheckoutDeliveryOptionsResources {\r\n deliveryOptionsNotFound: string;\r\n genericErrorMessage: string;\r\n errorMessageTitle: string;\r\n ariaLabelText: string;\r\n priceFree: string;\r\n saveBtnLabel: string;\r\n editBtnLabel: string;\r\n cancelBtnLabel: string;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface IMandsCheckoutDeliveryOptionsProps extends Msdyn365.IModule {\r\n resources: IMandsCheckoutDeliveryOptionsResources;\r\n config: IMandsCheckoutDeliveryOptionsConfig;\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 * as React from 'react';\r\n\r\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\r\n description?: string;\r\n}\r\n\r\n/**\r\n *\r\n * AddPaymentForm SFC\r\n * @extends {React.FC}\r\n */\r\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description }) => {\r\n if (!description) {\r\n return null;\r\n }\r\n\r\n return {description};\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsDescription;\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 * as React from 'react';\r\n\r\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\r\n message?: string;\r\n}\r\n\r\n/**\r\n *\r\n * AddPaymentForm SFC\r\n * @extends {React.FC}\r\n */\r\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\r\n if (!message) {\r\n return null;\r\n }\r\n\r\n return

{message}

;\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsErrorMessage;\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 * as React from 'react';\r\n\r\nexport interface ICheckoutDeliveryOptionsErrorTitleProps {\r\n title?: string;\r\n}\r\n\r\n/**\r\n *\r\n * AddPaymentForm SFC\r\n * @extends {React.FC}\r\n */\r\nconst CheckoutDeliveryOptionsErrorTitle: React.FC = ({ title }) => {\r\n if (!title) {\r\n return null;\r\n }\r\n\r\n return

{title}

;\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsErrorTitle;\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 * as React from 'react';\r\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\r\n isChecked: boolean;\r\n value?: string;\r\n ariaSetSize: number;\r\n ariaPosInSet: number;\r\n ariaLabel?: string;\r\n onChange(event: React.ChangeEvent): void;\r\n}\r\n\r\n/**\r\n *\r\n * AddPaymentForm SFC\r\n * @extends {React.FC}\r\n */\r\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\r\n isChecked,\r\n value,\r\n ariaSetSize,\r\n ariaPosInSet,\r\n ariaLabel,\r\n onChange\r\n}) => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsRadioButton;\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 classname from 'classnames';\r\nimport get from 'lodash/get';\r\nimport { action, observable, reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { Button, IModuleProps, INodeProps, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\r\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { Address, CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { IMandsCheckoutDeliveryOptionsData } from './mands-checkout-delivery-options.data';\r\nimport { IMandsCheckoutDeliveryOptionsProps, filterDeliveryModeOption } from './mands-checkout-delivery-options.props.autogenerated';\r\nimport DescriptionComponent from './components/mands-checkout-delivery-options.description';\r\nimport ErrorMessageComponent from './components/mands-checkout-delivery-options.error-message';\r\nimport ErrorTitleComponent from './components/mands-checkout-delivery-options.error-title';\r\nimport RadioButtonComponent from './components/mands-checkout-delivery-options.radio-button';\r\nimport { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { focusOnCheckoutError } from '../mands-checkout/checkout-errors/checkout-errors';\r\nexport interface ICheckoutDeliveryOptionsModuleProps\r\n extends IMandsCheckoutDeliveryOptionsProps,\r\n IModuleStateProps {}\r\n\r\nexport interface ICheckoutDeliveryOption {\r\n DeliveryOption: INodeProps;\r\n description?: React.ReactNode;\r\n price?: React.ReactNode;\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\r\n code: string;\r\n radioButton?: React.ReactNode;\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionsList {\r\n DeliveryOptionsList: INodeProps;\r\n list: ICheckoutDeliveryOptionEdit[];\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionsError {\r\n Error: INodeProps;\r\n title: React.ReactNode;\r\n message: React.ReactNode;\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionsViewState {\r\n isLoading: boolean;\r\n isError: boolean;\r\n isShowList: boolean;\r\n isShowSelected: boolean;\r\n isShowSaveButton: boolean;\r\n isShowEditButton: boolean;\r\n isShowCancelButton: boolean;\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionsViewProps extends IMandsCheckoutDeliveryOptionsProps<{}> {\r\n CheckoutDeliveryOptions: IModuleProps;\r\n selectedItemId: string;\r\n deliveryOptionsData: DeliveryOption[];\r\n isLoading: boolean;\r\n errorMessageData: string;\r\n viewState: ICheckoutDeliveryOptionsViewState;\r\n deliveryOptions?: ICheckoutDeliveryOptionsList;\r\n deliveryOptionSelected?: ICheckoutDeliveryOption;\r\n errorMessage?: ICheckoutDeliveryOptionsError;\r\n waiting?: React.ReactNode;\r\n saveButton?: React.ReactNode;\r\n editButton?: React.ReactNode;\r\n cancelButton?: React.ReactNode;\r\n onDeliveryOptionChange(event: React.ChangeEvent): void;\r\n onSave(): void;\r\n onEdit(): void;\r\n onCancel(): void;\r\n checkoutErrorRef?: React.RefObject;\r\n}\r\n/**\r\n * FilterDeliveryModeOption enum type.\r\n */\r\nexport const enum FilterDeliveryModeOption {\r\n /**\r\n * The None member.\r\n */\r\n None = 0,\r\n /**\r\n * The FilterOutNonCarrierDeliveryMode member.\r\n */\r\n FilterOutNonCarrierDeliveryMode = 1,\r\n /**\r\n * The DoNotFilterByChannel member.\r\n */\r\n DoNotFilterByChannel = 2\r\n}\r\n/**\r\n *\r\n * CheckoutDeliveryOptions component\r\n * @extends {React.Component>}\r\n */\r\n// @ts-ignore\r\n@withModuleState\r\n@observer\r\nclass CheckoutDeliveryOptions extends React.Component {\r\n @observable private selectedItemId: string = '';\r\n @observable private deliveryOptions: DeliveryOption[] = [];\r\n @observable private isLoading: boolean = false;\r\n @observable private errorMessage?: string;\r\n // VSI upgraded - START\r\n private cartDeliveryMode?: string;\r\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\r\n public get expressPaymentDetailsFromCartPage() {\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const properties =\r\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\r\n ?.StringValue ?? '';\r\n return properties ? JSON.parse(properties) : null;\r\n }\r\n public get isExpressPaymentAppliedInCartPage(): boolean {\r\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\r\n }\r\n public async componentDidMount(): Promise {\r\n this.props.data.checkout.then(async () => {\r\n await this.init();\r\n });\r\n\r\n // @ts-ignore: Compiler not reconizing condition check for function params\r\n reaction(\r\n () => this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress,\r\n async () => {\r\n await this.loadDeliveryOptions();\r\n this.props.moduleState.setIsCancellable(false);\r\n }\r\n );\r\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\r\n reaction(\r\n () => this.props.data.checkout.result?.checkoutError,\r\n checkoutError => {\r\n if (\r\n checkoutError &&\r\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\r\n checkoutError.errorMessage\r\n ) {\r\n this.setError(checkoutError.errorMessage);\r\n }\r\n }\r\n );\r\n reaction(\r\n () => this.props.data.checkout.result?.checkoutErrorFocus,\r\n checkoutErrorFocus => {\r\n if (checkoutErrorFocus === CheckoutModule.CheckoutDeliveryOptions) {\r\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n /* VSI upgraded - END */\r\n public render(): JSX.Element | null {\r\n if (!this.canShip()) {\r\n return null;\r\n }\r\n const {\r\n moduleState: { isReady, isUpdating, hasError }\r\n } = this.props;\r\n console.log('delivery option');\r\n const isError = !this.isLoading && hasError;\r\n const isShowList = !this.isLoading && !hasError && isUpdating;\r\n const isShowSelected = !this.isLoading && !hasError && isReady;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n onDeliveryOptionChange: this.onDeliveryOptionChange,\r\n selectedItemId: this.selectedItemId,\r\n deliveryOptionsData: this.deliveryOptions,\r\n isLoading: this.isLoading,\r\n errorMessageData: this.errorMessage,\r\n viewState: {\r\n isLoading: this.isLoading,\r\n isError: isError,\r\n isShowList: isShowList,\r\n isShowSelected: isShowSelected,\r\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\r\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\r\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\r\n },\r\n CheckoutDeliveryOptions: {\r\n moduleProps: this.props,\r\n className: classname('ms-checkout-delivery-options', this.props.config.className)\r\n },\r\n deliveryOptions: {\r\n // @ts-ignore\r\n DeliveryOptionsList: {\r\n className: 'ms-checkout-delivery-options__list'\r\n },\r\n list: this.getDeliveryOptionList()\r\n },\r\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\r\n errorMessage: this.getErrorMessage(),\r\n waiting: ,\r\n checkoutErrorRef: this.checkoutErrorRef,\r\n saveButton: this.getSaveButton(),\r\n editButton: this.getEditButton(),\r\n cancelButton: this.getCancelButton(),\r\n onSave: this.onSave,\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n @action\r\n private init = async (): Promise => {\r\n this.props.moduleState.init({\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel,\r\n onSubmit: this.onSubmit,\r\n status: this.canShip() ? 'updating' : 'disabled'\r\n });\r\n /* VSI upgraded - START - To get saced delivery options on page reloading */\r\n this.cartDeliveryMode = this.getSavedDeliveryOption();\r\n await this.loadDeliveryOptions();\r\n /* VSI upgraded - END */\r\n };\r\n\r\n private canShip = (): boolean => {\r\n return this.getCartLinesForShipping().length > 0;\r\n };\r\n\r\n private getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\r\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\r\n if (!selectedItem) {\r\n return null;\r\n }\r\n\r\n const { id, typeName, context } = this.props;\r\n const { priceFree } = this.props.resources;\r\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\r\n const channelConfig = this.props.context.request.channel;\r\n\r\n // @ts-ignore\r\n return {\r\n // @ts-ignore\r\n DeliveryOption: {\r\n className: 'ms-checkout-delivery-options__option-selected'\r\n },\r\n description: ,\r\n price: (\r\n \r\n )\r\n };\r\n };\r\n\r\n private getErrorMessage = (): ICheckoutDeliveryOptionsError => {\r\n const { errorMessageTitle } = this.props.resources;\r\n return {\r\n // @ts-ignore\r\n CheckoutDeliveryOptionsError: {\r\n tag: 'span',\r\n className: 'ms-address-form__error',\r\n role: 'alert',\r\n 'aria-live': 'assertive'\r\n },\r\n title: ,\r\n message: \r\n };\r\n };\r\n\r\n private getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\r\n const count = this.deliveryOptions.length;\r\n const { priceFree } = this.props.resources;\r\n const { id, typeName, context } = this.props;\r\n const channelConfig = this.props.context.request.channel;\r\n\r\n // @ts-ignore\r\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\r\n return {\r\n // @ts-ignore\r\n DeliveryOption: { className: 'ms-checkout-delivery-options__option' },\r\n code: deliveryOption.Code || '',\r\n radioButton: (\r\n \r\n ),\r\n description: (\r\n \r\n ),\r\n price: (\r\n \r\n )\r\n };\r\n });\r\n };\r\n\r\n private getSaveButton = (): React.ReactNode => {\r\n const { saveBtnLabel = 'Save' } = this.props.resources;\r\n return (\r\n \r\n {saveBtnLabel}\r\n \r\n );\r\n };\r\n\r\n private getEditButton = (): React.ReactNode => {\r\n const { editBtnLabel = 'Change' } = this.props.resources;\r\n return (\r\n \r\n );\r\n };\r\n\r\n private getCancelButton = (): React.ReactNode => {\r\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\r\n return (\r\n \r\n );\r\n };\r\n\r\n private setError = (errorMessage: string): void => {\r\n this.props.telemetry.error(errorMessage);\r\n this.props.moduleState.setHasError(true);\r\n this.props.moduleState.onUpdating();\r\n this.errorMessage = errorMessage;\r\n };\r\n\r\n private clearError = (): void => {\r\n this.props.moduleState.setHasError(false);\r\n this.errorMessage = undefined;\r\n };\r\n\r\n private onSave = (): void => {\r\n this.onSubmit();\r\n };\r\n\r\n private onEdit = (): void => {\r\n this.props.telemetry.information('Delivery options onEdit is called.');\r\n this.clearError();\r\n this.onUpdating();\r\n };\r\n\r\n private onSubmit = (): void => {\r\n this.props.telemetry.information('Delivery options onSubmit is called.');\r\n /* VSI upgraded - 10.0.14 - START */\r\n // tslint:disable-next-line:no-floating-promises\r\n this.updateCartDeliverySpecification(this.selectedItemId);\r\n /* VSI upgraded - 10.0.14 - END */\r\n };\r\n\r\n private onCancel = (): void => {\r\n this.props.telemetry.information('Delivery options onCancel is called.');\r\n // Reset to the saved value\r\n const savedDeliveryOption = this.getSavedDeliveryOption();\r\n if (savedDeliveryOption) {\r\n this.selectedItemId = savedDeliveryOption;\r\n this.onReady();\r\n } else {\r\n this.onUpdating();\r\n }\r\n };\r\n\r\n private getSavedDeliveryOption = (): string | undefined => {\r\n const cartLinesForShipping = this.getCartLinesForShipping();\r\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\r\n };\r\n /* VSI upgraded - START - Updated following function and removed unused updateCartLineDeliverySpecification() function */\r\n private updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\r\n if (deliveryModeId.trim() === '') {\r\n return;\r\n }\r\n\r\n const { resources } = this.props;\r\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\r\n const updateCartDeliverySpecificationInput = {\r\n deliveryModeId: deliveryModeId,\r\n shippingAddress: checkoutState.shippingAddress\r\n };\r\n\r\n this.clearError();\r\n this.onPending();\r\n\r\n await checkoutState.checkoutCart\r\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\r\n .then(response => {\r\n if (response.status === 'FAILED') {\r\n const errorMessage = `${response.errorDetails?.LocalizedMessage}`;\r\n // this.setError(resources.genericErrorMessage);\r\n this.setError(StringExtensions.isNullOrEmpty(errorMessage) ? resources.genericErrorMessage : errorMessage);\r\n } else {\r\n this.onReady();\r\n this.props.moduleState.setIsCancellable(true);\r\n }\r\n this.onReady();\r\n this.props.moduleState.setIsCancellable(true);\r\n })\r\n .catch(() => {\r\n this.setError(resources.genericErrorMessage);\r\n });\r\n };\r\n /* VSI upgraded - START - */\r\n private getCartLinesForShipping = (): CartLine[] => {\r\n const { request } = this.props.context;\r\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\r\n return ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode !== pickupDeliveryModeCode : cartLine\r\n );\r\n };\r\n private getDeliveryOptions = async (shippingAddress: Address): Promise => {\r\n if (!this.props.data.checkout.result) {\r\n return;\r\n }\r\n const { context, resources, config } = this.props;\r\n const cartState = this.props.data.checkout.result?.checkoutCart;\r\n const cartId = (cartState.cart as Cart).Id;\r\n if (context) {\r\n this.isLoading = true;\r\n this.deliveryOptions = [];\r\n this.selectedItemId = '';\r\n this.clearError();\r\n try {\r\n let originalDeliveryMode: string = '';\r\n const shippingCartLines = this.getCartLinesForShipping();\r\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\r\n if (hasShippingDeliveryLines) {\r\n // first store the delivery mode, so that we can restore the shipping information.\r\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\r\n // clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\r\n const cart = cartState.cart;\r\n await cartState.clearCartLinesDeliveryInformation({ cart });\r\n }\r\n // TODO: Check if we can move this getDeliveryOptions to checkout state\r\n let deliveryOptionFilter: FilterDeliveryModeOption;\r\n switch (config.filterDeliveryModeOption) {\r\n case filterDeliveryModeOption.none:\r\n deliveryOptionFilter = FilterDeliveryModeOption.None;\r\n break;\r\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\r\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\r\n break;\r\n default:\r\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\r\n }\r\n const response = await getDeliveryOptionsAsync(\r\n { callerContext: context.actionContext, queryResultSettings: {} },\r\n cartId,\r\n shippingAddress,\r\n [],\r\n deliveryOptionFilter,\r\n true\r\n );\r\n if (hasShippingDeliveryLines) {\r\n await this.updateCartDeliverySpecification(originalDeliveryMode);\r\n }\r\n if (response && response.length) {\r\n this.deliveryOptions = response;\r\n }\r\n } catch (error) {\r\n this.setError(resources.genericErrorMessage);\r\n }\r\n if (this.deliveryOptions.length === 0) {\r\n this.setError(resources.deliveryOptionsNotFound);\r\n } else {\r\n /* START VSI Customization - {change in the condition of if !ShippingAddress to ShippingAddress} */\r\n if (\r\n this.cartDeliveryMode &&\r\n this.isDeliveryModeExists(this.cartDeliveryMode) &&\r\n this.props.data.checkout.result?.checkoutCart.cart.ShippingAddress\r\n ) {\r\n this.selectedItemId = this.cartDeliveryMode;\r\n this.cartDeliveryMode = undefined;\r\n this.onReady();\r\n } else {\r\n this.onUpdating();\r\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\r\n }\r\n /* END VSI Customization - {change in the condition of if !ShippingAddress to ShippingAddress} */\r\n }\r\n this.isLoading = false;\r\n }\r\n };\r\n // Added following function\r\n private isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\r\n if (deliveryMode) {\r\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n // Updated following function\r\n private loadDeliveryOptions = async (): Promise => {\r\n const shippingAddress = this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress;\r\n if (this.canShip() && shippingAddress) {\r\n await this.getDeliveryOptions(shippingAddress);\r\n }\r\n };\r\n /* VSi upgraded - END */\r\n private onDeliveryOptionChange = (event: React.ChangeEvent) => {\r\n const deliveryModeId = event.currentTarget.value;\r\n this.selectedItemId = deliveryModeId;\r\n };\r\n\r\n private onReady = () => {\r\n this.props.moduleState.onReady();\r\n };\r\n\r\n private onUpdating = () => {\r\n this.props.moduleState.onUpdating();\r\n };\r\n\r\n private onPending = () => {\r\n this.props.moduleState.onPending();\r\n };\r\n}\r\n\r\nexport default CheckoutDeliveryOptions;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\nimport { checkoutAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { getTenderTypesAsync, resolveCardTypesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n Address,\n CardPaymentAcceptResult,\n CardType,\n CartTenderLine,\n RetailOperation,\n SalesOrder,\n TenderType,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nexport const OPERATIONS = {\n PayCard: 201,\n PayGiftCertificate: 214,\n PayLoyalty: 207,\n PayCustomerAccount: 202\n};\n\nconst getCardTypeId = async (ctx: IActionContext, cardPrefix: string = ''): Promise => {\n try {\n const response = await resolveCardTypesAsync({ callerContext: ctx }, cardPrefix, CardType.Unknown);\n if (response && response.length > 0) {\n return response[0].TypeId;\n }\n } catch (error) {\n ctx.telemetry.error('Call to resolveCardTypesAsync failed.', error);\n }\n return undefined;\n};\n\nconst findTenderIdTypeByOperationId = (tenderTypes: TenderType[], operationId: RetailOperation): string | undefined => {\n const matchedTenderType = tenderTypes.find(tenderType => tenderType.OperationId === operationId);\n if (matchedTenderType) {\n return matchedTenderType.TenderTypeId;\n }\n return;\n};\n\nconst roundNumber = (value: number) => Number(value.toFixed(2));\n\nasync function getLoyaltyTenderLine(\n ctx: IActionContext,\n LoyaltyCardId: string,\n Amount: number = 0,\n Currency: string = 'USD'\n): Promise {\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\n throw error;\n });\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayLoyalty);\n return {\n // @ts-expect-error\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\n\n 'Amount@odata.type': '#Decimal',\n Currency,\n TenderTypeId,\n Amount,\n LoyaltyCardId\n };\n}\n\nasync function getGiftCardTenderLine(\n ctx: IActionContext,\n GiftCardId: string = '',\n Amount: number = 0,\n Currency: string = 'USD',\n tenderTypeId?: string,\n giftCardPin?: string,\n giftCardExpirationYear?: number,\n giftCardExpirationMonth?: number\n): Promise {\n let TenderTypeId = tenderTypeId;\n\n if (!TenderTypeId) {\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\n throw error;\n });\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayGiftCertificate);\n }\n\n const GiftCardPin = giftCardPin;\n const GiftCardExpirationYear = giftCardExpirationYear;\n const GiftCardExpirationMonth = giftCardExpirationMonth;\n return {\n // @ts-expect-error\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\n 'Amount@odata.type': '#Decimal',\n Currency,\n TenderTypeId,\n Amount,\n GiftCardId,\n GiftCardPin,\n GiftCardExpirationYear,\n GiftCardExpirationMonth\n };\n}\n\nasync function getCreditCardTenderLine(\n ctx: IActionContext,\n tokenizedPaymentCard: TokenizedPaymentCard,\n cardPrefix: string = '',\n Amount: number = 0,\n Currency: string = 'USD',\n billingAddress?: Address\n): Promise {\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\n throw error;\n });\n\n let cartTypeId = tokenizedPaymentCard.CardTypeId;\n\n if (!cartTypeId) {\n cartTypeId = await getCardTypeId(ctx, cardPrefix);\n }\n\n if (!tenderTypes) {\n throw new Error('Fail to get card tender type');\n }\n\n if (!cartTypeId) {\n throw new Error('Fail to get card type id');\n }\n\n const TenderTypeId = tokenizedPaymentCard.TenderType ?? findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\n const cardTenderLine: CartTenderLine = {\n // @ts-expect-error\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\n 'Amount@odata.type': '#Decimal',\n Currency,\n Amount,\n TenderTypeId,\n CardTypeId: cartTypeId\n };\n cardTenderLine.TokenizedPaymentCard = {\n ...tokenizedPaymentCard,\n CardTypeId: cartTypeId,\n\n // @ts-expect-error\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\n House: tokenizedPaymentCard.House || 'N/A',\n ...(tokenizedPaymentCard.CardTokenInfo && {\n CardTokenInfo: {\n ...tokenizedPaymentCard.CardTokenInfo,\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardTokenInfo'\n }\n }),\n ...(billingAddress && {\n Phone: billingAddress.Phone,\n Country: billingAddress.ThreeLetterISORegionName,\n Address1: billingAddress.Street,\n City: billingAddress.City,\n State: billingAddress.State,\n Zip: billingAddress.ZipCode\n })\n };\n\n return cardTenderLine;\n}\n\n/**\n * Get credit card tender line.\n * @param context - Action context.\n * @param amount - Due amount for credit card.\n * @param currency - Currency.\n * @param cardPaymentAcceptResult - CardPaymentAcceptResult.\n * @param billingAddress - BillingAddress.\n * @returns - The credit card tender line.\n */\nasync function getCreditCardTenderLineForSinglePaymentAuth(\n context: IActionContext,\n amount: number = 0,\n currency: string = 'USD',\n cardPaymentAcceptResult?: CardPaymentAcceptResult,\n billingAddress?: Address\n): Promise {\n const tenderTypes = await getTenderTypesAsync({ callerContext: context, queryResultSettings: {} }).catch(error => {\n throw error;\n });\n\n const tenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\n\n if (cardPaymentAcceptResult) {\n cardPaymentAcceptResult.TokenizedPaymentCard = {\n // @ts-expect-error\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\n House: 'N/A',\n ...(billingAddress && {\n Phone: billingAddress.Phone,\n Country: billingAddress.ThreeLetterISORegionName,\n Address1: billingAddress.Street,\n City: billingAddress.City,\n State: billingAddress.State,\n Zip: billingAddress.ZipCode\n })\n };\n }\n\n const cardTenderLine: CartTenderLine = {\n // @ts-expect-error -- existing data.\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\n 'Amount@odata.type': '#Decimal',\n Currency: currency,\n Amount: amount,\n TenderTypeId: tenderTypeId,\n CardPaymentAcceptResult: cardPaymentAcceptResult\n };\n\n return cardTenderLine;\n}\n\nasync function createCustomerAccountTenderLine(ctx: IActionContext, Amount: number, Currency: string = 'USD'): Promise {\n const CustomerId = null;\n if (!ctx.requestContext.user.isAuthenticated) {\n ctx.telemetry.error('A customer id is required to pay with customer account');\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\n throw error;\n });\n\n if (!tenderTypes) {\n ctx.telemetry.error('No tender types found for this channel');\n }\n\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCustomerAccount);\n if (!TenderTypeId) {\n ctx.telemetry.error('No customer account tender type');\n }\n return {\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\n 'Amount@odata.type': '#Decimal',\n Currency,\n TenderTypeId,\n Amount,\n\n // @ts-expect-error\n CustomerId\n };\n}\n\nexport const CartCheckout = async (\n ctx: IActionContext,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n): Promise => {\n const checkoutState = await getCheckoutState(ctx).catch(error => {\n throw error;\n });\n\n const cartState = checkoutState.checkoutCart;\n\n const channelConfiguration = ctx.requestContext.channel;\n\n if (!cartState || Object.keys(cartState).length === 0 || !channelConfiguration) {\n throw new Error('Fail to placeOrder');\n }\n\n const {\n giftCardExtends,\n tokenizedPaymentCard,\n cardPrefix,\n guestCheckoutEmail,\n billingAddress,\n loyaltyAmount,\n cardPaymentAcceptResult,\n shouldEnableSinglePaymentAuthorizationCheckout,\n isExpressCheckoutApplied,\n isExpressAddressApplied\n } = checkoutState;\n const { Currency } = channelConfiguration;\n\n let amountDue = cartState.cart.AmountDue || 0;\n let cartTenderLines;\n const getTenderLinePromises = [];\n const loyaltyCardNumber = cartState.cart.LoyaltyCardId;\n\n // Pay by loyalty first\n if (loyaltyAmount && loyaltyCardNumber) {\n const chargedAmount = roundNumber(Math.min(loyaltyAmount, amountDue));\n const loyaltyTenderLinePromise = getLoyaltyTenderLine(ctx, loyaltyCardNumber, chargedAmount, Currency);\n getTenderLinePromises.push(loyaltyTenderLinePromise);\n amountDue = roundNumber(amountDue - chargedAmount);\n\n ctx.telemetry.information('Checkout loyalty tender line is added.');\n } else {\n ctx.telemetry.information('Checkout loyalty tender line is not added when no loyaltyAmount or loyaltyCardNumber.');\n }\n\n // Then by customer account\n if (checkoutState.customerAccountAmount > 0) {\n const chargedAmount = roundNumber(Math.min(checkoutState.customerAccountAmount, amountDue));\n const customerAccountTenderLinePromise = createCustomerAccountTenderLine(ctx, chargedAmount, Currency);\n getTenderLinePromises.push(customerAccountTenderLinePromise);\n amountDue = roundNumber(amountDue - chargedAmount);\n\n ctx.telemetry.information('Checkout customer account amount tender line is added.');\n } else {\n ctx.telemetry.information('Checkout customer account amount tender line is not added when customerAccountAmount is 0.');\n }\n\n // Then by gift card\n if (giftCardExtends && giftCardExtends.length > 0) {\n giftCardExtends.some(giftCardExtend => {\n if (giftCardExtend.Balance && amountDue > 0) {\n const chargedAmount = roundNumber(Math.min(giftCardExtend.Balance, amountDue));\n const tenderTypeId = giftCardExtend.TenderTypeId;\n const giftCardPin = giftCardExtend.Pin;\n const giftCardExpirationYear = giftCardExtend.ExpirationDate\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[1], 10)\n : undefined;\n const giftCardExpirationMonth = giftCardExtend.ExpirationDate\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[0], 10)\n : undefined;\n const creditCardTenderLinePromise = getGiftCardTenderLine(\n ctx,\n giftCardExtend.Id,\n chargedAmount,\n Currency,\n tenderTypeId,\n giftCardPin,\n giftCardExpirationYear,\n giftCardExpirationMonth\n );\n getTenderLinePromises.push(creditCardTenderLinePromise);\n amountDue = roundNumber(amountDue - chargedAmount);\n\n ctx.telemetry.information('Checkout gift card tender line is added.');\n } else {\n ctx.telemetry.information('Checkout gift card tender line is not added when no balance or no remaining balance.');\n }\n return amountDue === 0;\n });\n }\n\n // Pay the rest by credit card\n if (amountDue > 0) {\n let creditCardTenderLinePromise: Promise;\n\n if (\n shouldEnableSinglePaymentAuthorizationCheckout &&\n (!(isExpressCheckoutApplied && !isExpressAddressApplied) || (isExpressCheckoutApplied && isPaymentVerificationRedirection))\n ) {\n creditCardTenderLinePromise = getCreditCardTenderLineForSinglePaymentAuth(\n ctx,\n amountDue,\n Currency,\n cardPaymentAcceptResult,\n billingAddress\n );\n } else {\n if (!tokenizedPaymentCard) {\n throw new Error('Fail to placeOrder: no token found');\n }\n creditCardTenderLinePromise = getCreditCardTenderLine(\n ctx,\n tokenizedPaymentCard,\n cardPrefix,\n amountDue,\n Currency,\n billingAddress\n );\n }\n\n getTenderLinePromises.push(creditCardTenderLinePromise);\n\n ctx.telemetry.information('Checkout credit card tender line is added.');\n } else {\n ctx.telemetry.information('Checkout credit card tender line is not added when no remaining balance for credit card.');\n }\n\n if (getTenderLinePromises.length > 0) {\n // When payment methods is required\n cartTenderLines = await Promise.all(getTenderLinePromises).catch(error => {\n throw error;\n });\n\n if (!cartTenderLines || cartTenderLines.length === 0) {\n throw new Error('Fail to placeOrder: fail to get cart tender lines');\n }\n } else {\n ctx.telemetry.information('TenderLinePromises length is 0.');\n }\n\n const cartVersion = updatedCartVersion || cartState.cart.Version;\n\n ctx.telemetry.information('Checkout checkoutAsync is called.');\n\n // Proceed checkout\n const salesOrder = await checkoutAsync(\n { callerContext: ctx, bypassCache: 'get' },\n cartState.cart.Id,\n guestCheckoutEmail,\n undefined,\n undefined,\n cartTenderLines || null,\n cartVersion\n ).catch(async error => {\n if (checkoutState.shouldEnableSinglePaymentAuthorizationCheckout) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\n if (error.data?.AdditionalContext) {\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is sent for single payment auth.');\n\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\n await checkoutState.updateRedirectAdditionalContext({\n newRedirectAdditionalContext: error?.data?.AdditionalContext as string\n });\n await checkoutState.updateRedirectPaymentConnectorId({\n newRedirectPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\n });\n } else {\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is not sent for single payment auth.');\n\n await checkoutState.updateIsCheckoutCallFailed({ newIsCheckoutCallFailed: true });\n\n await checkoutState.updateCheckoutErrorPaymentConnectorId({\n newCheckoutErrorPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\n });\n\n if (isPaymentVerificationRedirection) {\n ctx.telemetry.warning('RefreshCart when isPaymentVerificationRedirection is true.');\n\n await checkoutState.checkoutCart.refreshCart({});\n await checkoutState.updateIsExpressCheckoutApplied({ newIsExpressCheckoutApplied: false });\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n }\n }\n\n throw error;\n });\n\n if (!salesOrder) {\n ctx.telemetry.error('Failed to placeOrder: fail to checkout.');\n throw new Error('Fail to placeOrder: fail to checkout');\n }\n\n return salesOrder;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order 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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { checkoutAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { getTenderTypesAsync, resolveCardTypesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport {\r\n Address,\r\n CardPaymentAcceptResult,\r\n CardType,\r\n CartTenderLine,\r\n RetailOperation,\r\n SalesOrder,\r\n TenderType,\r\n TokenizedPaymentCard\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nexport const OPERATIONS = {\r\n PayCard: 201,\r\n PayGiftCertificate: 214,\r\n PayLoyalty: 207,\r\n PayCustomerAccount: 202\r\n};\r\n\r\nconst getCardTypeId = async (ctx: IActionContext, cardPrefix: string = ''): Promise => {\r\n try {\r\n const response = await resolveCardTypesAsync({ callerContext: ctx }, cardPrefix, CardType.Unknown);\r\n if (response && response.length > 0) {\r\n return response[0].TypeId;\r\n }\r\n } catch (error) {\r\n ctx.telemetry.error('Call to resolveCardTypesAsync failed.', error);\r\n }\r\n return undefined;\r\n};\r\n\r\nconst findTenderIdTypeByOperationId = (tenderTypes: TenderType[], operationId: RetailOperation): string | undefined => {\r\n const matchedTenderType = tenderTypes.find(tenderType => tenderType.OperationId === operationId);\r\n if (matchedTenderType) {\r\n return matchedTenderType.TenderTypeId;\r\n }\r\n return;\r\n};\r\n\r\nconst roundNumber = (value: number) => Number(value.toFixed(2));\r\n\r\nasync function getLoyaltyTenderLine(\r\n ctx: IActionContext,\r\n LoyaltyCardId: string,\r\n Amount: number = 0,\r\n Currency: string = 'USD'\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayLoyalty);\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n LoyaltyCardId\r\n };\r\n}\r\n\r\nasync function getGiftCardTenderLine(\r\n ctx: IActionContext,\r\n GiftCardId: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n tenderTypeId?: string,\r\n giftCardPin?: string,\r\n giftCardExpirationYear?: number,\r\n giftCardExpirationMonth?: number\r\n): Promise {\r\n let TenderTypeId = tenderTypeId;\r\n\r\n if (!TenderTypeId) {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayGiftCertificate);\r\n }\r\n\r\n const GiftCardPin = giftCardPin;\r\n const GiftCardExpirationYear = giftCardExpirationYear;\r\n const GiftCardExpirationMonth = giftCardExpirationMonth;\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n GiftCardId,\r\n GiftCardPin,\r\n GiftCardExpirationYear,\r\n GiftCardExpirationMonth\r\n };\r\n}\r\n\r\nasync function getCreditCardTenderLine(\r\n ctx: IActionContext,\r\n tokenizedPaymentCard: TokenizedPaymentCard,\r\n cardPrefix: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n billingAddress?: Address\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n let cartTypeId = tokenizedPaymentCard.CardTypeId;\r\n\r\n if (!cartTypeId) {\r\n cartTypeId = await getCardTypeId(ctx, cardPrefix);\r\n }\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get card tender type');\r\n }\r\n\r\n if (!cartTypeId) {\r\n throw new Error('Fail to get card type id');\r\n }\r\n\r\n const TenderTypeId = tokenizedPaymentCard.TenderType ?? findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n Amount,\r\n TenderTypeId,\r\n CardTypeId: cartTypeId\r\n };\r\n cardTenderLine.TokenizedPaymentCard = {\r\n ...tokenizedPaymentCard,\r\n CardTypeId: cartTypeId,\r\n\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: tokenizedPaymentCard.House || 'N/A',\r\n ...(tokenizedPaymentCard.CardTokenInfo && {\r\n CardTokenInfo: {\r\n ...tokenizedPaymentCard.CardTokenInfo,\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardTokenInfo'\r\n }\r\n }),\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\n/**\r\n * Get credit card tender line.\r\n * @param context - Action context.\r\n * @param amount - Due amount for credit card.\r\n * @param currency - Currency.\r\n * @param cardPaymentAcceptResult - CardPaymentAcceptResult.\r\n * @param billingAddress - BillingAddress.\r\n * @returns - The credit card tender line.\r\n */\r\nasync function getCreditCardTenderLineForSinglePaymentAuth(\r\n context: IActionContext,\r\n amount: number = 0,\r\n currency: string = 'USD',\r\n cardPaymentAcceptResult?: CardPaymentAcceptResult,\r\n billingAddress?: Address\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: context, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n const tenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n\r\n if (cardPaymentAcceptResult) {\r\n cardPaymentAcceptResult.TokenizedPaymentCard = {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: 'N/A',\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n }\r\n\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error -- existing data.\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency: currency,\r\n Amount: amount,\r\n TenderTypeId: tenderTypeId,\r\n CardPaymentAcceptResult: cardPaymentAcceptResult\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\nasync function createCustomerAccountTenderLine(ctx: IActionContext, Amount: number, Currency: string = 'USD'): Promise {\r\n const CustomerId = null;\r\n if (!ctx.requestContext.user.isAuthenticated) {\r\n ctx.telemetry.error('A customer id is required to pay with customer account');\r\n }\r\n\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n ctx.telemetry.error('No tender types found for this channel');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCustomerAccount);\r\n if (!TenderTypeId) {\r\n ctx.telemetry.error('No customer account tender type');\r\n }\r\n return {\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n\r\n // @ts-expect-error\r\n CustomerId\r\n };\r\n}\r\n\r\nexport const CartCheckout = async (\r\n ctx: IActionContext,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean\r\n): Promise => {\r\n const checkoutState = await getCheckoutState(ctx).catch(error => {\r\n throw error;\r\n });\r\n\r\n const cartState = checkoutState.checkoutCart;\r\n\r\n const channelConfiguration = ctx.requestContext.channel;\r\n\r\n if (!cartState || Object.keys(cartState).length === 0 || !channelConfiguration) {\r\n throw new Error('Fail to placeOrder');\r\n }\r\n\r\n const {\r\n giftCardExtends,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n guestCheckoutEmail,\r\n billingAddress,\r\n loyaltyAmount,\r\n cardPaymentAcceptResult,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n isExpressCheckoutApplied,\r\n isExpressAddressApplied\r\n } = checkoutState;\r\n const { Currency } = channelConfiguration;\r\n\r\n let amountDue = cartState.cart.AmountDue || 0;\r\n let cartTenderLines;\r\n const getTenderLinePromises = [];\r\n const loyaltyCardNumber = cartState.cart.LoyaltyCardId;\r\n\r\n // Pay by loyalty first\r\n if (loyaltyAmount && loyaltyCardNumber) {\r\n const chargedAmount = roundNumber(Math.min(loyaltyAmount, amountDue));\r\n const loyaltyTenderLinePromise = getLoyaltyTenderLine(ctx, loyaltyCardNumber, chargedAmount, Currency);\r\n getTenderLinePromises.push(loyaltyTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout loyalty tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout loyalty tender line is not added when no loyaltyAmount or loyaltyCardNumber.');\r\n }\r\n\r\n // Then by customer account\r\n if (checkoutState.customerAccountAmount > 0) {\r\n const chargedAmount = roundNumber(Math.min(checkoutState.customerAccountAmount, amountDue));\r\n const customerAccountTenderLinePromise = createCustomerAccountTenderLine(ctx, chargedAmount, Currency);\r\n getTenderLinePromises.push(customerAccountTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout customer account amount tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout customer account amount tender line is not added when customerAccountAmount is 0.');\r\n }\r\n\r\n // Then by gift card\r\n if (giftCardExtends && giftCardExtends.length > 0) {\r\n giftCardExtends.some(giftCardExtend => {\r\n if (giftCardExtend.Balance && amountDue > 0) {\r\n const chargedAmount = roundNumber(Math.min(giftCardExtend.Balance, amountDue));\r\n const tenderTypeId = giftCardExtend.TenderTypeId;\r\n const giftCardPin = giftCardExtend.Pin;\r\n const giftCardExpirationYear = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[1], 10)\r\n : undefined;\r\n const giftCardExpirationMonth = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[0], 10)\r\n : undefined;\r\n const creditCardTenderLinePromise = getGiftCardTenderLine(\r\n ctx,\r\n giftCardExtend.Id,\r\n chargedAmount,\r\n Currency,\r\n tenderTypeId,\r\n giftCardPin,\r\n giftCardExpirationYear,\r\n giftCardExpirationMonth\r\n );\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout gift card tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout gift card tender line is not added when no balance or no remaining balance.');\r\n }\r\n return amountDue === 0;\r\n });\r\n }\r\n\r\n // Pay the rest by credit card\r\n if (amountDue > 0) {\r\n let creditCardTenderLinePromise: Promise;\r\n\r\n if (\r\n shouldEnableSinglePaymentAuthorizationCheckout &&\r\n (!(isExpressCheckoutApplied && !isExpressAddressApplied) || (isExpressCheckoutApplied && isPaymentVerificationRedirection))\r\n ) {\r\n creditCardTenderLinePromise = getCreditCardTenderLineForSinglePaymentAuth(\r\n ctx,\r\n amountDue,\r\n Currency,\r\n cardPaymentAcceptResult,\r\n billingAddress\r\n );\r\n } else {\r\n if (!tokenizedPaymentCard) {\r\n throw new Error('Fail to placeOrder: no token found');\r\n }\r\n creditCardTenderLinePromise = getCreditCardTenderLine(\r\n ctx,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n amountDue,\r\n Currency,\r\n billingAddress\r\n );\r\n }\r\n\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n\r\n ctx.telemetry.information('Checkout credit card tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout credit card tender line is not added when no remaining balance for credit card.');\r\n }\r\n\r\n if (getTenderLinePromises.length > 0) {\r\n // When payment methods is required\r\n cartTenderLines = await Promise.all(getTenderLinePromises).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!cartTenderLines || cartTenderLines.length === 0) {\r\n throw new Error('Fail to placeOrder: fail to get cart tender lines');\r\n }\r\n } else {\r\n ctx.telemetry.information('TenderLinePromises length is 0.');\r\n }\r\n\r\n const cartVersion = updatedCartVersion || cartState.cart.Version;\r\n\r\n ctx.telemetry.information('Checkout checkoutAsync is called.');\r\n\r\n // Proceed checkout\r\n const salesOrder = await checkoutAsync(\r\n { callerContext: ctx, bypassCache: 'get' },\r\n cartState.cart.Id,\r\n guestCheckoutEmail,\r\n undefined,\r\n undefined,\r\n cartTenderLines || null,\r\n cartVersion\r\n ).catch(async error => {\r\n if (checkoutState.shouldEnableSinglePaymentAuthorizationCheckout) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n if (error.data?.AdditionalContext) {\r\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is sent for single payment auth.');\r\n\r\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n await checkoutState.updateRedirectAdditionalContext({\r\n newRedirectAdditionalContext: error?.data?.AdditionalContext as string\r\n });\r\n await checkoutState.updateRedirectPaymentConnectorId({\r\n newRedirectPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\r\n });\r\n } else {\r\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is not sent for single payment auth.');\r\n\r\n await checkoutState.updateIsCheckoutCallFailed({ newIsCheckoutCallFailed: true });\r\n\r\n await checkoutState.updateCheckoutErrorPaymentConnectorId({\r\n newCheckoutErrorPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\r\n });\r\n\r\n if (isPaymentVerificationRedirection) {\r\n ctx.telemetry.warning('RefreshCart when isPaymentVerificationRedirection is true.');\r\n\r\n await checkoutState.checkoutCart.refreshCart({});\r\n await checkoutState.updateIsExpressCheckoutApplied({ newIsExpressCheckoutApplied: false });\r\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\r\n }\r\n }\r\n }\r\n\r\n throw error;\r\n });\r\n\r\n if (!salesOrder) {\r\n ctx.telemetry.error('Failed to placeOrder: fail to checkout.');\r\n throw new Error('Fail to placeOrder: fail to checkout');\r\n }\r\n\r\n return salesOrder;\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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IPaymentConnectorPostMessage } from './payment-instrument-message';\n\n/**\n * Payment iFrame interface.\n */\nexport interface IPaymentFrameElementProps {\n className?: string;\n moduleName?: string;\n iframeAriaLabel: string;\n displayContent?: string;\n sourceUrl?: string;\n requestUrlOrigin?: string;\n messageOrigin?: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- public props.\n css?: string;\n height?: number;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- public event.\n onIFrameMessage?(event: MessageEvent): void;\n}\n\n/**\n * Default post message name.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Existing name.\nexport const POST_MESSAGE_NAME = 'message';\n\n/**\n * Get host name.\n * @param url - The url.\n * @returns The host name.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Public props.\nconst getHostName = (url: string = ''): string => {\n return (url.includes('//') ? url.split('/')[2] : url.split('/')[0]).toLowerCase();\n};\n\n/**\n *\n * IFrameElement component.\n * @extends {React.PureComponent}\n */\nexport class Iframe extends React.PureComponent {\n private readonly iframeRef: React.RefObject;\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility -- Existing code.\n constructor(props: IPaymentFrameElementProps) {\n super(props);\n this.iframeRef = React.createRef();\n }\n\n public componentDidMount(): void {\n window.addEventListener(POST_MESSAGE_NAME, this.onEvent);\n\n this.updateContentDocument();\n }\n\n public componentDidUpdate(previousProps: IPaymentFrameElementProps): void {\n if (previousProps.displayContent !== this.props.displayContent) {\n this.updateContentDocument();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener(POST_MESSAGE_NAME, this.onEvent);\n }\n\n public render(): JSX.Element | null {\n const { sourceUrl, className, iframeAriaLabel, height, moduleName = 'checkout-payment-instrument' } = this.props;\n return (\n \n );\n }\n\n /**\n * Post message.\n * @param parameters - Payment connector post message.\n */\n public postMessage = (parameters: IPaymentConnectorPostMessage): void => {\n if (this.iframeRef.current?.contentWindow?.postMessage) {\n this.iframeRef.current.contentWindow.postMessage(parameters.message, parameters.targetOrigin);\n }\n };\n\n /**\n * On event.\n * @param event - The message event.\n */\n private readonly onEvent = (event: MessageEvent) => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- IFrame.\n const { sourceUrl, onIFrameMessage, requestUrlOrigin, messageOrigin } = this.props;\n const sourceHost = getHostName(sourceUrl);\n const eventHost = getHostName(event.origin);\n const requestHost = getHostName(requestUrlOrigin);\n const messageHost = getHostName(messageOrigin);\n\n // Important: security check\n // check actual origin matches with expected origin\n if (\n !onIFrameMessage ||\n (sourceUrl && !(sourceHost === eventHost || requestHost === eventHost || messageHost === eventHost)) ||\n (!sourceUrl && !(requestHost === eventHost || messageHost === eventHost))\n ) {\n return;\n }\n\n onIFrameMessage(event);\n };\n\n /**\n * Update content document.\n */\n private readonly updateContentDocument = (): void => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing props.\n const { displayContent, sourceUrl, css } = this.props;\n if (!sourceUrl && displayContent && this.iframeRef.current) {\n const innerDocument = this.iframeRef.current.contentDocument;\n\n if (innerDocument) {\n innerDocument.open();\n innerDocument.write(displayContent);\n if (css) {\n // Append custom style\n const style = document.createElement('style');\n const cssNote = document.createTextNode(css);\n style.appendChild(cssNote);\n innerDocument.head.appendChild(style);\n }\n\n innerDocument.close();\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\nconst countryISOMapping: { [key: string]: string } = {\n AF: 'AFG',\n AX: 'ALA',\n AL: 'ALB',\n DZ: 'DZA',\n AS: 'ASM',\n AD: 'AND',\n AO: 'AGO',\n AI: 'AIA',\n AQ: 'ATA',\n AG: 'ATG',\n AR: 'ARG',\n AM: 'ARM',\n AW: 'ABW',\n AU: 'AUS',\n AT: 'AUT',\n AZ: 'AZE',\n BS: 'BHS',\n BH: 'BHR',\n BD: 'BGD',\n BB: 'BRB',\n BY: 'BLR',\n BE: 'BEL',\n BZ: 'BLZ',\n BJ: 'BEN',\n BM: 'BMU',\n BT: 'BTN',\n BO: 'BOL',\n BA: 'BIH',\n BW: 'BWA',\n BV: 'BVT',\n BR: 'BRA',\n VG: 'VGB',\n IO: 'IOT',\n BN: 'BRN',\n BG: 'BGR',\n BF: 'BFA',\n BI: 'BDI',\n KH: 'KHM',\n CM: 'CMR',\n CA: 'CAN',\n CV: 'CPV',\n KY: 'CYM',\n CF: 'CAF',\n TD: 'TCD',\n CL: 'CHL',\n CN: 'CHN',\n HK: 'HKG',\n MO: 'MAC',\n CX: 'CXR',\n CC: 'CCK',\n CO: 'COL',\n KM: 'COM',\n CG: 'COG',\n CD: 'COD',\n CK: 'COK',\n CR: 'CRI',\n CI: 'CIV',\n HR: 'HRV',\n CU: 'CUB',\n CY: 'CYP',\n CZ: 'CZE',\n DK: 'DNK',\n DJ: 'DJI',\n DM: 'DMA',\n DO: 'DOM',\n EC: 'ECU',\n EG: 'EGY',\n SV: 'SLV',\n GQ: 'GNQ',\n ER: 'ERI',\n EE: 'EST',\n ET: 'ETH',\n FK: 'FLK',\n FO: 'FRO',\n FJ: 'FJI',\n FI: 'FIN',\n FR: 'FRA',\n GF: 'GUF',\n PF: 'PYF',\n TF: 'ATF',\n GA: 'GAB',\n GM: 'GMB',\n GE: 'GEO',\n DE: 'DEU',\n GH: 'GHA',\n GI: 'GIB',\n GR: 'GRC',\n GL: 'GRL',\n GD: 'GRD',\n GP: 'GLP',\n GU: 'GUM',\n GT: 'GTM',\n GG: 'GGY',\n GN: 'GIN',\n GW: 'GNB',\n GY: 'GUY',\n HT: 'HTI',\n HM: 'HMD',\n VA: 'VAT',\n HN: 'HND',\n HU: 'HUN',\n IS: 'ISL',\n IN: 'IND',\n ID: 'IDN',\n IR: 'IRN',\n IQ: 'IRQ',\n IE: 'IRL',\n IM: 'IMN',\n IL: 'ISR',\n IT: 'ITA',\n JM: 'JAM',\n JP: 'JPN',\n JE: 'JEY',\n JO: 'JOR',\n KZ: 'KAZ',\n KE: 'KEN',\n KI: 'KIR',\n KP: 'PRK',\n KR: 'KOR',\n KW: 'KWT',\n KG: 'KGZ',\n LA: 'LAO',\n LV: 'LVA',\n LB: 'LBN',\n LS: 'LSO',\n LR: 'LBR',\n LY: 'LBY',\n LI: 'LIE',\n LT: 'LTU',\n LU: 'LUX',\n MK: 'MKD',\n MG: 'MDG',\n MW: 'MWI',\n MY: 'MYS',\n MV: 'MDV',\n ML: 'MLI',\n MT: 'MLT',\n MH: 'MHL',\n MQ: 'MTQ',\n MR: 'MRT',\n MU: 'MUS',\n YT: 'MYT',\n MX: 'MEX',\n FM: 'FSM',\n MD: 'MDA',\n MC: 'MCO',\n MN: 'MNG',\n ME: 'MNE',\n MS: 'MSR',\n MA: 'MAR',\n MZ: 'MOZ',\n MM: 'MMR',\n NA: 'NAM',\n NR: 'NRU',\n NP: 'NPL',\n NL: 'NLD',\n AN: 'ANT',\n NC: 'NCL',\n NZ: 'NZL',\n NI: 'NIC',\n NE: 'NER',\n NG: 'NGA',\n NU: 'NIU',\n NF: 'NFK',\n MP: 'MNP',\n NO: 'NOR',\n OM: 'OMN',\n PK: 'PAK',\n PW: 'PLW',\n PS: 'PSE',\n PA: 'PAN',\n PG: 'PNG',\n PY: 'PRY',\n PE: 'PER',\n PH: 'PHL',\n PN: 'PCN',\n PL: 'POL',\n PT: 'PRT',\n PR: 'PRI',\n QA: 'QAT',\n RE: 'REU',\n RO: 'ROU',\n RU: 'RUS',\n RW: 'RWA',\n BL: 'BLM',\n SH: 'SHN',\n KN: 'KNA',\n LC: 'LCA',\n MF: 'MAF',\n PM: 'SPM',\n VC: 'VCT',\n WS: 'WSM',\n SM: 'SMR',\n ST: 'STP',\n SA: 'SAU',\n SN: 'SEN',\n RS: 'SRB',\n SC: 'SYC',\n SL: 'SLE',\n SG: 'SGP',\n SK: 'SVK',\n SI: 'SVN',\n SB: 'SLB',\n SO: 'SOM',\n ZA: 'ZAF',\n GS: 'SGS',\n SS: 'SSD',\n ES: 'ESP',\n LK: 'LKA',\n SD: 'SDN',\n SR: 'SUR',\n SJ: 'SJM',\n SZ: 'SWZ',\n SE: 'SWE',\n CH: 'CHE',\n SY: 'SYR',\n TW: 'TWN',\n TJ: 'TJK',\n TZ: 'TZA',\n TH: 'THA',\n TL: 'TLS',\n TG: 'TGO',\n TK: 'TKL',\n TO: 'TON',\n TT: 'TTO',\n TN: 'TUN',\n TR: 'TUR',\n TM: 'TKM',\n TC: 'TCA',\n TV: 'TUV',\n UG: 'UGA',\n UA: 'UKR',\n AE: 'ARE',\n GB: 'GBR',\n US: 'USA',\n UM: 'UMI',\n UY: 'URY',\n UZ: 'UZB',\n VU: 'VUT',\n VE: 'VEN',\n VN: 'VNM',\n VI: 'VIR',\n WF: 'WLF',\n EH: 'ESH',\n YE: 'YEM',\n ZM: 'ZMB',\n ZW: 'ZWE',\n XK: 'XKX'\n};\n\n/**\n * Convert two-letter ISO country code to tree-letter ISO country code.\n * @param countryCode {string} The two-letter country code.\n * @returns The three-letter country code or empty string if not found.\n */\nexport const getThreeLetterCountryCode = (countryCode: string) => {\n return countryISOMapping[countryCode] || '';\n};\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { SalesOrder, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartCheckout } from './checkout';\r\nimport { EmptyActiveCart } from './empty-active-cart';\r\n\r\nexport const PlaceOrder = async (\r\n ctx: IActionContext,\r\n checkoutState: ICheckoutState | undefined,\r\n orderedProducts: SimpleProduct[] | undefined,\r\n redirect: boolean,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean\r\n) => {\r\n //@ts-ignore\r\n return new Promise(async (resolve: () => void, reject: (reason?: Error) => void) => {\r\n ctx.telemetry.information('Checkout place-order method is triggered.');\r\n\r\n let salesOrder: SalesOrder;\r\n\r\n // Proceed checkout\r\n try {\r\n salesOrder = await CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n // Remove purchased items from the active cart\r\n try {\r\n ctx.telemetry.information('Checkout emptyActiveCart is called.');\r\n await EmptyActiveCart(ctx);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n if (redirect) {\r\n ctx.telemetry.information('Redirect to order confirmation page.');\r\n\r\n // Redirect to the order confirmation page\r\n const orderConfirmationUrl = getUrlSync('orderConfirmation', ctx) || '';\r\n if (!orderConfirmationUrl) {\r\n reject(new Error('Error: No orderConfirmationUrl'));\r\n return;\r\n }\r\n\r\n const separator = orderConfirmationUrl.includes('?') ? '&' : '?';\r\n const url = `${orderConfirmationUrl}${separator}transactionId=${salesOrder.Id}`;\r\n window.location.assign(url);\r\n } else {\r\n ctx.telemetry.information('Not redirect to order confirmation page.');\r\n\r\n if (checkoutState) {\r\n const result = await checkoutState.updateSalesOrder({\r\n newSalesOrder: salesOrder,\r\n newOrderedProducts: orderedProducts || []\r\n });\r\n\r\n if (result.status === 'FAILED') {\r\n reject(new Error('Error: Updating error state failed'));\r\n return;\r\n }\r\n } else {\r\n reject(new Error('Error: No checkout state'));\r\n return;\r\n }\r\n resolve();\r\n }\r\n });\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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","/*!\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 _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 };\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 * as React from 'react';\n\n/**\n * Visibility observer state.\n */\ninterface IVisibilityObserverState {\n isVisible?: boolean;\n errorMessage?: string;\n observer?: MutationObserver;\n}\n\n/**\n * Visibility observer props.\n */\nexport interface IVisibilityObserverProps {\n visibilityObserver?: IVisibilityObserverState;\n}\n\n/**\n * With visibility observer.\n * @param WrappedComponent - Wrapped component.\n * @param className - ClassName.\n * @returns React node.\n */\nexport const withVisibilityObserver =

(\n WrappedComponent: React.ComponentType

,\n className = 'ms-checkout-payment-instrument'\n): React.ComponentType

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

}\n */\n class VisibilityObserver extends React.Component

{\n // eslint-disable-next-line react/state-in-constructor -- Existing pattern.\n public state: IVisibilityObserverState = {\n isVisible: false,\n // eslint-disable-next-line react/no-unused-state -- Need show error.\n errorMessage: '',\n observer: undefined\n };\n\n private readonly selfRef: React.RefObject = React.createRef();\n\n public componentDidMount(): void {\n this.initMutationObserver();\n }\n\n public componentWillUnmount(): void {\n this.stopMutationObserver();\n }\n\n public shouldComponentUpdate(nextProps: IVisibilityObserverProps, nextState: IVisibilityObserverState): 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 return (\n

\n \n
\n );\n }\n\n /**\n * Initial mutation observer.\n */\n private readonly initMutationObserver = (): void => {\n // Select the node that will be observed for mutations\n const targetNode = document.getElementsByTagName('body')[0];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Better double check.\n if (!targetNode) {\n this.setState({\n // eslint-disable-next-line react/no-unused-state -- Need show error.\n errorMessage: 'No body element found'\n });\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Better double check.\n if (!MutationObserver) {\n this.setState({\n // eslint-disable-next-line react/no-unused-state -- Need show error.\n errorMessage: 'MutationObserver is not supported'\n });\n return;\n }\n\n // Options for the observer (which mutations to observe)\n const config = { attributes: true, childList: true, subtree: true };\n\n // Create an observer instance linked to the callback function\n const mutationObserver = new MutationObserver(() => {\n this.handleVisibilityChange();\n });\n mutationObserver.observe(targetNode, config);\n\n this.setState({\n observer: mutationObserver\n });\n };\n\n /**\n * Stop mutation observer.\n */\n private readonly stopMutationObserver = (): void => {\n this.state.observer?.disconnect();\n };\n\n /**\n * Handle visibility change.\n */\n private readonly handleVisibilityChange = (): void => {\n // If module is visible or not\n const isVisible = !!this.selfRef.current && this.selfRef.current.offsetWidth > 0 && this.selfRef.current.offsetHeight > 0;\n if (!this.state.isVisible && isVisible) {\n this.setState({\n isVisible\n });\n this.stopMutationObserver();\n }\n };\n }\n\n return VisibilityObserver;\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\n\r\ninterface IAlertProps {\r\n message: string;\r\n}\r\n\r\nconst CheckoutAlert: React.FC = ({ message }) => (\r\n

\r\n {message}\r\n

\r\n);\r\n\r\nexport default CheckoutAlert;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { IMandsCheckoutData } from '../mands-checkout.data';\r\nimport { IMandsCheckoutProps } from '../mands-checkout.props.autogenerated';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\ntype deliveryType = 'pickup' | 'ship';\r\n\r\nexport interface IPickUpAtStore {\r\n PickUpAtStore: INodeProps;\r\n label: React.ReactNode;\r\n location: React.ReactNode;\r\n}\r\n\r\nexport interface ILineItem {\r\n LineId: string;\r\n LineItem: INodeProps;\r\n item?: React.ReactNode;\r\n pickUpAtStore?: IPickUpAtStore;\r\n}\r\n\r\nexport interface ILineItemDeliveryGroup {\r\n LineItemDeliveryGroup: INodeProps;\r\n LineItemList: INodeProps;\r\n heading: React.ReactNode;\r\n lineItems: ILineItem[];\r\n}\r\n\r\nexport interface ILineItems {\r\n LineItems: INodeProps;\r\n Header: INodeProps;\r\n heading: React.ReactNode;\r\n editLink: React.ReactNode;\r\n itemsForPickup?: ILineItemDeliveryGroup;\r\n itemsForShip?: ILineItemDeliveryGroup;\r\n}\r\n\r\n// tslint:disable-next-line:max-func-body-length\r\nexport const getLineItems = (input: IMandsCheckoutProps): ILineItems | undefined => {\r\n const _getDeliveryLocation = (cartLine: CartLine): string => {\r\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\r\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\r\n return '';\r\n }\r\n\r\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\r\n return location.InventoryLocationId === cartLine.FulfillmentStoreId;\r\n });\r\n\r\n return locationMatch && locationMatch.OrgUnitName;\r\n };\r\n\r\n const _getProduct = (productId: number): SimpleProduct | undefined => {\r\n const products = get(input, 'data.products.result') || [];\r\n return products.find((_product: SimpleProduct) => {\r\n return productId === _product.RecordId;\r\n });\r\n };\r\n\r\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\r\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n config: { imageSettings, showShippingChargesForLineItems },\r\n resources: {\r\n quantityDisplayString,\r\n productDimensionTypeColor,\r\n productDimensionTypeSize,\r\n productDimensionTypeStyle,\r\n configString,\r\n inputQuantityAriaLabel,\r\n discountStringText,\r\n shippingCharges\r\n },\r\n context: {\r\n request: { gridSettings }\r\n }\r\n } = input;\r\n const catalogs = input.data.catalogs?.result;\r\n\r\n if (!product) {\r\n return;\r\n }\r\n const currencyCode = get(input, 'context.request.channel.Currency');\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\r\n const {\r\n resources: { pickUpAtStoreWithLocationText }\r\n } = input;\r\n\r\n return {\r\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\r\n label: {pickUpAtStoreWithLocationText},\r\n location:
{pickupDeliveryLocation}
\r\n };\r\n };\r\n\r\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\r\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\r\n return items.map(cartLine => {\r\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\r\n const isPickUp = cartLine.DeliveryMode === pickupDeliveryModeCode;\r\n return {\r\n LineId: cartLine.LineId || '',\r\n LineItem: { className: 'ms-checkout__line-item' },\r\n item: _getLineItemComponent(cartLine),\r\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined\r\n };\r\n });\r\n };\r\n\r\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\r\n const {\r\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\r\n } = input;\r\n\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n const title = type === 'ship' ? shippingCountCheckoutLineItem : inStorePickUpLabel;\r\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\r\n };\r\n\r\n const _countItems = (items: CartLine[]): number => {\r\n return items.reduce((count, item) => {\r\n return count + (item.Quantity || 0);\r\n // tslint:disable-next-line:align\r\n }, 0);\r\n };\r\n\r\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\r\n return type === 'ship'\r\n ? cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode !== pickupDeliveryModeCode)\r\n : cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === pickupDeliveryModeCode);\r\n };\r\n\r\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\r\n const items = _filterItemsByDiliveryType(type);\r\n\r\n if (items.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const count = _countItems(items);\r\n const title = _getGroupTitleComponent(count, type);\r\n\r\n return {\r\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\r\n LineItemList: { className: 'ms-checkout__line-items-list' },\r\n heading:
{title}
,\r\n lineItems: _getLineItemsComponents(items)\r\n };\r\n };\r\n\r\n const _getLineItems = (): ILineItems | undefined => {\r\n const {\r\n context,\r\n config: { lineItemsHeading },\r\n data: { products },\r\n resources: { editCartText }\r\n } = input;\r\n\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n\r\n if (!cart || !cart.CartLines || !cart.CartLines.length || !products) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n LineItems: { className: 'ms-checkout__line-items' },\r\n Header: { className: 'ms-checkout__line-items-header' },\r\n heading: lineItemsHeading && ,\r\n editLink: (\r\n \r\n {editCartText}\r\n \r\n ),\r\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\r\n itemsForShip: _getLineItemsByDeliveryType('ship')\r\n };\r\n };\r\n\r\n return _getLineItems();\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { Cart, ChannelConfiguration, GiftCard } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\r\nexport interface IOrderSummaryProps {\r\n subTotalLabel: string;\r\n shippingLabel: string;\r\n taxLabel: string;\r\n orderTotalLabel: string;\r\n loyaltyLabel?: string;\r\n giftcardLabel?: string;\r\n totalDiscountsLabel: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n cart: Cart;\r\n channelConfiguration: ChannelConfiguration;\r\n id: string;\r\n typeName: string;\r\n freeText?: string;\r\n toBeCalculatedText?: string;\r\n checkoutState?: ICheckoutState;\r\n customerAccountLabel?: string;\r\n}\r\n\r\nexport interface IOrderSummaryLines {\r\n subtotal: React.ReactNode;\r\n shipping?: React.ReactNode;\r\n tax: React.ReactNode;\r\n orderTotal: React.ReactNode;\r\n totalDiscounts?: React.ReactNode;\r\n giftCard?: React.ReactNode;\r\n loyalty?: React.ReactNode;\r\n customerAccount?: React.ReactNode;\r\n}\r\n\r\ninterface IOrderSummaryLineProps {\r\n label: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n price?: number;\r\n freeText?: string;\r\n toBeCalculatedText?: string;\r\n id: string;\r\n typeName: string;\r\n cssLabel: string;\r\n}\r\n\r\ninterface IShippingOrderLine {\r\n cart: Cart;\r\n channelConfiguration: ChannelConfiguration;\r\n canShip?: boolean;\r\n hasDeliveryMethod?: boolean;\r\n hasShippingMethod?: boolean;\r\n freightFee?: number;\r\n}\r\n\r\nconst OrderSummaryLine: React.FC = ({\r\n price,\r\n label,\r\n context,\r\n id,\r\n typeName,\r\n toBeCalculatedText,\r\n freeText,\r\n cssLabel\r\n}) => {\r\n return (\r\n

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

\r\n );\r\n};\r\n\r\nconst _buildOrderSummarySection = (\r\n props: IOrderSummaryProps,\r\n price: number | undefined,\r\n label: string,\r\n cssLabel: string\r\n): React.ReactNode => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\r\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\r\n};\r\n\r\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\r\n const giftCardCounter = (count: number, giftCard: GiftCard) => {\r\n return count + (giftCard.Balance || 0);\r\n };\r\n const giftCardTotalValue = (checkoutState.giftCards || []).reduce(giftCardCounter, 0);\r\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\r\n return Math.min(giftCardTotalValue, amount);\r\n};\r\n\r\nconst getDeliveryConfiguration = (cart: Cart, channelConfiguration: ChannelConfiguration): IShippingOrderLine => {\r\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\r\n const cartLines = cart.CartLines || [];\r\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\r\n\r\n const freightFeeFromCart = cart.ChargeAmount;\r\n\r\n const freightFeeFromCartLines = cartLines.reduce((count, cartLine) => {\r\n return (\r\n count +\r\n (cartLine.ChargeLines || []).reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.IsShipping && chargeLine.CalculatedAmount ? chargeLine.CalculatedAmount : 0);\r\n }, 0)\r\n );\r\n }, 0);\r\n\r\n const freightFee =\r\n (cart.ChargeLines && cart.ChargeLines.length && cart.DeliveryMode && cart.DeliveryMode.length && freightFeeFromCart) ||\r\n freightFeeFromCartLines;\r\n\r\n const canShip =\r\n deliveryModes.some(deliveryMode => deliveryMode !== pickupDeliveryModeCode) ||\r\n (cart.ChargeLines && cart.ChargeLines.length && cart.DeliveryMode && cart.DeliveryMode.length > 0);\r\n const hasDeliveryMethod =\r\n deliveryModes.some(deliveryMode => !!deliveryMode) ||\r\n (cart.ChargeLines && cart.ChargeLines.length && cart.DeliveryMode && cart.DeliveryMode.length > 0);\r\n const hasShippingMethod =\r\n deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== pickupDeliveryModeCode) ||\r\n (cart.ChargeLines && cart.ChargeLines.length && cart.DeliveryMode && cart.DeliveryMode.length > 0);\r\n return {\r\n canShip,\r\n hasDeliveryMethod,\r\n hasShippingMethod,\r\n freightFee\r\n } as IShippingOrderLine;\r\n};\r\n\r\nexport const OrderSummary = (props: IOrderSummaryProps) => {\r\n const { NetPrice, TaxAmount, DiscountAmountWithoutTax = 0, TotalAmount } = props.cart;\r\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(props.cart, props.channelConfiguration);\r\n const reactNodes: IOrderSummaryLines = {\r\n subtotal: _buildOrderSummarySection(props, NetPrice, props.subTotalLabel, 'net-price'),\r\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, props.taxLabel, 'tax-amount'),\r\n orderTotal: _buildOrderSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\r\n };\r\n\r\n if (canShip) {\r\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, props.shippingLabel, 'shipping');\r\n }\r\n if (props.checkoutState) {\r\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\r\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\r\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\r\n\r\n if (loyaltyAmount > 0) {\r\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\r\n }\r\n\r\n if (giftCardAmount > 0) {\r\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, props.giftcardLabel || 'Gift card amount', 'gift-card');\r\n }\r\n\r\n reactNodes.orderTotal = _buildOrderSummarySection(\r\n { ...props, freeText: undefined },\r\n totalAmountAfterGiftCard,\r\n props.orderTotalLabel,\r\n 'total'\r\n );\r\n }\r\n\r\n if (DiscountAmountWithoutTax > 0) {\r\n reactNodes.totalDiscounts = _buildOrderSummarySection(\r\n props,\r\n -DiscountAmountWithoutTax,\r\n props.totalDiscountsLabel,\r\n 'total-discounts'\r\n );\r\n }\r\n\r\n return reactNodes;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IOrderSummaryLines, OrderSummary } from './order-summary-lineitem';\r\nimport { Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { IMandsCheckoutData } from '../mands-checkout.data';\r\nimport { IMandsCheckoutProps } from '../mands-checkout.props.autogenerated';\r\n\r\nexport interface IOrderSummary {\r\n orderSummaryProps: INodeProps;\r\n heading?: React.ReactNode;\r\n lines?: IOrderSummaryLines;\r\n}\r\nexport const getOrderSummary = (input: IMandsCheckoutProps): IOrderSummary => {\r\n const {\r\n config: { orderSummaryHeading },\r\n data: { checkout },\r\n resources: {\r\n subTotalLabel,\r\n shippingLabel,\r\n taxLabel,\r\n orderTotalLabel,\r\n loyaltyLabel,\r\n giftcardLabel,\r\n totalDiscountsLabel,\r\n freeText,\r\n toBeCalculatedText,\r\n customerAccountLabel\r\n },\r\n context,\r\n typeName,\r\n id,\r\n telemetry\r\n } = input;\r\n\r\n const checkoutState = get(checkout, 'result');\r\n const cart = get(checkout, 'result.checkoutCart.cart');\r\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\r\n const channelConfiguration = context.request.channel!;\r\n\r\n return {\r\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\r\n heading: orderSummaryHeading && ,\r\n lines: showLineItems\r\n ? OrderSummary({\r\n checkoutState,\r\n cart,\r\n subTotalLabel,\r\n shippingLabel,\r\n taxLabel,\r\n orderTotalLabel,\r\n loyaltyLabel,\r\n giftcardLabel,\r\n totalDiscountsLabel,\r\n freeText,\r\n toBeCalculatedText,\r\n context,\r\n typeName,\r\n id,\r\n channelConfiguration,\r\n telemetry,\r\n customerAccountLabel\r\n })\r\n : undefined\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 { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport * as React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport get from 'lodash/get';\r\nimport { focusOnCheckoutError, setCheckoutErrorFocus } from '../checkout-errors';\r\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\r\nexport interface ICheckoutGuidedCardProps {\r\n id?: string;\r\n step: number;\r\n title?: HeadingType;\r\n disabled?: boolean; // module is not available\r\n isActive?: boolean; // step === currentStep\r\n isVisted?: boolean; // step < currentStep\r\n isExpanded?: boolean;\r\n isReady?: boolean;\r\n isPending?: boolean;\r\n isUpdating?: boolean;\r\n isSubmitting?: boolean;\r\n isMobile?: boolean;\r\n hasInitialized?: boolean;\r\n hasControlGroup?: boolean;\r\n children: React.ReactNode;\r\n shouldFocus?: boolean;\r\n moduleState?: IModuleStateManager;\r\n actionContext?: IActionContext;\r\n resource: {\r\n checkoutStepTitleFormat: string;\r\n saveBtnLabel: string;\r\n changeBtnLabel: string;\r\n cancelBtnLabel: string;\r\n saveAndContinueBtnLabel: string;\r\n };\r\n onEdit?(): void;\r\n onCancel?(): void;\r\n onSubmit?(): void;\r\n onNext(): void;\r\n}\r\n\r\n/**\r\n *\r\n * CheckoutGuidedCard component\r\n * @extends {React.Component}\r\n */\r\nclass CheckoutGuidedCard extends React.PureComponent {\r\n private editButtonRef: React.RefObject = React.createRef();\r\n private formCardRef: React.RefObject = React.createRef();\r\n\r\n public componentDidUpdate(prevProps: ICheckoutGuidedCardProps): void {\r\n /**\r\n * Move to next step when current step is ready\r\n */\r\n const { isActive, isReady, onNext, isVisted, onEdit, shouldFocus, children, moduleState, actionContext } = this.props;\r\n\r\n // Move to next step after completing the current step\r\n if (isActive && isReady) {\r\n onNext();\r\n }\r\n\r\n // Set the focus to Edit button once edit button appear\r\n // (It happens when current step switch to isReady status)\r\n const prevCanEdit = prevProps.isReady && prevProps.isVisted && !!prevProps.onEdit;\r\n const canEdit = isReady && isVisted && !!onEdit;\r\n if (!prevCanEdit && canEdit) {\r\n this.focusOnEditButton();\r\n this.scrollToTitle();\r\n }\r\n\r\n // Set the focus to the first focusable element\r\n // (It happens when current step switch to isUpdating status)\r\n if (prevProps.isReady && !isReady) {\r\n this.focusOnFirstFocusableElement();\r\n }\r\n\r\n // Set the focus for the checkout error\r\n if (shouldFocus && actionContext) {\r\n const childrenModules = this._getModules(children);\r\n // Set the focus for the module within the checkout section container\r\n if (childrenModules.length > 0) {\r\n for (const childModule of childrenModules) {\r\n const childId = this._getId(childModule);\r\n const childState = moduleState?.getModule(childId);\r\n if (childState?.hasError) {\r\n setCheckoutErrorFocus(childId, actionContext);\r\n return;\r\n }\r\n }\r\n } else {\r\n focusOnCheckoutError(this.formCardRef, actionContext);\r\n }\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n title,\r\n disabled,\r\n isExpanded,\r\n isActive,\r\n isVisted,\r\n children,\r\n isReady,\r\n isPending,\r\n isUpdating,\r\n hasInitialized,\r\n hasControlGroup,\r\n onEdit,\r\n resource\r\n } = this.props;\r\n const { changeBtnLabel } = resource;\r\n\r\n const canEdit = hasControlGroup && isReady && isVisted && onEdit;\r\n\r\n return (\r\n \r\n
\r\n {this.getTitle()}\r\n\r\n {canEdit && (\r\n \r\n {changeBtnLabel}\r\n \r\n )}\r\n
\r\n\r\n \r\n
{children}
\r\n\r\n {this.renderFooder()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n private renderFooder = (): JSX.Element | null => {\r\n const { isVisted, isReady, isSubmitting, hasControlGroup, onCancel, onSubmit, resource } = this.props;\r\n const { saveBtnLabel, cancelBtnLabel, saveAndContinueBtnLabel } = resource;\r\n\r\n const canSubmit = !isReady && onSubmit;\r\n const canCancel = !isReady && isVisted && onCancel;\r\n\r\n if (!hasControlGroup || (!canSubmit && !canCancel)) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {canSubmit && (\r\n \r\n {isVisted ? saveBtnLabel : saveAndContinueBtnLabel}\r\n \r\n )}\r\n {canCancel && (\r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n private focusOnFirstFocusableElement = (): void => {\r\n // eslint-disable-next-line react/no-find-dom-node\r\n const node = ReactDOM.findDOMNode(this) as HTMLElement;\r\n const focussableElements = `\r\n a:not([disabled]),\r\n button:not([disabled]),\r\n input[type=submit]:not([disabled]),\r\n input[type=checkbox]:not([disabled]),\r\n input[type=text]:not([disabled]),\r\n input[type=radio]:not([disabled]),\r\n input[type=password]:not([disabled]),\r\n select:not([disabled]),\r\n textarea:not([disabled]),\r\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\r\n `;\r\n\r\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\r\n child && child.focus && child.focus();\r\n };\r\n\r\n private focusOnEditButton = (): void => {\r\n // Focus on edit button\r\n const editButton =\r\n this.editButtonRef &&\r\n this.editButtonRef.current &&\r\n this.editButtonRef.current.focus &&\r\n (this.editButtonRef.current as HTMLElement);\r\n editButton && editButton.focus();\r\n };\r\n\r\n private scrollToTitle = (): void => {\r\n // scroll window to the title of the step that was just completed only in mobile viewport\r\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\r\n formCard && formCard.scrollIntoView();\r\n };\r\n\r\n private getTitle = (): JSX.Element => {\r\n const { step, title } = this.props;\r\n const { headingTag: Tag = 'h2', text = '' } = title || {};\r\n return (\r\n \r\n {step + 1}. \r\n {text && {text}}\r\n \r\n );\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private readonly _getModules = (item: React.ReactNode): any[] => {\r\n return get(item, 'props.modules.primary') || [];\r\n };\r\n private readonly _getId = (item: React.ReactNode): string => {\r\n return get(item, 'id') || '';\r\n };\r\n}\r\n\r\nexport default CheckoutGuidedCard;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/ //\r\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\r\nimport get from 'lodash/get';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport GuidedCard from '../components/guided-card';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nexport interface ICheckoutGuidedFormProps {\r\n items: React.ReactNode[];\r\n moduleState: IModuleStateManager;\r\n disableGuidedCheckoutFlow?: boolean;\r\n isMobile?: boolean;\r\n isEditor?: boolean;\r\n resource: {\r\n checkoutStepTitleFormat: string;\r\n saveBtnLabel: string;\r\n changeBtnLabel: string;\r\n cancelBtnLabel: string;\r\n saveAndContinueBtnLabel: string;\r\n };\r\n requestContext?: ICoreContext;\r\n shouldEnableCheckoutErrorDisplayMessaging?: boolean;\r\n shouldFocusOnCheckoutError?: boolean | undefined;\r\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\r\n}\r\n\r\ninterface ICheckoutGuidedFormState {\r\n currentStep: number;\r\n}\r\n\r\nconst paymentInstrumentModuleId = 'payment-instrument';\r\n\r\n/**\r\n *\r\n * CheckoutGuidedForm component\r\n * @extends {React.Component}\r\n */\r\n@observer\r\nclass CheckoutGuidedForm extends React.Component {\r\n public state: ICheckoutGuidedFormState = {\r\n currentStep: 0\r\n };\r\n\r\n public componentDidMount(): void {\r\n /**\r\n * Append child modules\r\n */\r\n const childIds = this.props.items.map((item: React.ReactNode) => get(item, 'props.id'));\r\n this.props.moduleState.init({ childIds });\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { moduleState, items, resource } = this.props;\r\n\r\n if (!items || !moduleState) {\r\n return null;\r\n }\r\n let previousModuleHasError = false;\r\n const childModule = this._enableAfterModule();\r\n\r\n return (\r\n
\r\n {items.map((item: React.ReactNode) => {\r\n const childId = this.getId(item);\r\n const step = this.getStep(childId);\r\n const title = this.getHeading(item);\r\n const state = this.props.moduleState.getModule(childId);\r\n const {\r\n isReady,\r\n isPending,\r\n isUpdating,\r\n isDisabled,\r\n onEdit,\r\n onCancel,\r\n onSubmit,\r\n hasModuleState,\r\n hasInitialized,\r\n hasError\r\n } = state || ({} as IModuleStateManager);\r\n const shouldFocus =\r\n !!this.props.shouldEnableCheckoutErrorDisplayMessaging &&\r\n !!this.props.shouldFocusOnCheckoutError &&\r\n !previousModuleHasError &&\r\n hasError;\r\n previousModuleHasError = previousModuleHasError || shouldFocus;\r\n return (\r\n \r\n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Check if it is a section container with payment module.\r\n * @param moduleId -- The id of the module.\r\n * @returns If it is a section container with payment module.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private readonly _enableAfterModule = (): string => {\r\n const childIds: string[] = this.props.items.map((item: React.ReactNode) => get(item, 'props.id')).filter(Boolean);\r\n let id: string = '';\r\n for (let i = 0; i < childIds.length - 1; i++) {\r\n const childId = childIds[i];\r\n const nextChildId = childIds[i + 1];\r\n if (this._isPaymentSectionContainer(childId) && nextChildId) {\r\n id = nextChildId;\r\n }\r\n }\r\n return id;\r\n };\r\n /**\r\n * Check if it is a section container with payment module.\r\n * @param moduleId -- The id of the module.\r\n * @returns If it is a section container with payment module.\r\n */\r\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\r\n const sectionState = this.props.moduleState.getModule(moduleId);\r\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n sectionState.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\r\n );\r\n if (isPaymentSectionContainer) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n private getEnabledModules = (): string[] => {\r\n const {\r\n moduleState: { childIds, getModule }\r\n } = this.props;\r\n return childIds.filter((childId: string) => {\r\n const state = getModule(childId);\r\n return !!state && !state.isDisabled;\r\n });\r\n };\r\n\r\n private getStep = (id: string): number => {\r\n return this.getEnabledModules().indexOf(id);\r\n };\r\n\r\n private getId = (item: React.ReactNode): string => {\r\n return get(item, 'props.id') || '';\r\n };\r\n\r\n private getHeading = (item: React.ReactNode): Heading => {\r\n return get(item, 'props.config.heading') || '';\r\n };\r\n\r\n private isExpanded = (step: number, moduleChildId: string, childId: string): boolean => {\r\n if (this.props.isEditor) {\r\n // Editorial mode: Expand all the drawers\r\n return true;\r\n }\r\n if (this.props.shouldEnableSinglePaymentAuthorizationCheckout && moduleChildId === childId) {\r\n return true;\r\n }\r\n return step > -1 && step <= this.state.currentStep;\r\n };\r\n\r\n private isActive = (step: number): boolean => {\r\n return step === this.state.currentStep;\r\n };\r\n\r\n private isVisted = (step: number): boolean => {\r\n return step > -1 && step < this.state.currentStep;\r\n };\r\n\r\n private onNext = (): void => {\r\n this.setState({\r\n currentStep: this.state.currentStep + 1\r\n });\r\n };\r\n}\r\n\r\nexport default CheckoutGuidedForm;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/ //\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React, { useState } from 'react';\r\n\r\ninterface ICheckoutPlaceOrderButtonProps {\r\n canPlaceOrder: boolean;\r\n placeOrderText: string;\r\n placeOrder(): Promise;\r\n}\r\n\r\nconst CheckoutPlaceOrderButton: React.FC = ({ placeOrderText, canPlaceOrder, placeOrder }) => {\r\n const [isBusy, setIsBusy] = useState(false);\r\n const onPlaceOrder = async () => {\r\n if (isBusy || !canPlaceOrder) {\r\n return;\r\n }\r\n setIsBusy(true);\r\n await placeOrder();\r\n setIsBusy(false);\r\n };\r\n return (\r\n \r\n {placeOrderText}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutPlaceOrderButton;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/ //\r\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { Button, Heading, IModuleProps, INodeProps, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport { AsyncResultStatus, getUrlSync } from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport { action, computed, when, reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IMandsCheckoutData } from './mands-checkout.data';\r\nimport { IMandsCheckoutProps } from './mands-checkout.props.autogenerated';\r\nimport AlertComponent from './components/alert';\r\nimport { getLineItems, ILineItems } from './components/get-line-items';\r\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\r\nimport GuidedFormComponent from './components/guided-form';\r\nimport PlaceOrderButtonComponent from './components/place-order-button';\r\nimport placeOrder from './methods/place-order';\r\n\r\n// import { AsyncResultStatus } from '@msdyn365-commerce/retail-proxy'\r\nimport { Address, TokenizedPaymentCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ErrorCode, ErrorLocation } from '@msdyn365-commerce/global-state';\r\nimport { focusOnCheckoutError, setCheckoutErrors } from './checkout-errors';\r\nimport { AsyncResultStatusCode, IExpressPaymentDetails } from './common';\r\nexport * from './components/get-line-items';\r\nexport * from './components/get-order-summary';\r\n\r\ntype DeviceType = 'Mobile';\r\n\r\ninterface ICheckoutState {\r\n errorMessage: string;\r\n isPlaceOrderClicked?: boolean;\r\n}\r\n\r\nexport interface ICheckoutViewProps extends IMandsCheckoutProps {\r\n className: string;\r\n canShow?: boolean;\r\n isEmptyCart?: boolean;\r\n isConsentGiven?: boolean;\r\n hasError?: boolean;\r\n cartStatus?: string;\r\n isMobile?: boolean;\r\n isEditorialMode?: boolean;\r\n backToShoppingUrl?: string;\r\n editCartLink?: string;\r\n hasSalesOrder: boolean;\r\n\r\n checkoutProps: IModuleProps;\r\n headerProps: INodeProps;\r\n bodyProps: INodeProps;\r\n mainProps: INodeProps;\r\n mainControlProps: INodeProps;\r\n sideProps: INodeProps;\r\n sideControlFirstProps: INodeProps;\r\n sideControlSecondProps: INodeProps;\r\n\r\n guidedForm?: React.ReactNode;\r\n title?: React.ReactNode;\r\n loading?: React.ReactNode;\r\n alert?: React.ReactNode;\r\n orderSummary?: IOrderSummary;\r\n lineItems?: ILineItems;\r\n placeOrderButton?: React.ReactNode;\r\n keepShoppingButton?: React.ReactNode;\r\n orderConfirmation?: React.ReactNode;\r\n checkoutExpressPaymentContainer?: React.ReactNode;\r\n checkoutErrorRef?: React.RefObject;\r\n}\r\n\r\nexport interface ICheckoutModuleProps extends IMandsCheckoutProps, IModuleStateProps {}\r\n\r\n/**\r\n *\r\n * CheckoutContainer component\r\n * @extends {React.Component}\r\n */\r\n// @ts-ignore\r\n@withModuleState\r\n@observer\r\nclass Checkout extends React.Component {\r\n public state: ICheckoutState = {\r\n errorMessage: '',\r\n isPlaceOrderClicked: false\r\n };\r\n\r\n @computed get cartStatus(): AsyncResultStatus {\r\n return get(this.props, 'data.checkout.status');\r\n }\r\n\r\n @computed get isEmptyCart(): boolean {\r\n if (this.isEditorialMode) {\r\n // Editorial mode: Ignore empty cart\r\n return false;\r\n }\r\n const cart = get(this.props, 'data.checkout.result.checkoutCart.cart');\r\n return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\r\n }\r\n\r\n @computed get hasError(): boolean {\r\n const cart = get(this.props, 'data.checkout.result.checkoutCart.cart');\r\n return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\r\n }\r\n\r\n @computed get isEditorialMode(): boolean {\r\n return get(this.props, 'context.request.params.isEditor');\r\n }\r\n\r\n @computed get canPlaceOrder(): boolean {\r\n return this.props.moduleState.isReady;\r\n }\r\n @computed get isPaidOffByCustomerAccount(): boolean {\r\n const amountDue = this.props.data.checkout.result?.checkoutCart.cart.TotalAmount ?? 0;\r\n const customerAccountAmount = this.props.data.checkout.result?.customerAccountAmount ?? 0;\r\n return customerAccountAmount === amountDue;\r\n }\r\n\r\n public componentDidMount(): void {\r\n const {\r\n resources: { genericErrorMessage }\r\n } = this.props;\r\n\r\n when(\r\n () => this.asyncResultStatus !== AsyncResultStatusCode.LOADING,\r\n async () => {\r\n if (this.expressPaymentDetailsFromCartPage) {\r\n const {\r\n email,\r\n tenderLine,\r\n tokenizedPaymentCard,\r\n paymentTenderType: paymentTenderTypeFromCartPage,\r\n isExpressCheckoutAppliedInCartPage,\r\n isExpressAddressAppliedInCartPage,\r\n cardPaymentAcceptResult,\r\n address\r\n } = this.expressPaymentDetailsFromCartPage;\r\n this.props.data.checkout.result?.updateExpressCheckoutDetails({\r\n newEmailAddressFromExpressCheckout: email ?? '',\r\n newTenderLine: tenderLine,\r\n newTokenizedPaymentCard: tokenizedPaymentCard,\r\n newPaymentTenderType: paymentTenderTypeFromCartPage,\r\n newIsExpressCheckoutApplied: isExpressCheckoutAppliedInCartPage,\r\n newIsExpressAddressApplied: isExpressAddressAppliedInCartPage,\r\n newCardPaymentAcceptResult: cardPaymentAcceptResult\r\n });\r\n if (isExpressAddressAppliedInCartPage && address) {\r\n this.props.data.checkout.result?.updateBillingAddressFromExpressCheckout({\r\n newBillingAddressFromExpressCheckout: address\r\n });\r\n this.props.data.checkout.result?.updateShippingAddressFromExpressCheckout({\r\n newShippingAddressFromExpressCheckout: address\r\n });\r\n } else {\r\n void this._saveShippingAndBillingAddress(tokenizedPaymentCard);\r\n }\r\n this.props.data.checkout.result?.checkoutCart.updateExtensionProperties({\r\n newExtensionProperties: [\r\n {\r\n Key: 'expressPaymentDetails',\r\n Value: { StringValue: '' }\r\n }\r\n ]\r\n });\r\n }\r\n }\r\n );\r\n\r\n // @ts-ignore: Compiler not reconizing condition check for function params\r\n when(\r\n () => this.hasError,\r\n () => {\r\n this.setState({\r\n errorMessage: genericErrorMessage\r\n });\r\n this.props.context.telemetry.error('Failed to get cart');\r\n }\r\n );\r\n\r\n // @ts-ignore: Compiler not reconizing condition check for function params\r\n when(\r\n () => {\r\n return this.isEmptyCart;\r\n },\r\n () => {\r\n const editCartLink = getUrlSync('cart', this.props.context.actionContext) || '';\r\n if (window && editCartLink) {\r\n // Redirect to cart page if cart is empty\r\n window.location.assign(editCartLink);\r\n } else {\r\n this.setState({\r\n errorMessage: genericErrorMessage\r\n });\r\n this.props.context.telemetry.error('Cart is empty, but no editCartLink found');\r\n }\r\n }\r\n );\r\n // Reaction to update the error message when there is a checkout error.\r\n reaction(\r\n () => this.props.data.checkout.result?.checkoutError,\r\n checkoutError => {\r\n const checkoutErrorLocation: boolean = checkoutError?.errorLocation === ErrorLocation.Checkout;\r\n // If there is an Error in CheckoutPaymentInstrument module, checkout error location will be updated.\r\n const checkoutPaymentErrorLocation: boolean =\r\n checkoutError?.errorCode === ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment\r\n ? checkoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument\r\n : checkoutErrorLocation;\r\n if (\r\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\r\n checkoutError &&\r\n checkoutError.errorMessage &&\r\n (checkoutErrorLocation ? checkoutErrorLocation : checkoutPaymentErrorLocation)\r\n ) {\r\n this._setErrorMessage(checkoutError.errorMessage);\r\n }\r\n }\r\n );\r\n }\r\n public componentDidUpdate(): void {\r\n if (\r\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\r\n this.props.data.checkout.result?.shouldFocusOnCheckoutError &&\r\n this.state.errorMessage\r\n ) {\r\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\r\n }\r\n }\r\n\r\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\r\n const properties =\r\n this.props.data.checkout?.result?.checkoutCart?.cart?.ExtensionProperties?.find(\r\n property => property.Key === 'expressPaymentDetails'\r\n )?.Value?.StringValue ?? '';\r\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\r\n }\r\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\r\n\r\n // tslint:disable-next-line:max-func-body-length\r\n public render(): JSX.Element {\r\n const {\r\n moduleState,\r\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\r\n resources\r\n } = this.props;\r\n const { errorMessage } = this.state;\r\n const { backToShopping, placeOrderText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\r\n const checkoutClass = classnames('ms-checkout', className);\r\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\r\n // @ts-expect-error - check the key of slot\r\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\r\n // @ts-expect-error - check the key of slot\r\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\r\n const isConsentGiven =\r\n this.props.context.request &&\r\n this.props.context.request.cookies &&\r\n this.props.context.request.cookies.isConsentGiven &&\r\n this.props.context.request.cookies.isConsentGiven();\r\n\r\n const isMobile =\r\n this.props.context.request &&\r\n this.props.context.request.device &&\r\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\r\n\r\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\r\n const editCartLink = getUrlSync('cart', this.props.context.actionContext) || '';\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const shouldEnableCheckoutErrorDisplayMessaging =\r\n this.props.data.checkout?.result?.shouldEnableCheckoutErrorDisplayMessaging ?? false;\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const shouldFocusOnCheckoutError = this.props.data.checkout?.result?.shouldFocusOnCheckoutError;\r\n\r\n let viewProps: ICheckoutViewProps = {\r\n ...this.props,\r\n className: checkoutClass,\r\n checkoutErrorRef: this.checkoutErrorRef,\r\n isEmptyCart: this.isEmptyCart,\r\n isConsentGiven,\r\n hasError: this.hasError,\r\n hasSalesOrder: this.props.data.checkout?.result! !== undefined && this.props.data.checkout?.result?.salesOrder! !== undefined,\r\n // hasSalesOrder: false,\r\n cartStatus: this.cartStatus,\r\n isMobile,\r\n backToShoppingUrl,\r\n editCartLink,\r\n isEditorialMode: this.isEditorialMode,\r\n orderConfirmation:\r\n this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\r\n ? this.props.slots.orderConfirmation[0]\r\n : undefined,\r\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\r\n headerProps: { className: 'ms-checkout__head' },\r\n bodyProps: { className: 'ms-checkout__body' },\r\n mainProps: { className: 'ms-checkout__main' },\r\n mainControlProps: { className: 'ms-checkout__main-control' },\r\n sideProps: { className: 'ms-checkout__side' },\r\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\r\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\r\n title: checkoutHeading && ,\r\n checkoutExpressPaymentContainer\r\n };\r\n\r\n if (isConsentGiven === false) {\r\n viewProps = {\r\n ...viewProps,\r\n alert: \r\n };\r\n } else if (!this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart) {\r\n viewProps = {\r\n ...viewProps,\r\n loading: \r\n };\r\n } else if (this.hasError) {\r\n viewProps = {\r\n ...viewProps,\r\n alert: \r\n };\r\n } else {\r\n viewProps = {\r\n ...viewProps,\r\n alert: errorMessage && ,\r\n canShow: true,\r\n guidedForm: checkoutInformation ? (\r\n \r\n ) : (\r\n undefined\r\n ),\r\n orderSummary: getOrderSummary(this.props),\r\n lineItems: getLineItems(this.props),\r\n placeOrderButton: (\r\n \r\n ),\r\n keepShoppingButton: backToShoppingUrl && (\r\n \r\n {backToShopping}\r\n \r\n )\r\n };\r\n }\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n @computed public get asyncResultStatus(): AsyncResultStatus | undefined {\r\n const isLoading = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.LOADING);\r\n if (isLoading) {\r\n return AsyncResultStatusCode.LOADING;\r\n }\r\n const isSuccess = Object.values(this.props.data).every(data => get(data, 'status') === AsyncResultStatusCode.SUCCESS);\r\n if (isSuccess) {\r\n return AsyncResultStatusCode.SUCCESS;\r\n }\r\n const isFailed = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.FAILED);\r\n if (isFailed) {\r\n return AsyncResultStatusCode.FAILED;\r\n }\r\n return undefined;\r\n }\r\n\r\n private getSlotItems = (key: string): React.ReactNode[] | undefined => {\r\n const { slots } = this.props;\r\n return slots && slots[key] && slots[key].length ? slots[key] : undefined;\r\n };\r\n\r\n private onPlaceOrder = async (): Promise => {\r\n const {\r\n resources: { genericErrorMessage },\r\n context: { actionContext },\r\n slots: { orderConfirmation }\r\n } = this.props;\r\n this.props.telemetry.information('Checkout onPlaceOrder is called.');\r\n this.setState({ isPlaceOrderClicked: true });\r\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\r\n await placeOrder(actionContext, this.props.data.checkout.result, this.props.data.products.result, !hasOrderConfirmation).catch(\r\n error => {\r\n this.handleCheckoutError(error);\r\n this.setState({\r\n errorMessage: genericErrorMessage\r\n });\r\n this.props.telemetry.exception(error);\r\n }\r\n );\r\n };\r\n\r\n @action\r\n private readonly _setErrorMessage = (errorMessage: string): void => {\r\n this.props.telemetry.error(errorMessage);\r\n this.props.moduleState.setHasError(true);\r\n this.props.moduleState.onUpdating();\r\n this.setState({\r\n errorMessage\r\n });\r\n };\r\n /**\r\n * Save the address as Shipping and Billing address.\r\n * @param tokenizedPaymentCard - Tokenized payment card.\r\n */\r\n private readonly _saveShippingAndBillingAddress = async (tokenizedPaymentCard?: TokenizedPaymentCard): Promise => {\r\n const checkoutState = this.props.data.checkout.result;\r\n // For Paypal, the address returned in TokenizedPaymentCard will be used as both shipping and billing address.\r\n if (checkoutState && tokenizedPaymentCard && tokenizedPaymentCard.Zip) {\r\n const address: Address = this._getAddressFromTokenizedPaymentCard(tokenizedPaymentCard);\r\n await checkoutState.updateBillingAddressFromExpressCheckout({ newBillingAddressFromExpressCheckout: address });\r\n await checkoutState.updateShippingAddressFromExpressCheckout({ newShippingAddressFromExpressCheckout: address });\r\n }\r\n };\r\n /**\r\n * Get address from tokenizedPaymentCard.\r\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\r\n * @returns The address.\r\n */\r\n private readonly _getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\r\n const address: Address = {\r\n TwoLetterISORegionName: tokenizedPaymentCard.Country,\r\n Name: tokenizedPaymentCard.NameOnCard,\r\n Street: tokenizedPaymentCard.Address1,\r\n StreetNumber: tokenizedPaymentCard.Address2,\r\n City: tokenizedPaymentCard.City,\r\n State: tokenizedPaymentCard.State,\r\n ZipCode: tokenizedPaymentCard.Zip,\r\n Phone: tokenizedPaymentCard.Phone\r\n };\r\n return address;\r\n };\r\n /**\r\n * Handle checkout errors.\r\n * @param error -- The error on checkout api failure.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private readonly handleCheckoutError = (error: any) => {\r\n const {\r\n resources: {\r\n genericErrorMessage,\r\n invalidCartVersionErrorMessage,\r\n missingRequiredCartTenderLinesErrorMessage,\r\n timeoutErrorMessage\r\n },\r\n context: { actionContext }\r\n } = this.props;\r\n const checkoutResult = this.props.data.checkout.result;\r\n const apiError = error && error.message;\r\n if (error?.statusCode === 500) {\r\n const errorMessage = timeoutErrorMessage;\r\n this.setState({\r\n errorMessage\r\n });\r\n this.props.telemetry.exception(error);\r\n this.setState({ isPlaceOrderLoading: false });\r\n return;\r\n }\r\n if (checkoutResult && checkoutResult.shouldEnableCheckoutErrorDisplayMessaging) {\r\n const errorCode = error && error.name ? error.name : '';\r\n // apiError message will be used if errorcode resource/enums is unavailable\r\n setCheckoutErrors(errorCode, this.props.resources, !!checkoutResult.isExpressCheckoutApplied, actionContext, apiError);\r\n } else {\r\n let errorMessage = genericErrorMessage;\r\n this.setState({ isPlaceOrderClicked: false });\r\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\r\n errorMessage = invalidCartVersionErrorMessage;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\r\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\r\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\r\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ExclusiveCouponCannotBeAppliedWithOtherCoupons') {\r\n // If api error is not available show generic message\r\n errorMessage = apiError || genericErrorMessage;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\r\n if (\r\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\r\n error.data?.AdditionalContext &&\r\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\r\n ) {\r\n return;\r\n }\r\n this.setState({\r\n errorMessage\r\n });\r\n this.props.telemetry.exception(error);\r\n }\r\n };\r\n}\r\n\r\nexport default Checkout;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { PlaceOrder } from '../common/place-order';\r\n\r\nexport default async (\r\n ctx: IActionContext,\r\n checkoutState: ICheckoutState | undefined,\r\n orderedProducts: SimpleProduct[] | undefined,\r\n redirect: boolean,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean\r\n) => {\r\n return PlaceOrder(ctx, checkoutState, orderedProducts, redirect, updatedCartVersion, isPaymentVerificationRedirection);\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 { Module } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISocialShareItemViewProps } from './social-share-item';\n\nexport const SocialShareItemView: React.FC = props => {\n const { SocialShareItem, SocialShareItemElement } = props;\n\n if (!SocialShareItemElement) {\n props.context.telemetry.error('Social media is not valid, module wont render');\n return null;\n }\n return {SocialShareItemElement};\n};\n\nexport default SocialShareItemView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\nimport { format, INodeProps, Progress } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface IHistogramItemsProps {\n ratingsSummary: RatingsSummary;\n resources: IHistogramItemsResources;\n locale: string;\n onClick(stars: number): void;\n}\n\nexport interface IHistogramItemsResources {\n barItemAriaLabel: string;\n}\n\nexport interface IHistogramItemViewProps {\n starLabel: React.ReactElement;\n bar: React.ReactElement;\n percentage: React.ReactElement;\n buttonProps: INodeProps;\n}\n\n/**\n * CartLineItems component.\n */\n\nexport const HistogramItems = (props: IHistogramItemsProps): IHistogramItemViewProps[] => {\n const { ratingsSummary } = props;\n const totalRatingsCount: number = ratingsSummary.totalRatingsCount || 0;\n if (totalRatingsCount === 0) {\n return [];\n }\n return [\n renderItem(props, 5, ratingsSummary.star5Count, totalRatingsCount),\n renderItem(props, 4, ratingsSummary.star4Count, totalRatingsCount),\n renderItem(props, 3, ratingsSummary.star3Count, totalRatingsCount),\n renderItem(props, 2, ratingsSummary.star2Count, totalRatingsCount),\n renderItem(props, 1, ratingsSummary.star1Count, totalRatingsCount)\n ];\n};\n\nconst renderItem = (props: IHistogramItemsProps, stars: number, count?: number, totalCount?: number): IHistogramItemViewProps => {\n count = count || 0;\n totalCount = totalCount || 0;\n const percentage = totalCount === 0 ? 0 : count / totalCount;\n const formattedPercent = new Intl.NumberFormat(props.locale, { style: 'percent' }).format(percentage);\n const ariaLabel = format(props.resources.barItemAriaLabel, stars, formattedPercent);\n\n return {\n starLabel: (\n \n ),\n percentage: (\n \n ),\n bar: ,\n buttonProps: {\n tag: 'button',\n className: 'ms-ratings-histogram__item',\n onClick: () => {\n props.onClick(stars);\n }\n }\n };\n};\n\nexport const AverageRatingNumber: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return (\n

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

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

{props.summary.totalRatingsCount}

;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Payment connect post message type.\n */\nexport enum PaymentConnectorPostMessageType {\n CardPrefix = 'msax-cc-cardprefix',\n Error = 'msax-cc-error',\n Height = 'msax-cc-height',\n Result = 'msax-cc-result',\n Submit = 'msax-cc-submit',\n ExtraContext = 'msax-cc-extracontext',\n Redirect = 'msax-cc-redirect',\n Showoverlay = 'msax-cc-showoverlay',\n Hideoverlay = 'msax-cc-hideoverlay',\n ShippingAddress = 'msax-shipping-address',\n Amount = 'msax-cc-amount'\n}\n\n/**\n * Interface for payment connector post message.\n */\nexport interface IPaymentConnectorPostMessage {\n message: string;\n targetOrigin: string;\n}\n\n/**\n * Payment connector message.\n * @param data - Data with message.\n * @param messageType - Message type.\n * @returns Payment connector post message.\n */\nexport function paymentConnectorMessage(data: string, messageType: PaymentConnectorPostMessageType): IPaymentConnectorPostMessage {\n return {\n message: JSON.stringify({\n type: messageType,\n value: data\n }),\n targetOrigin: '*'\n };\n}\n\n/**\n * Payment connector extra context message.\n * @param data - The data.\n * @returns The payment connector post message.\n */\nexport function paymentConnectorExtraContextMessage(data: string): IPaymentConnectorPostMessage {\n return paymentConnectorMessage(data, PaymentConnectorPostMessageType.ExtraContext);\n}\n\n/**\n * Payment connector submit message.\n * @returns The payment connector post message.\n */\nexport function paymentConnectorSubmitMessage(): IPaymentConnectorPostMessage {\n return paymentConnectorMessage('true', PaymentConnectorPostMessageType.Submit);\n}\n\nexport function paymentConnectorAmountMessage(amount: number): IPaymentConnectorPostMessage {\n return paymentConnectorMessage(`${amount}`, PaymentConnectorPostMessageType.Amount);\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\nexport * from './invoice-summary-lineitem';\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","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/**\r\n * Payment connect post message type.\r\n */\r\nexport enum PaymentConnectorPostMessageType {\r\n CardPrefix = 'msax-cc-cardprefix',\r\n Error = 'msax-cc-error',\r\n Height = 'msax-cc-height',\r\n Result = 'msax-cc-result',\r\n Submit = 'msax-cc-submit',\r\n ExtraContext = 'msax-cc-extracontext',\r\n Redirect = 'msax-cc-redirect',\r\n Showoverlay = 'msax-cc-showoverlay',\r\n Hideoverlay = 'msax-cc-hideoverlay',\r\n ShippingAddress = 'msax-shipping-address'\r\n}\r\n\r\n/**\r\n * Interface for payment connector post message.\r\n */\r\nexport interface IPaymentConnectorPostMessage {\r\n message: string;\r\n targetOrigin: string;\r\n}\r\n\r\n/**\r\n * Payment connector message.\r\n * @param data - Data with message.\r\n * @param messageType - Message type.\r\n * @returns Payment connector post message.\r\n */\r\nexport function paymentConnectorMessage(data: string, messageType: PaymentConnectorPostMessageType): IPaymentConnectorPostMessage {\r\n return {\r\n message: JSON.stringify({\r\n type: messageType,\r\n value: data\r\n }),\r\n targetOrigin: '*'\r\n };\r\n}\r\n\r\n/**\r\n * Payment connector extra context message.\r\n * @param data - The data.\r\n * @returns The payment connector post message.\r\n */\r\nexport function paymentConnectorExtraContextMessage(data: string): IPaymentConnectorPostMessage {\r\n return paymentConnectorMessage(data, PaymentConnectorPostMessageType.ExtraContext);\r\n}\r\n\r\n/**\r\n * Payment connector submit message.\r\n * @returns The payment connector post message.\r\n */\r\nexport function paymentConnectorSubmitMessage(): IPaymentConnectorPostMessage {\r\n return paymentConnectorMessage('true', PaymentConnectorPostMessageType.Submit);\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 * as React from 'react';\n\ninterface IAlertProps {\n message: string;\n}\n\nconst CheckoutAlert: React.FC = ({ message }) => (\n

\n {message}\n

\n);\n\nexport default CheckoutAlert;\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 { IAddResource, ICheckoutGiftCardViewProps, IForm, IItem, IList, IShowResource } from './checkout-gift-card';\n\nexport const From: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const SelectedGiftCard: React.FC = ({ itemProps, selectedGiftCard, removeButton }) => (\n \n {selectedGiftCard}\n {removeButton}\n \n);\n\nexport const GiftCardList: React.FC = ({ listProps, list }) => (\n \n {list.map(({ id, ...item }) => (\n \n ))}\n \n);\n\nexport const AddResource: React.FC = ({ form, list }) => (\n <>\n {form && }\n {list && }\n \n);\n\nexport const ShowResource: React.FC = ({ title, list }) => (\n <>\n {title}\n {list && }\n \n);\n\nconst CheckoutGiftCardView: React.FC = props => {\n const { checkoutGiftCardProps, checkoutErrorRef, showGiftCard, addGiftCard } = props;\n return (\n \n {showGiftCard && }\n {addGiftCard && }\n \n );\n};\n\nexport default CheckoutGiftCardView;\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: { cancelBtnLabel, productNumberText, productText, productUnitPriceText, productUOMText, productQuantityText }\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 {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 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 { TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\ninterface ICheckoutPlaceOrderButtonProps {\n canPlaceOrder: boolean;\n checkoutBtnText: string;\n telemetryContent?: ITelemetryContent;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n isPlaceOrderLoading?: boolean;\n isExpressCheckoutApplied?: boolean;\n isPaymentVerificationRedirection?: boolean;\n placeOrder(): Promise;\n}\n\nconst buttonsStates: React.Dispatch>[] = [];\n\n/**\n * On place order function.\n * @param isBusy -Check is busy.\n * @param canPlaceOrder -Check can place order.\n * @param placeOrder -Place order function.\n * @returns Set state of button.\n */\nconst onPlaceOrderHandler = (isBusy: boolean, canPlaceOrder: boolean, placeOrder: () => Promise) => async () => {\n if (isBusy || !canPlaceOrder) {\n return;\n }\n buttonsStates.map(buttonSetState => {\n buttonSetState(true);\n return true;\n });\n await placeOrder();\n};\n\nconst CheckoutPlaceOrderButton: React.FC = ({\n checkoutBtnText,\n canPlaceOrder,\n placeOrder,\n telemetryContent,\n shouldEnableSinglePaymentAuthorizationCheckout,\n isPlaceOrderLoading,\n isExpressCheckoutApplied,\n isPaymentVerificationRedirection\n}) => {\n const [isBusy, setIsBusy] = useState(false);\n buttonsStates.push(setIsBusy);\n const payload = getPayloadObject(TelemetryEvent.Purchase, telemetryContent!, checkoutBtnText, '');\n const attributes = getTelemetryAttributes(telemetryContent!, payload);\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && (!isExpressCheckoutApplied || isPaymentVerificationRedirection)) {\n return (\n \n {checkoutBtnText}\n \n );\n }\n\n return (\n \n {checkoutBtnText}\n \n );\n};\n\nexport default CheckoutPlaceOrderButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport withModuleState from './with-module-state';\n\nexport * from './module-state';\nexport * from './module-state.data';\n\nexport { withModuleState };\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport {\r\n IGroup,\r\n IGroups,\r\n IHeader,\r\n IList,\r\n IOrderHistoryViewProps,\r\n IOrderInformation,\r\n ISalesOrder\r\n} from '@msdyn365-commerce-modules/order-management';\r\nimport { IMandsOrderHistoryProps } from './mands-order-history.props.autogenerated';\r\nimport { OrderShipments } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nexport interface IOrderHistoryState {\r\n productInformation: (\r\n | {\r\n pId: string | undefined;\r\n pName: string | undefined;\r\n pQuantity: number | undefined;\r\n }[][]\r\n | undefined\r\n )[];\r\n count: number;\r\n}\r\nexport interface IProductId {\r\n pId: string;\r\n pName: string;\r\n pQuantity: number;\r\n}\r\nexport interface IOrderIndex {\r\n _index: number;\r\n}\r\nexport interface IOrderStatus {\r\n SalesStatus: string | undefined;\r\n}\r\n\r\nexport interface IOrderInfo {\r\n createdDateTime: string | undefined;\r\n orderID: string | undefined;\r\n orderTotal: string | 0 | undefined;\r\n}\r\n/**\r\n *\r\n * Order History Component\r\n * @extends {React.PureComponent}\r\n */\r\n\r\nexport class OrderHistoryView extends React.PureComponent, IOrderHistoryState> {\r\n constructor(props: IOrderHistoryViewProps & IMandsOrderHistoryProps<{}>) {\r\n super(props);\r\n this.state = {\r\n productInformation: [],\r\n count: 0\r\n };\r\n }\r\n public render(): JSX.Element {\r\n const { orderHistoryProps, header, alert, loading, emptyMessage, backToShoppingLink, list } = this.props;\r\n return (\r\n \r\n {header && }\r\n {this.renderHeadingRow()}\r\n {loading}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {emptyMessage && (\r\n <>\r\n {emptyMessage}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {list && }\r\n \r\n );\r\n }\r\n public getOrderProducts = (salesOrders: ISalesOrder[]) => {\r\n return salesOrders.map(\r\n (salesOrder, index) =>\r\n salesOrder.groups &&\r\n salesOrder.groups.groups.map((group, j) =>\r\n group.salesLines.map((salesLine, k) => {\r\n return {\r\n pId: salesLine.data.product?.ItemId ? salesLine.data.product.ItemId.toString() : '',\r\n pName: salesLine.data.product?.Name ? salesLine.data.product.Name.toString() : '',\r\n pQuantity: 0\r\n };\r\n })\r\n )\r\n );\r\n };\r\n public OrderHistoryList: React.FC = ({ listProps, salesOrders }) => {\r\n const prodInformation = this.getOrderProducts(salesOrders);\r\n prodInformation.map((prod, k) => {\r\n const products: IProductId[] = [];\r\n prod &&\r\n prod[0].map(item => {\r\n const index = products.findIndex(y => y.pId === item.pId);\r\n if (index !== -1) {\r\n products[index].pQuantity = products[index].pQuantity ? (products[index].pQuantity += 1) : 0;\r\n } else {\r\n item.pQuantity = 1;\r\n products.push(item);\r\n }\r\n });\r\n if (prod && prod[0]) {\r\n prod[0] = products;\r\n }\r\n });\r\n this.setState(state => {\r\n if (state.count >= 3) {\r\n return null;\r\n }\r\n return { productInformation: prodInformation, count: state.count + 1 };\r\n });\r\n return (\r\n \r\n {salesOrders &&\r\n salesOrders.map((salesOrder, index) => )}\r\n \r\n );\r\n };\r\n private renderHeadingRow = () => {\r\n const {\r\n config: { orderSummaryLabel, orderDescriptionLabel, orderStatusLabel, orderActionLabel }\r\n } = this.props;\r\n return (\r\n
\r\n
\r\n \r\n {orderSummaryLabel}\r\n \r\n
\r\n
\r\n \r\n {orderDescriptionLabel}\r\n \r\n
\r\n
\r\n \r\n {orderStatusLabel}\r\n \r\n
\r\n
\r\n \r\n {orderActionLabel}\r\n \r\n
\r\n
\r\n );\r\n };\r\n private getOrderInformation = (index: number) => {\r\n const salesOrder = this.props.orderHistory && this.props.orderHistory.salesOrders[index];\r\n let dateTime = salesOrder && salesOrder.CreatedDateTime && salesOrder.CreatedDateTime.toString();\r\n dateTime = dateTime && dateTime.substring(4, 21); // Mar 13 2020 20:30:18\r\n const salesID = salesOrder && salesOrder.ChannelReferenceId && salesOrder.ChannelReferenceId.toString();\r\n const totalAmount = salesOrder && salesOrder.TotalAmount && salesOrder.TotalAmount.toString();\r\n const orderInfo: IOrderInfo = {\r\n createdDateTime: dateTime,\r\n orderID: salesID,\r\n orderTotal: totalAmount\r\n };\r\n orderInfo;\r\n return orderInfo;\r\n };\r\n private OrderHistoryOrderInfomation: React.FC = props => {\r\n const { orderInformationProps, _index, SalesStatus } = props;\r\n const {\r\n config: { confirmationIDLabel, orderTotalLabel },\r\n context: { cultureFormatter }\r\n } = this.props;\r\n const productInfo = this.state.productInformation;\r\n const currOrderProductsInfo = productInfo && productInfo[_index];\r\n const currentOrderProducts = currOrderProductsInfo && currOrderProductsInfo[0];\r\n const salesStatus =\r\n SalesStatus &&\r\n SalesStatus.split('')\r\n .map((word, index) => {\r\n return index === 0 ? word.toUpperCase() : word;\r\n })\r\n .join('');\r\n const currentOrderInfo: IOrderInfo = this.getOrderInformation(_index);\r\n return (\r\n <>\r\n
\r\n \r\n \r\n {currentOrderInfo.createdDateTime}\r\n \r\n
\r\n \r\n \r\n {confirmationIDLabel}\r\n \r\n {currentOrderInfo.orderID}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {orderTotalLabel} {cultureFormatter.formatCurrency(Number(currentOrderInfo.orderTotal).toFixed(2))}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {currentOrderProducts &&\r\n currentOrderProducts.map(product => (\r\n <>\r\n \r\n {product.pName} {product.pQuantity && product.pQuantity > 1 ? `(${product.pQuantity} items) ` : ''}\r\n \r\n
\r\n \r\n ))}\r\n
\r\n
\r\n
\r\n {salesStatus}\r\n
\r\n \r\n );\r\n };\r\n private OrderHistoryGroup: React.FC = () => {\r\n return null;\r\n };\r\n private OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => {\r\n return (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n );\r\n };\r\n private OrderHistoryHeader: React.FC = ({ headerProps, orderCountLabel }) => {\r\n const {\r\n config: { orderHeadingLabel }\r\n } = this.props;\r\n return (\r\n \r\n

{orderHeadingLabel}

\r\n {orderCountLabel}\r\n
\r\n );\r\n };\r\n private OrderHistorySalesOder: React.FC = props => {\r\n const { salesOrderProps, orderInfomation, groups, orderDetailsLink, _index } = props;\r\n const orderStatus = groups && groups.groups && groups.groups[0].data && groups.groups[0].data.salesStatus.toString();\r\n const {\r\n orderHistory: { salesOrders }\r\n } = this.props;\r\n let salesStatusCode: string | undefined = '';\r\n const salesID: string = salesOrderProps.key;\r\n let currentSalesOrder: OrderShipments | undefined;\r\n const currentSalesOrderIndex = salesOrders.findIndex(salesOrder => salesOrder.SalesId === salesID);\r\n\r\n if (currentSalesOrderIndex !== -1) {\r\n currentSalesOrder = salesOrders[currentSalesOrderIndex];\r\n currentSalesOrder.SalesLines?.some(salesLine => {\r\n const QuantityInvoiced = salesLine.QuantityInvoiced || 0;\r\n const QuantityOrdered = salesLine.QuantityOrdered || 0;\r\n if (QuantityInvoiced > 0 && QuantityInvoiced < QuantityOrdered) {\r\n salesStatusCode = 'Partial Shipped';\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n !salesStatusCode &&\r\n currentSalesOrder.SalesLines?.some(salesLine => {\r\n if (salesLine.SalesStatusValue === 4) {\r\n salesStatusCode = 'Shipped';\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n salesStatusCode = salesStatusCode ? salesStatusCode : orderStatus;\r\n console.log('order status <<>>', salesID, salesStatusCode);\r\n\r\n return (\r\n \r\n
\r\n {orderInfomation && (\r\n \r\n )}\r\n {groups && }\r\n
{orderDetailsLink}
\r\n
\r\n
\r\n );\r\n };\r\n}\r\nexport default OrderHistoryView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselData } from './carousel.data';\nimport { ICarouselProps } from './carousel.props.autogenerated';\nimport { ICarouselState } from './carousel.state';\n\nexport interface ICarouselViewProps extends ICarouselProps<{}>, ICarouselState {\n closeAnimation: string;\n carouselContainer: IModuleProps;\n telemetryContent: ITelemetryContent;\n next(): void;\n previous(): void;\n onIndicatorsClickHandler(): void;\n handleDismissCarousel(): void;\n handleOnExited(): void;\n handleOnExiting(): void;\n}\n\n/**\n *\n * CarouselModule component.\n * @extends {React.PureComponent>}\n */\nclass CarouselModule extends React.PureComponent, ICarouselState> {\n private animating: boolean;\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: ICarouselProps, state: ICarouselState) {\n super(props);\n this.state = { activeIndex: 0, closeNow: false, dismissCarousel: false };\n this.animating = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n if (this.props.context.request.cookies.get(`CarouselDismiss_${this.props.id}`) === undefined) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'false');\n this.setState({ dismissCarousel: false });\n }\n }\n }\n\n public render(): JSX.Element | null {\n if (this.state.dismissCarousel) {\n return null;\n }\n\n const { className } = this.props.config;\n\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n ...this.state,\n telemetryContent: this.telemetryContent,\n carouselContainer: {\n moduleProps: this.props,\n className: classnames('ms-carousel', className)\n },\n closeAnimation: this.state.closeNow ? 'close-now' : '',\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n handleDismissCarousel: this._handleDismissCarousel,\n handleOnExited: this._onExited,\n handleOnExiting: this._onExiting\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Function implementation to dismiss the Carousel.\n */\n private readonly _handleDismissCarousel = (): void => {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'true');\n this.setState({ dismissCarousel: true });\n }\n };\n\n /**\n * Function implementation to move to next slide.\n */\n private readonly _next = (): void => {\n const { slots } = this.props;\n const nextIndex = this.state.activeIndex === (slots && slots.content && slots.content.length - 1) ? 0 : this.state.activeIndex + 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n /**\n * Function implementation to move to previous slide.\n */\n private readonly _previous = (): void => {\n const slots = this.props.slots && this.props.slots.content;\n const nextIndex = this.state.activeIndex === 0 ? (slots ? slots.length - 1 : 0) : this.state.activeIndex - 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n private readonly _onExiting = (): void => {\n this.animating = true;\n };\n\n private readonly _onExited = (): void => {\n this.animating = false;\n this.setState({ closeNow: false });\n };\n\n /**\n * Function implementation to move to a given slide.\n * @param newIndex\n */\n private readonly _goToIndex = (newIndex: number): void => {\n if (this.animating) {\n return;\n }\n this.setState({ activeIndex: newIndex });\n };\n}\n\nexport default CarouselModule;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHistogramItemViewProps } from './component/components';\nimport { IRatingsHistogramViewProps } from './ratings-histogram';\n\nconst RatingsHistogramView: React.FC = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n\n return (\n \n {heading}\n \n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n \n \n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n \n {props.starLabel}\n {props.bar}\n {props.percentage}\n \n );\n};\n\nexport default RatingsHistogramView;\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IAny, ICoreContext, IGeneric, IImageSettings, IModule } from '@msdyn365-commerce/core';\r\nimport { SalesLine, TenderType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\r\nimport groupBy from 'lodash/groupBy';\r\nimport { ISalesLine } from './get-sales-line';\r\n\r\nexport interface IModuleComponentProps extends IModule {\r\n config: {\r\n imageSettings?: IImageSettings;\r\n };\r\n}\r\n\r\nexport interface IPriceContext {\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext>;\r\n telemetry: ITelemetry;\r\n freePriceText: string;\r\n}\r\n\r\nexport const getTenderIdOperationIdMap = (tenderTypes: TenderType[]): object => {\r\n return tenderTypes.reduce((map, tenderType) => {\r\n if (tenderType.TenderTypeId) {\r\n map[tenderType.TenderTypeId] = tenderType.OperationId;\r\n }\r\n return map;\r\n // tslint:disable-next-line:align\r\n }, {});\r\n};\r\n\r\nexport const countItems = (salesLines: SalesLine[]) => {\r\n return salesLines.reduce((count, salesLine) => {\r\n return count + (salesLine.Quantity || 0);\r\n // tslint:disable-next-line:align\r\n }, 0);\r\n};\r\n\r\nexport const getSalesLinesByDelivery = (salesLines?: SalesLine[], pickupDeliveryModeCode?: string): SalesLine[] => {\r\n if (!salesLines || !salesLines.length) {\r\n return [];\r\n }\r\n return salesLines.filter(salesLine =>\r\n // isPickUp ? getPickUp : getOthers\r\n pickupDeliveryModeCode ? salesLine.DeliveryMode === pickupDeliveryModeCode : salesLine.DeliveryMode !== pickupDeliveryModeCode\r\n );\r\n};\r\n\r\nexport const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=80&h=80&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=147&h=147&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n};\r\n\r\nexport type IDeliveryType = 'pickUp' | 'ship' | 'unknown';\r\n\r\nexport type ISalesStatusCode = 'canceled' | 'readyForPickup' | 'pickedUp' | 'processing' | 'shipped' | 'partialShipped' | 'unknown';\r\n\r\nexport const getSalesStatusCode = (deliveryType: IDeliveryType, salesLine: SalesLine, statusValue?: number): ISalesStatusCode => {\r\n const QuantityInvoiced = salesLine.QuantityInvoiced || 0;\r\n const QuantityOrdered = salesLine.QuantityOrdered || 0;\r\n console.log('QuantityInvoiced', QuantityInvoiced);\r\n console.log('QuantityOrdered', QuantityOrdered);\r\n if (QuantityInvoiced > 0 && QuantityInvoiced < QuantityOrdered) {\r\n return 'partialShipped';\r\n }\r\n if (statusValue === 7) {\r\n return 'canceled';\r\n }\r\n if (deliveryType === 'pickUp') {\r\n switch (statusValue) {\r\n case 3:\r\n return 'readyForPickup';\r\n case 4:\r\n return 'pickedUp';\r\n default:\r\n return 'processing';\r\n }\r\n } else if (deliveryType === 'ship') {\r\n switch (statusValue) {\r\n case 3:\r\n return 'processing';\r\n case 4:\r\n return 'shipped';\r\n default:\r\n return 'processing';\r\n }\r\n } else {\r\n return 'unknown';\r\n }\r\n};\r\n\r\nexport type ITrackingId = string | 'unknown';\r\nexport type IAddressId = string | 'unknown';\r\n\r\nexport interface IGroupData {\r\n deliveryType: IDeliveryType;\r\n salesStatus: ISalesStatusCode;\r\n addressId: IAddressId | 'unknown';\r\n trackingId: ITrackingId | 'unknown';\r\n count: number;\r\n salesLines: ISalesLine[];\r\n}\r\n\r\nexport const groupSalesLines = (salesLines: ISalesLine[]): IGroupData[] => {\r\n const getGroupByDeliveryType = (items: ISalesLine[]) => groupBy(items, item => item.data.deliveryType);\r\n const getGroupBySalesStatusCode = (items: ISalesLine[]) => groupBy(items, item => item.data.salesStatus);\r\n const getGroupByTrackingId = (items: ISalesLine[]) => groupBy(items, item => item.data.salesLine.TrackingId || 'unknown');\r\n const getGroupByAddressId = (items: ISalesLine[]) =>\r\n groupBy(items, item => (item.data.salesLine.ShippingAddress && item.data.salesLine.ShippingAddress.RecordId) || 'unknown');\r\n\r\n const flatGroup: IGroupData[] = [];\r\n\r\n // 1) Group by delivery type\r\n // @ts-ignore\r\n const group = getGroupByDeliveryType(salesLines);\r\n\r\n // 2) Group by sales status code\r\n Object.entries(group).forEach(([deliveryType, groupByDeliveryType]) => {\r\n // @ts-ignore\r\n group[deliveryType] = getGroupBySalesStatusCode(groupByDeliveryType);\r\n\r\n Object.entries(group[deliveryType]).forEach(([salesStatus, groupBySalesStatusCode]) => {\r\n // @ts-ignore 3) Group by address id\r\n groupBySalesStatusCode[salesStatus] = getGroupByAddressId(groupBySalesStatusCode);\r\n\r\n // @ts-ignore\r\n Object.entries(groupBySalesStatusCode[salesStatus]).forEach(([addressId, groupByAddressId]) => {\r\n // @ts-ignore 4) Group by address id\r\n groupByAddressId[addressId] = getGroupByTrackingId(groupByAddressId);\r\n\r\n // @ts-ignore\r\n Object.entries(groupByAddressId[addressId]).forEach(([trackingId, groupByTrackingId]) => {\r\n flatGroup.push({\r\n // @ts-ignore\r\n deliveryType,\r\n // @ts-ignore\r\n salesStatus,\r\n addressId,\r\n trackingId,\r\n // @ts-ignore\r\n count: countItems(groupByTrackingId.map(item => item.data.salesLine)),\r\n // @ts-ignore\r\n salesLines: groupByTrackingId\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n return flatGroup;\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 { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISalesLine } from './get-sales-line';\r\nimport { groupSalesLines, IDeliveryType, ISalesStatusCode } from './utilities';\r\n\r\nexport interface IGroupDelivery {\r\n deliveryProps: INodeProps;\r\n heading: React.ReactNode;\r\n count: React.ReactNode;\r\n processing: React.ReactNode;\r\n trackingInfo: React.ReactNode;\r\n address: React.ReactNode;\r\n}\r\n\r\nexport interface IGroup {\r\n groupProps: INodeProps;\r\n salesLinesProps: INodeProps;\r\n delivery: IGroupDelivery;\r\n salesLines: ISalesLine[];\r\n // row data\r\n data: {\r\n count: number;\r\n deliveryType: IDeliveryType;\r\n salesStatus: ISalesStatusCode;\r\n };\r\n}\r\n\r\nexport interface IGroupsInput {\r\n moduleName: string;\r\n salesLines: ISalesLine[];\r\n resources: {\r\n orderItemLabel: string;\r\n orderItemsLabel: string;\r\n shippingItemToOBOCustomerLabel?: string;\r\n };\r\n isOboRequest?: boolean;\r\n customerName?: string;\r\n}\r\n\r\nexport interface IGroups {\r\n groupsProps: INodeProps;\r\n groups: IGroup[];\r\n}\r\n\r\nexport const getGroups = ({\r\n moduleName,\r\n salesLines,\r\n customerName,\r\n isOboRequest,\r\n resources: { orderItemLabel, orderItemsLabel, shippingItemToOBOCustomerLabel }\r\n}: IGroupsInput): IGroups => {\r\n const groups = groupSalesLines(salesLines).map(group => {\r\n const { deliveryType, salesStatus, count, salesLines: _salesLines } = group;\r\n const itemLabel = count === 1 ? orderItemLabel : orderItemsLabel;\r\n const groupProps = { className: `${moduleName}__group deliveryType-${deliveryType} salesStatus-${salesStatus}` };\r\n const salesLinesProps = { className: `${moduleName}__sales-lines` };\r\n const address = _salesLines[0].address;\r\n const trackingInfo = _salesLines[0].trackingInfo;\r\n const isProcessing = _salesLines[0].data.salesStatus === 'processing';\r\n const delivery = {\r\n deliveryProps: { className: `${moduleName}__group-delivery` },\r\n heading: (\r\n \r\n {isProcessing ? _salesLines[0].deliveryType : _salesLines[0].salesStatus}\r\n \r\n ),\r\n processing: isProcessing ? (\r\n {_salesLines[0].salesStatus}\r\n ) : (\r\n undefined\r\n ),\r\n count: {`(${count} ${itemLabel})`},\r\n trackingInfo,\r\n address\r\n };\r\n return {\r\n groupProps,\r\n salesLinesProps,\r\n delivery,\r\n salesLines: _salesLines,\r\n data: {\r\n count,\r\n deliveryType,\r\n salesStatus\r\n }\r\n };\r\n });\r\n\r\n return {\r\n groupsProps: { className: `${moduleName}__groups` },\r\n groups\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 { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { ChannelIdentity, Customer, OrderOriginator, OrderShipments, OrgUnitLocation, SalesOrder } from '@msdyn365-commerce/retail-proxy';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { countItems, IModuleComponentProps, IPriceContext } from './utilities';\r\nimport { isOboRequest } from '@msdyn365-commerce/core';\r\n\r\nexport interface IOrderInformationInputResources {\r\n receiptEmailMessage?: string;\r\n orderItemLabel: string;\r\n orderItemsLabel: string;\r\n processingLabel: string;\r\n orderIdLabel: string;\r\n confirmationIdLabel: string;\r\n trackingLabel: string;\r\n trackingAriaLabel: string;\r\n trackingComingSoonLabel: string;\r\n orderPlacedByFullText?: string;\r\n orderPlacedByYouText?: string;\r\n orderOnBehalfOfText?: string;\r\n}\r\nexport interface IOrderInformationInput {\r\n moduleName: string;\r\n channelReferenceId?: string;\r\n receiptEmail?: string;\r\n createdDate?: string;\r\n amount?: number;\r\n priceContext: IPriceContext;\r\n salesId?: string;\r\n hasTrackingInfo?: boolean;\r\n count?: number;\r\n resources: IOrderInformationInputResources;\r\n originator?: OrderOriginator;\r\n isYou?: [boolean, boolean];\r\n isB2bAdmin?: boolean;\r\n isOnlineStore?: boolean;\r\n priceCurrency?: string;\r\n}\r\nconst callCenterChannelTypeValue = 4;\r\nexport interface IOrderInformation {\r\n orderInformationProps: INodeProps;\r\n placedBy?: React.ReactNode;\r\n salesId: React.ReactNode;\r\n receiptEmail: React.ReactNode;\r\n createdDate: React.ReactNode;\r\n count: React.ReactNode;\r\n amount: React.ReactNode;\r\n channelReferenceId: React.ReactNode;\r\n}\r\n\r\nconst getPlacedBy = (\r\n moduleName: string,\r\n originator: OrderOriginator | undefined,\r\n isYou: [boolean, boolean] | undefined,\r\n orderPlacedByFullText: string | undefined,\r\n orderPlacedByYouText: string | undefined,\r\n orderOnBehalfOfText: string | undefined\r\n): React.ReactNode | undefined => {\r\n let placedByNode: React.ReactNode | undefined;\r\n if (originator) {\r\n const placedByName =\r\n originator.StaffId && originator.StaffName\r\n ? originator.StaffName\r\n : originator.CustomerId && originator.CustomerName\r\n ? originator.CustomerName\r\n : '-';\r\n const onBehalfOfText = originator.StaffId && originator.StaffName && originator.CustomerId && originator.CustomerName;\r\n placedByNode = (\r\n
\r\n {orderPlacedByFullText} {placedByName} {isYou && isYou[0] && ` ${orderPlacedByYouText}`}\r\n {onBehalfOfText && (\r\n
\r\n {orderOnBehalfOfText} {`${originator.CustomerName}`}\r\n {isYou && isYou[1] && ` ${orderPlacedByYouText}`}\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n return placedByNode;\r\n};\r\n\r\nexport const getOrderInformation = ({\r\n moduleName,\r\n channelReferenceId,\r\n receiptEmail,\r\n createdDate,\r\n amount,\r\n priceContext,\r\n originator,\r\n isYou,\r\n salesId,\r\n count,\r\n priceCurrency,\r\n resources: {\r\n receiptEmailMessage,\r\n orderItemLabel,\r\n orderItemsLabel,\r\n processingLabel,\r\n orderIdLabel,\r\n orderPlacedByFullText,\r\n orderPlacedByYouText,\r\n orderOnBehalfOfText,\r\n confirmationIdLabel\r\n }\r\n}: IOrderInformationInput): IOrderInformation => ({\r\n orderInformationProps: { className: `${moduleName}__order-information` },\r\n placedBy: getPlacedBy(moduleName, originator, isYou, orderPlacedByFullText, orderPlacedByYouText, orderOnBehalfOfText),\r\n salesId: {`${orderIdLabel} ${salesId || processingLabel}`},\r\n receiptEmail: receiptEmail && (\r\n \r\n {receiptEmailMessage}\r\n {receiptEmail}\r\n \r\n ),\r\n createdDate: {createdDate},\r\n count: count !== undefined && count > 0 && (\r\n \r\n {count === 1 ? `${count} ${orderItemLabel}` : `${count} ${orderItemsLabel}`}\r\n \r\n ),\r\n amount: (amount || amount === 0) && (\r\n \r\n ),\r\n channelReferenceId: channelReferenceId && (\r\n {`${confirmationIdLabel} ${channelReferenceId}`}\r\n )\r\n});\r\n\r\ninterface IProps extends IModuleComponentProps {\r\n resources: IOrderInformationInputResources;\r\n customer?: Customer;\r\n}\r\n\r\n/**\r\n * Retrieves channel is online store or not.\r\n * @param channelTypeValue - The channel type.\r\n * @param channelAddress - Channel Address.\r\n * @returns {Boolean} that indicates that the channel is in the online store.\r\n */\r\nexport const isOnlineStoreChannel = (channelTypeValue: number | undefined, channelAddress: string | undefined): boolean => {\r\n return channelTypeValue !== callCenterChannelTypeValue && !channelAddress;\r\n};\r\nexport const getOrderChannelTypeValue: (order: SalesOrder | OrderShipments, channelIdentities?: ChannelIdentity[]) => number | undefined = (\r\n order: SalesOrder | OrderShipments,\r\n channelIdentities?: ChannelIdentity[]\r\n) => {\r\n const orderChannel = channelIdentities?.find(channel => {\r\n return channel.RecordId === order.ChannelId;\r\n });\r\n\r\n const channelType = orderChannel?.ChannelType.Value;\r\n return channelType;\r\n};\r\n\r\n/**\r\n * Retrieves order channel address.\r\n * @param order - Order info.\r\n * @param orgUnitLocations - OrgUnitLocation data.\r\n * @returns String with the address of the channel or an empty string.\r\n */\r\nexport const getOrderChannelAddress: (order: SalesOrder | OrderShipments, orgUnitLocations?: OrgUnitLocation[]) => string = (\r\n order: SalesOrder | OrderShipments,\r\n orgUnitLocations?: OrgUnitLocation[]\r\n) => {\r\n const orderOrgUnitLocation = orgUnitLocations?.find(location => {\r\n return location.ChannelId === order.ChannelId;\r\n });\r\n\r\n const channelAddress = orderOrgUnitLocation?.Address ?? '';\r\n return channelAddress;\r\n};\r\n\r\n/**\r\n * @param {Customer} customer A current customer.\r\n * @param {OrderOriginator} originator The order originator.\r\n * */\r\nexport const getOrderInfomationInput = (\r\n props: IProps,\r\n moduleName: string,\r\n order: SalesOrder | OrderShipments,\r\n priceContext: IPriceContext,\r\n channelIdentities?: ChannelIdentity[],\r\n orgUnitLocations?: OrgUnitLocation[],\r\n customer?: Customer,\r\n originator?: OrderOriginator,\r\n showChannelInfo?: boolean,\r\n isSalesInvoice?: boolean,\r\n shouldShowQrCode?: boolean\r\n): IOrderInformationInput => {\r\n const {\r\n resources,\r\n context: {\r\n request: {\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = props;\r\n\r\n // @ts-ignore OrderShipments doesnt has ChannelId\r\n const showTrackingInfo = !!order.ChannelId && order.ChannelId === channelId;\r\n\r\n const locale = get(props, 'context.request.locale') || 'en-US';\r\n const count = order.SalesLines && order.SalesLines.length ? countItems(order.SalesLines) : 0;\r\n const channelTypeValue = getOrderChannelTypeValue(order, channelIdentities);\r\n const channelAddress = getOrderChannelAddress(order, orgUnitLocations);\r\n const isYou =\r\n !isOboRequest(props.context.request) &&\r\n originator?.CustomerId &&\r\n originator?.CustomerName &&\r\n !originator?.StaffId &&\r\n !originator?.StaffName &&\r\n customer?.AccountNumber === originator?.CustomerId\r\n ? true\r\n : false;\r\n const isYouObo = !isYou && !isOboRequest(props.context.request);\r\n return {\r\n moduleName: moduleName,\r\n createdDate: (order.CreatedDateTime && new Date(order.CreatedDateTime).toLocaleDateString(locale)) || '',\r\n salesId: order.SalesId,\r\n priceCurrency: order.CurrencyCode,\r\n originator: originator,\r\n isYou: [isYou, isYouObo],\r\n isB2bAdmin: customer?.IsB2bAdmin,\r\n // @ts-ignore OrderShipments doesnt has ReceiptEmail\r\n receiptEmail: order.ReceiptEmail,\r\n channelReferenceId: order.ChannelReferenceId,\r\n amount: order.TotalAmount || 0,\r\n priceContext: priceContext,\r\n count,\r\n resources,\r\n isOnlineStore: isOnlineStoreChannel(channelTypeValue, channelAddress)\r\n };\r\n};\r\n","/* eslint-disable no-redeclare */\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 { Address as AddressRetail } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { IDeliveryType } from './utilities';\r\n\r\nexport type addressType = 'store' | 'ship';\r\n\r\nexport interface IShippingAddressProps {\r\n moduleName: string;\r\n address: AddressRetail;\r\n deliveryType: IDeliveryType;\r\n resource: {\r\n shipToLabel: string;\r\n storeLabel: string;\r\n phoneLabel: string;\r\n phoneAriaLabel: string;\r\n };\r\n}\r\n\r\nconst Address: React.SFC = ({\r\n moduleName,\r\n address,\r\n deliveryType,\r\n resource: { shipToLabel, storeLabel, phoneLabel, phoneAriaLabel }\r\n}) => (\r\n
\r\n
{deliveryType === 'pickUp' ? storeLabel : shipToLabel}
\r\n {address.Name && {address.Name}}\r\n {address.FullAddress && {address.FullAddress}}\r\n\r\n {/* TODO: Address format is based on country format\r\n {address.Name && {address.Name}}\r\n {address.Street && {address.Street} }\r\n {address.City && {address.City}}\r\n {address.State && {`, ${address.State}`}}\r\n {address.ZipCode && {` ${address.ZipCode}`}}\r\n {address.Phone && (\r\n {phoneLabel}\r\n \r\n {address.Phone}\r\n \r\n \r\n )} */}\r\n
\r\n);\r\n\r\nexport default React.memo(Address);\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 * as React from 'react';\r\n\r\ninterface ILabelProps {\r\n className: string;\r\n label: string;\r\n}\r\n\r\nconst Label: React.FC = ({ className, label }) => {label};\r\n\r\nexport default Label;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\r\nimport { Image } from '@msdyn365-commerce/core';\r\nimport { ProductCatalog, SalesLine, Shipment, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport Address from './address';\r\nimport LabelComponent from './label';\r\nimport { defaultImageSettings, getSalesStatusCode, IDeliveryType, IModuleComponentProps, ISalesStatusCode } from './utilities';\r\n\r\nexport type ISalesStatusStringMap = {\r\n [x in ISalesStatusCode]: string | undefined;\r\n};\r\n\r\nexport type IDeliveryTypeStringMap = {\r\n [x in IDeliveryType]: string | undefined;\r\n};\r\n\r\nexport interface ISalesLineResources {\r\n productDimensionTypeSize: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeStyle: string;\r\n salesLineQuantityText: string;\r\n configString: string;\r\n shipToLabel: string;\r\n storeLabel: string;\r\n phoneLabel: string;\r\n phoneAriaLabel: string;\r\n buyItAgainAriaLabel: string;\r\n buyItAgainLabel: string;\r\n orderStatusReadyForPickup: string;\r\n orderStatusPickedUp: string;\r\n orderStatusShipped: string;\r\n orderStatusCanceled: string;\r\n orderStatusProcessing: string;\r\n pickedUpSalesLines: string;\r\n deliveredSalesLines: string;\r\n trackingLabel: string;\r\n trackingAriaLabel: string;\r\n trackingComingSoonLabel: string;\r\n discountStringText: string;\r\n orderStatusPartialShipped: string;\r\n}\r\n\r\nexport interface IGetSalesLineInput {\r\n moduleName: string;\r\n moduleComponentProps: IModuleComponentProps;\r\n product: SimpleProduct;\r\n shipment?: Shipment;\r\n salesLine: SalesLine;\r\n isCurrentChannel: boolean;\r\n resources: ISalesLineResources;\r\n imageOnly?: boolean;\r\n catalogs?: ProductCatalog[];\r\n priceCurrency?: string;\r\n}\r\n\r\nexport interface ISalesLine {\r\n salesLineProps: INodeProps;\r\n salesLine: React.ReactNode;\r\n address?: React.ReactNode;\r\n buyAgainButton?: React.ReactNode;\r\n salesStatus: React.ReactNode;\r\n deliveryType: React.ReactNode;\r\n trackingInfo: React.ReactNode;\r\n\r\n // row data\r\n data: {\r\n salesLine: SalesLine;\r\n product: SimpleProduct;\r\n shipment?: Shipment;\r\n deliveryType: IDeliveryType;\r\n productUrl: string | undefined;\r\n salesStatus: ISalesStatusCode;\r\n };\r\n}\r\nenum deliveryTypeEnum {\r\n ship = 'ship',\r\n email = 'email',\r\n carryOut = 'carryOut',\r\n pickUp = 'pickUp'\r\n}\r\n\r\nexport const getDeliveryTypeClassName = (\r\n deliveryType: string,\r\n deliveryTypeStringMap: IDeliveryTypeStringMap,\r\n retailMultiplePickupOption?: boolean\r\n): string | undefined => {\r\n switch (deliveryType) {\r\n case deliveryTypeEnum.ship:\r\n case deliveryTypeEnum.carryOut:\r\n case deliveryTypeEnum.email:\r\n return deliveryType;\r\n default:\r\n return deliveryTypeEnum.pickUp;\r\n }\r\n};\r\n// tslint:disable-next-line:max-func-body-length\r\nexport const getSalesLine = ({\r\n moduleName,\r\n moduleComponentProps: {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n config: { imageSettings }\r\n },\r\n product,\r\n shipment,\r\n salesLine,\r\n isCurrentChannel,\r\n imageOnly,\r\n resources: {\r\n productDimensionTypeSize: sizeString,\r\n productDimensionTypeColor: colorString,\r\n productDimensionTypeStyle: styleString,\r\n salesLineQuantityText: quantityDisplayString,\r\n configString,\r\n shipToLabel,\r\n storeLabel,\r\n phoneLabel,\r\n phoneAriaLabel,\r\n buyItAgainLabel,\r\n buyItAgainAriaLabel,\r\n orderStatusReadyForPickup,\r\n orderStatusProcessing,\r\n orderStatusShipped,\r\n orderStatusPickedUp,\r\n orderStatusCanceled,\r\n orderStatusPartialShipped,\r\n pickedUpSalesLines,\r\n deliveredSalesLines,\r\n trackingLabel,\r\n trackingAriaLabel,\r\n trackingComingSoonLabel,\r\n discountStringText\r\n }\r\n}: IGetSalesLineInput): ISalesLine => {\r\n const salesStatusStringMap: ISalesStatusStringMap = {\r\n canceled: orderStatusCanceled,\r\n readyForPickup: orderStatusReadyForPickup,\r\n pickedUp: orderStatusPickedUp,\r\n processing: orderStatusProcessing,\r\n shipped: orderStatusShipped,\r\n partialShipped: orderStatusPartialShipped,\r\n unknown: undefined\r\n };\r\n\r\n const deliveryTypeStringMap: IDeliveryTypeStringMap = {\r\n pickUp: pickedUpSalesLines,\r\n ship: deliveredSalesLines,\r\n unknown: undefined\r\n };\r\n\r\n const gridSettings = context.request.gridSettings;\r\n const pickupDeliveryModeCode = context.request.channel && context.request.channel.PickupDeliveryModeCode;\r\n const productUrl = getProductUrlSync(product, context.actionContext, undefined);\r\n const deliveryType =\r\n !!pickupDeliveryModeCode && pickupDeliveryModeCode === salesLine.DeliveryMode\r\n ? 'pickUp'\r\n : !!salesLine.DeliveryMode\r\n ? 'ship'\r\n : 'unknown';\r\n const salesStatus = getSalesStatusCode(deliveryType, salesLine, salesLine.SalesStatusValue);\r\n const salesStatusString = salesStatusStringMap[salesStatus];\r\n // const salesStatusComp = salesStatusString && ;\r\n const deliveryTypeClass = getDeliveryTypeClassName(deliveryType, deliveryTypeStringMap);\r\n const deliveryTypeString = deliveryTypeStringMap[deliveryType];\r\n const deliveryTypeComp = deliveryTypeString && ;\r\n const salesStatusComp = salesStatusString && (\r\n \r\n );\r\n var name: void;\r\n const trackingInfo = isCurrentChannel && deliveryType === 'ship' && salesLine.SalesStatusValue !== 7 && (\r\n \r\n {trackingLabel}\r\n {shipment ? (\r\n \r\n {shipment.TrackingNumber}\r\n \r\n ) : (\r\n <>{trackingComingSoonLabel}\r\n )}\r\n \r\n );\r\n\r\n return {\r\n data: {\r\n salesLine,\r\n productUrl,\r\n deliveryType,\r\n salesStatus,\r\n product,\r\n shipment\r\n },\r\n salesLineProps: { className: `${moduleName}__sales-line` },\r\n salesLine: imageOnly ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \r\n ),\r\n address: salesLine.ShippingAddress && (\r\n \r\n ),\r\n deliveryType: deliveryTypeComp,\r\n salesStatus: salesStatusComp,\r\n trackingInfo,\r\n buyAgainButton: isCurrentChannel && (\r\n \r\n {buyItAgainLabel}\r\n \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 { IActionContext, IGridSettings, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { SalesLine, SalesOrder, Shipment, SimpleProduct, ProductCatalog } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSalesLine, ISalesLine, ISalesLineResources } from './get-sales-line';\r\nimport { IModuleComponentProps, IPriceContext } from './utilities';\r\n\r\nexport interface IGetSalesLinesInput {\r\n moduleName: string;\r\n moduleComponentProps: IModuleComponentProps;\r\n isCurrentChannel: boolean;\r\n\r\n salesLines: SalesLine[];\r\n products: SimpleProduct[];\r\n shipments?: Shipment[];\r\n priceContext: IPriceContext;\r\n resources: ISalesLineResources;\r\n actionContext: IActionContext;\r\n gridSettings: IGridSettings;\r\n imageSettings?: IImageSettings;\r\n imageOnly?: boolean;\r\n catalogs?: ProductCatalog[];\r\n priceCurrency?: string;\r\n}\r\n\r\nexport const getSalesLines = ({\r\n moduleName,\r\n moduleComponentProps,\r\n salesLines,\r\n products,\r\n shipments,\r\n resources,\r\n isCurrentChannel,\r\n imageOnly,\r\n catalogs,\r\n priceCurrency\r\n}: IGetSalesLinesInput): ISalesLine[] => {\r\n return salesLines.map((salesLine, index) => {\r\n const product = products.find(_product => _product.RecordId === salesLine.ProductId) || ({} as SimpleProduct);\r\n const shipment = shipments && shipments[0];\r\n let newSalesLine = salesLine;\r\n if (index !== 0) {\r\n newSalesLine = { ...salesLine, ShippingAddress: undefined };\r\n }\r\n return getSalesLine({\r\n moduleName,\r\n moduleComponentProps,\r\n product,\r\n shipment,\r\n salesLine: newSalesLine,\r\n isCurrentChannel,\r\n resources,\r\n imageOnly,\r\n catalogs,\r\n priceCurrency\r\n });\r\n });\r\n};\r\n\r\ninterface IProps extends IModuleComponentProps {\r\n resources: ISalesLineResources;\r\n}\r\n\r\nexport const getSalesLinesInput = (\r\n props: IProps,\r\n moduleName: string,\r\n order: SalesOrder,\r\n products: SimpleProduct[],\r\n priceContext: IPriceContext,\r\n catalogs?: ProductCatalog[]\r\n): IGetSalesLinesInput | undefined => {\r\n if (!order || !order.SalesLines || !order.SalesLines.length) {\r\n return;\r\n }\r\n const {\r\n resources,\r\n config: { imageSettings },\r\n context: {\r\n actionContext,\r\n request: {\r\n gridSettings,\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = props;\r\n\r\n const isCurrentChannel = !order.ChannelId || order.ChannelId === channelId;\r\n\r\n return {\r\n moduleName,\r\n moduleComponentProps: props,\r\n isCurrentChannel,\r\n salesLines: order.SalesLines,\r\n priceCurrency: order.CurrencyCode,\r\n products,\r\n shipments: order.Shipments,\r\n priceContext: priceContext,\r\n resources,\r\n actionContext: actionContext,\r\n gridSettings: gridSettings!,\r\n imageSettings: imageSettings,\r\n catalogs\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 * as React from 'react';\r\nimport { IGetHelpInput, IHelp } from '../common';\r\n\r\nexport const getOrderDetailsHelp = ({\r\n needHelpLabel,\r\n helpLineNumberLabel,\r\n contactNumber,\r\n helpLineContactAriaLabel\r\n}: IGetHelpInput): IHelp => ({\r\n helpProps: { className: 'ms-order-details__help' },\r\n needHelpLabel:

{needHelpLabel}

,\r\n helpLineNumberLabel: {helpLineNumberLabel},\r\n contactNumber: (\r\n \r\n {contactNumber}\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 { PriceComponent } from '@msdyn365-commerce/components';\r\n\r\nimport * as React from 'react';\r\nimport { IGetOrderSummaryInput, IOrderSummary, IPriceContext } from '../common/';\r\n\r\ninterface ISummaryLineProps {\r\n priceContext?: IPriceContext;\r\n name: string;\r\n label: string;\r\n value?: number;\r\n freePriceText?: string;\r\n priceCurrency?: string;\r\n}\r\n\r\nconst OrderSummaryLine: React.SFC = ({\r\n name,\r\n label,\r\n value = 0,\r\n priceContext,\r\n freePriceText = 'FREE',\r\n priceCurrency\r\n}) => (\r\n

\r\n {label}\r\n {priceContext ? (\r\n \r\n ) : (\r\n {value}\r\n )}\r\n

\r\n);\r\n\r\nexport const getOrderDetailsOrderSummary = ({\r\n order,\r\n priceContext,\r\n earnedPoints,\r\n resource: {\r\n orderSummaryHeading,\r\n orderSummaryItemsTotalLabel,\r\n orderSummaryShippingFeeLabel,\r\n orderSummaryTaxLabel,\r\n orderSummaryGrandTotalLabel,\r\n pointsEarnedLabel\r\n }\r\n}: IGetOrderSummaryInput): IOrderSummary => {\r\n const SubtotalAmount = order.GrossAmount! - (+order.ChargeAmount! + +order.TaxAmount!);\r\n const zeroAmount = `£${Number(0).toFixed(2)}`;\r\n\r\n return {\r\n orderSummaryProps: { className: 'ms-order-details__order-summary' },\r\n heading:

{orderSummaryHeading}

,\r\n subtotal: (\r\n \r\n ),\r\n shipping: (\r\n \r\n ),\r\n tax: (\r\n \r\n ),\r\n totalAmount: (\r\n \r\n ),\r\n earnedPoints: earnedPoints ? : undefined\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 { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { TenderLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport * as React from 'react';\r\nimport { IPaymentMethods, IPaymentMethodsInput } from '../common';\r\n\r\nconst getLastFourDigit = (digits = '') => digits.substr(-4);\r\n\r\nexport const getOrderDetailsPaymentMethods = ({\r\n priceContext,\r\n tenderLines,\r\n tenderIdOperationIdMap,\r\n priceCurrency,\r\n resource: { paymentMethodsTitle, creditCardEndingLabel, giftCardEndingLabel, amountCoveredLabel, loyaltyCardUsedLabel, cashUsedLabel }\r\n}: IPaymentMethodsInput): IPaymentMethods => {\r\n const getCard = (tenderLine: TenderLine) => (\r\n
\r\n

\r\n {`${tenderLine.CardTypeId} ${creditCardEndingLabel} ${getLastFourDigit(tenderLine.MaskedCardNumber)}`}\r\n

\r\n
\r\n );\r\n\r\n const getGiftCertificate = (tenderLine: TenderLine) => (\r\n
\r\n

\r\n {giftCardEndingLabel} {getLastFourDigit(tenderLine.GiftCardId)}\r\n

\r\n

\r\n {amountCoveredLabel}\r\n \r\n

\r\n
\r\n );\r\n\r\n const getLoyalty = (tenderLine: TenderLine) => (\r\n
\r\n

\r\n {loyaltyCardUsedLabel} {tenderLine.LoyaltyCardId}\r\n

\r\n

\r\n {amountCoveredLabel}\r\n \r\n

\r\n
\r\n );\r\n\r\n const getCash = (tenderLine: TenderLine) => (\r\n
\r\n

{cashUsedLabel}

\r\n

\r\n {amountCoveredLabel}\r\n \r\n

\r\n
\r\n );\r\n\r\n return {\r\n paymentMethodsProps: { className: 'ms-order-details__payment-methods' },\r\n title:
{paymentMethodsTitle}
,\r\n methods: tenderLines.reduce((lines: React.ReactNode[], tenderLine) => {\r\n if (!tenderLine.TenderTypeId) {\r\n return lines;\r\n }\r\n switch (tenderIdOperationIdMap[tenderLine.TenderTypeId]) {\r\n case 201:\r\n lines.push(getCard(tenderLine));\r\n break;\r\n case 214:\r\n lines.push(getGiftCertificate(tenderLine));\r\n break;\r\n case 207:\r\n lines.push(getLoyalty(tenderLine));\r\n break;\r\n case 200:\r\n lines.push(getCash(tenderLine));\r\n break;\r\n default:\r\n // do nothing\r\n }\r\n return lines;\r\n // tslint:disable-next-line:align\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 { Button, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { getUrlSync, isUserTypeB2B } from '@msdyn365-commerce/core';\r\nimport { SalesOrder, SimpleProduct, OrderOriginator, ProductCatalog } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport classname from 'classnames';\r\nimport get from 'lodash/get';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport { IGetOrderSummaryInput, IHelp, IOrderSummary, IPaymentMethods, IPaymentMethodsInput } from './common';\r\nimport { getGroups, IGroups } from './common/get-groups';\r\nimport { getOrderInfomationInput, getOrderInformation, IOrderInformation } from './common/get-order-information';\r\nimport { ISalesLine } from './common/get-sales-line';\r\nimport { getSalesLines, getSalesLinesInput } from './common/get-sales-lines';\r\nimport LabelComponent from './common/label';\r\nimport { getTenderIdOperationIdMap, IPriceContext } from './common/utilities';\r\nimport { IMandsOrderDetailsData } from './mands-order-details.data';\r\nimport { IMandsOrderDetailsProps } from './mands-order-details.props.autogenerated';\r\nimport { getOrderDetailsHelp } from './components/get-help';\r\nimport { getOrderDetailsOrderSummary } from './components/get-order-summary';\r\nimport { getOrderDetailsPaymentMethods } from './components/get-payment-methods';\r\n\r\nexport * from './common/get-groups';\r\nexport * from './common/get-order-information';\r\nexport * from './common/get-sales-line';\r\nexport * from './common/get-sales-lines';\r\nexport * from './common/utilities';\r\nexport * from './components/get-help';\r\nexport * from './components/get-order-summary';\r\nexport * from './components/get-payment-methods';\r\n\r\nexport interface IOrderDetailsViewProps extends IMandsOrderDetailsProps {\r\n moduleProps: IModuleProps;\r\n salesOrder?: SalesOrder;\r\n footerProps?: INodeProps;\r\n alert?: React.ReactNode;\r\n loading?: React.ReactNode;\r\n heading: React.ReactNode;\r\n placedBy?: React.ReactNode;\r\n backToShoppingLink?: React.ReactNode;\r\n orderInfomation?: IOrderInformation;\r\n salesLines?: ISalesLine[];\r\n groups?: IGroups;\r\n orderSummary?: IOrderSummary;\r\n payment?: IPaymentMethods;\r\n help?: IHelp;\r\n catalogs?: ProductCatalog[];\r\n}\r\n\r\n/**\r\n *\r\n * OrderDetails component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass OrderDetails extends React.PureComponent> {\r\n private moduleName: string = 'ms-order-details';\r\n @observable private _isSelectionModeEnabled: boolean;\r\n @computed get isCurrentChannel(): boolean {\r\n if (!this.order) {\r\n return false;\r\n }\r\n return this.order.ChannelId === get(this.props, 'context.request.apiSettings.channelId');\r\n }\r\n\r\n @computed get isDataReady(): boolean {\r\n return get(this.props, 'data.orderHydration.status') === 'SUCCESS';\r\n }\r\n\r\n @computed get hasError(): boolean {\r\n return get(this.props, 'data.orderHydration.status') === 'FAILED';\r\n }\r\n\r\n @computed get order(): SalesOrder | undefined {\r\n return get(this.props, 'data.orderHydration.result.salesOrder');\r\n }\r\n\r\n @computed get products(): SimpleProduct[] {\r\n return get(this.props, 'data.orderHydration.result.products') || [];\r\n }\r\n\r\n @computed get priceContext(): IPriceContext {\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n resources: { freePriceText }\r\n } = this.props;\r\n return {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n freePriceText\r\n };\r\n }\r\n\r\n @computed get earnedPoints(): number {\r\n const loyaltyCard = this.props.data.loyaltyCard.result;\r\n if (loyaltyCard && loyaltyCard.RewardPoints && this.order) {\r\n const pointPrograms = loyaltyCard.RewardPoints.map(point => point.RewardPointId);\r\n const rewardLines = this.order.LoyaltyRewardPointLines || [];\r\n let total = 0;\r\n rewardLines.forEach(line => {\r\n if ((line.RewardPointAmountQuantity || 0) > 0 && pointPrograms.indexOf(line.RewardPointId) > -1) {\r\n total += line.RewardPointAmountQuantity!;\r\n }\r\n });\r\n return total;\r\n }\r\n return 0;\r\n }\r\n\r\n @computed get orderSummaryProps(): IGetOrderSummaryInput | undefined {\r\n if (!this.order) {\r\n return;\r\n }\r\n\r\n const {\r\n resources: {\r\n orderSummaryHeading,\r\n orderSummaryItemsTotalLabel,\r\n orderSummaryShippingFeeLabel,\r\n orderSummaryTaxLabel,\r\n orderSummaryGrandTotalLabel,\r\n pointsEarnedLabel\r\n }\r\n } = this.props;\r\n return {\r\n order: this.order,\r\n earnedPoints: this.earnedPoints,\r\n priceContext: this.priceContext,\r\n resource: {\r\n orderSummaryHeading,\r\n orderSummaryItemsTotalLabel,\r\n orderSummaryShippingFeeLabel,\r\n orderSummaryTaxLabel,\r\n pointsEarnedLabel,\r\n orderSummaryGrandTotalLabel\r\n }\r\n };\r\n }\r\n\r\n @computed get paymentMethodsProps(): IPaymentMethodsInput | undefined {\r\n const tenderTypes = this.props.data.tenderTypes.result;\r\n if (!this.order || !this.order.TenderLines || !tenderTypes) {\r\n return;\r\n }\r\n\r\n const locale = get(this.props, 'context.request.locale') || 'en-US';\r\n\r\n const {\r\n resources: {\r\n paymentMethodsTitle,\r\n creditCardEndingLabel,\r\n giftCardEndingLabel,\r\n amountCoveredLabel,\r\n cashUsedLabel,\r\n loyaltyCardUsedLabel\r\n }\r\n } = this.props;\r\n\r\n return {\r\n priceContext: this.priceContext,\r\n tenderLines: this.order.TenderLines,\r\n tenderIdOperationIdMap: getTenderIdOperationIdMap(tenderTypes),\r\n locale,\r\n resource: {\r\n paymentMethodsTitle,\r\n creditCardEndingLabel,\r\n giftCardEndingLabel,\r\n amountCoveredLabel,\r\n cashUsedLabel,\r\n loyaltyCardUsedLabel\r\n },\r\n priceCurrency: this.order.CurrencyCode\r\n };\r\n }\r\n\r\n public constructor(props: IMandsOrderDetailsProps) {\r\n super(props);\r\n this._isSelectionModeEnabled = false;\r\n }\r\n public render(): JSX.Element {\r\n const {\r\n resources: {\r\n noSalesOrderText,\r\n genericErrorMessage,\r\n needHelpLabel,\r\n helpLineNumberLabel,\r\n loadingLabel,\r\n backToShopping,\r\n orderItemLabel,\r\n orderItemsLabel,\r\n helpLineContactAriaLabel\r\n },\r\n config: { heading, contactNumber, shouldShowQrCode, showChannelInfo }\r\n } = this.props;\r\n const customer = this.props.data.customerInformation && this.props.data.customerInformation.result;\r\n const originators = this.props.data.orderOriginators && this.props.data.orderOriginators.result;\r\n const originator: OrderOriginator | undefined = originators && originators.length === 1 ? originators[0] : undefined;\r\n const moduleProps = { moduleProps: this.props, className: classname('ms-order-details', this.props.config.className) };\r\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\r\n const channelIdentities = this.props.data.channels.result?.channelIdentities;\r\n const orgUnitLocations = this.props.data.orgUnitLocations.result?.orgUnitLocations;\r\n\r\n const orderInformationInput =\r\n this.order &&\r\n getOrderInfomationInput(\r\n this.props,\r\n this.moduleName,\r\n this.order,\r\n this.priceContext,\r\n channelIdentities,\r\n orgUnitLocations,\r\n customer,\r\n originator,\r\n showChannelInfo,\r\n false,\r\n shouldShowQrCode ?? true\r\n );\r\n const orderInformation =\r\n this._isSelectionModeEnabled || !orderInformationInput ? undefined : getOrderInformation(orderInformationInput);\r\n\r\n let viewProps: IOrderDetailsViewProps = {\r\n ...this.props,\r\n moduleProps,\r\n heading: heading && ,\r\n backToShoppingLink: backToShoppingUrl && (\r\n \r\n ),\r\n footerProps: { className: 'ms-order-details__footer' }\r\n };\r\n if (isUserTypeB2B(this.props.context.request) && orderInformationInput?.isOnlineStore && originator) {\r\n viewProps = {\r\n ...viewProps,\r\n placedBy: orderInformation?.placedBy\r\n };\r\n }\r\n\r\n if (this.hasError) {\r\n viewProps = {\r\n ...viewProps,\r\n alert: \r\n };\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n if (!this.isDataReady) {\r\n viewProps = {\r\n ...viewProps,\r\n loading: \r\n };\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n if (!this.order) {\r\n viewProps = {\r\n ...viewProps,\r\n alert: \r\n };\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n const salesLinesInput = getSalesLinesInput(this.props, this.moduleName, this.order, this.products, this.priceContext);\r\n const salesLines = salesLinesInput && getSalesLines(salesLinesInput);\r\n\r\n const orderInfomationInput = this.order && getOrderInfomationInput(this.props, this.moduleName, this.order, this.priceContext);\r\n const orderInfomation = orderInfomationInput && getOrderInformation(orderInfomationInput);\r\n\r\n viewProps = {\r\n ...viewProps,\r\n salesOrder: this.order,\r\n orderInfomation,\r\n salesLines,\r\n groups: salesLines\r\n ? getGroups({\r\n moduleName: this.moduleName,\r\n salesLines,\r\n resources: { orderItemLabel, orderItemsLabel }\r\n })\r\n : undefined,\r\n orderSummary: this.orderSummaryProps ? getOrderDetailsOrderSummary(this.orderSummaryProps) : undefined,\r\n payment: this.paymentMethodsProps ? getOrderDetailsPaymentMethods(this.paymentMethodsProps) : undefined,\r\n help: contactNumber\r\n ? getOrderDetailsHelp({ needHelpLabel, helpLineNumberLabel, contactNumber, helpLineContactAriaLabel })\r\n : undefined\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n}\r\n\r\nexport default OrderDetails;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Waiting } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * Payment waiting props.\n */\nexport interface IPaymentWaitingProps {\n message: string;\n className?: string;\n}\n\n/**\n * Payment waiting.\n * @param param0 - First in param.\n * @param param0.message - Message.\n * @param param0.className - ClassName.\n * @returns React node.\n */\nexport const WaitingComponent: React.FC = ({ message, className = 'ms-checkout-payment-instrument' }) => (\n
\n \n {message}\n
\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IOrderSummary {\n orderSummaryProps: INodeProps;\n heading?: React.ReactNode;\n lines?: IOrderSummaryLines;\n}\nexport const getOrderSummary = (input: ICheckoutProps): IOrderSummary => {\n const {\n config: { orderSummaryHeading },\n data: { checkout },\n resources: {\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n otherCharges,\n customerAccountLabel\n },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutState = get(checkout, 'result');\n const cart = get(checkout, 'result.checkoutCart.cart');\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\n const channelConfiguration = context.request.channel!;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = context.request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { orderSummaryHeading }\n } = input;\n if (orderSummaryHeading) {\n orderSummaryHeading.text = event.target.value;\n }\n };\n\n return {\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\n heading: orderSummaryHeading && orderSummaryHeading.text && (\n \n ),\n lines: showLineItems\n ? OrderSummary({\n checkoutState,\n cart,\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n context,\n typeName,\n id,\n channelConfiguration,\n telemetry,\n otherChargeLabel: otherCharges,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- existing property.\n isTaxIncludedInPrice: cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled,\n customerAccountLabel\n })\n : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { CartCheckout } from '../../../common/checkout';\n\nexport const OPERATIONS = {\n PayCard: 201,\n PayGiftCertificate: 214,\n PayLoyalty: 207,\n PayCustomerAccount: 202\n};\n\nexport default async (\n ctx: IActionContext,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n): Promise => {\n return CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\n};\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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { Iframe } from './iframe';\nimport defaultPaymentConnectorDropinStyle from './payment-instrument.dropin.style';\nimport defaultPaymentConnectorPaypalStyle from './payment-instrument.paypal.style';\nimport defaultPaymentConnectorStyle from './payment-instrument.style';\n\n/**\n * Interface for add payment form.\n */\nexport interface IAddPaymentFormProps {\n acceptPageUrl?: string;\n acceptPageContent?: string;\n iframeRef?: React.RefObject