{"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/modules/checkout-customer-account-payment/checkout-customer-account-payment.view.tsx?c009","webpack:///src/modules/checkout/methods/empty-active-cart.ts?524e","webpack:///src/modules/checkout-payment-instrument/checkout-payment-instrument.view.tsx?9afd","webpack:///src/modules/checkout/components/index.ts?5ba9","webpack:///src/modules/checkout-terms-and-conditions/components/checkout-terms-and-conditions.check-box.tsx?c1cc","webpack:///src/modules/checkout-terms-and-conditions/components/checkout-terms-and-conditions.error-message.tsx?791f","webpack:///src/modules/checkout-terms-and-conditions/components/checkout-terms-and-conditions.error-title.tsx?1f3c","webpack:///src/modules/checkout-terms-and-conditions/checkout-terms-and-conditions.tsx?0ddf","webpack:///src/modules/checkout/methods/checkout.ts?3b66","webpack:///src/modules/checkout-terms-and-conditions/checkout-terms-and-conditions.view.tsx?0931","webpack:///src/modules/footer-category/footer-category.tsx?b7b8","webpack:///src/modules/spacer/spacer.tsx?3b03","webpack:///src/modules/checkout-customer-account-payment/components/get-account-payment-form-edit-mode.tsx?4bab","webpack:///src/modules/checkout-customer-account-payment/components/get-account-payment-form-summary-mode.tsx?4664","webpack:///src/modules/checkout-customer-account-payment/checkout-customer-account-payment.tsx?ced5","webpack:///src/modules/checkout-pickup/checkout-pickup.view.tsx?9210","webpack:///src/modules/checkout-pickup/components/checkout-pickup-group.tsx?4b00","webpack:///src/modules/checkout-pickup/components/checkout-pickup-utility.ts?22a5","webpack:///src/modules/checkout-pickup/components/checkout-pickup-date-dropdown.tsx?4fb2","webpack:///src/modules/checkout-pickup/components/checkout-pickup-timeslot-dropdown.tsx?089a","webpack:///src/modules/checkout-pickup/checkout-pickup.tsx?b7a1","webpack:///../../src/index.ts?0e3e","webpack:///src/modules/default-page-summary/default-page-summary.tsx?b254","webpack:///src/modules/starter/starter.tsx?2704","webpack:///../../../src/module-state-manager/with-module-state.tsx?61ca","webpack:///src/modules/checkout-payment-instrument/actions/get-card-payment-accept-point.ts?e5ef","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/modules/checkout/index.ts?1106","webpack:///src/modules/checkout-guest-profile/checkout-guest-profile.view.tsx?c89a","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/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/checkout/components/alert.tsx?5f0c","webpack:///src/modules/checkout-section-container/checkout-section-container.view.tsx?61ae","webpack:///src/modules/checkout-gift-card/checkout-gift-card.view.tsx?3424","webpack:///src/modules/checkout-guest-profile/components/get-add-contact-info.tsx?1fcf","webpack:///src/modules/checkout-guest-profile/components/get-show-contact-info.tsx?77e1","webpack:///src/modules/checkout-guest-profile/checkout-guest-profile.tsx?f355","webpack:///src/modules/checkout-section-container/components/loading.tsx?c2e5","webpack:///src/modules/checkout-section-container/checkout-section-container.tsx?9b3a","webpack:///src/modules/checkout/components/place-order-button.tsx?c8b4","webpack:///../../../src/module-state-manager/index.ts?8e3a","webpack:///src/modules/checkout/components/get-order-summary.tsx?6f62","webpack:///src/modules/checkout/methods/index.ts?4c8b","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/checkout-payment-instrument/components/iframe.tsx?3db1","webpack:///src/modules/checkout-payment-instrument/components/add-payment-form.tsx?5fda","webpack:///src/modules/checkout-payment-instrument/components/error.tsx?1f63","webpack:///src/modules/checkout-payment-instrument/components/payment-information.tsx?3828","webpack:///src/modules/checkout-payment-instrument/components/waiting.tsx?1cbd","webpack:///src/modules/checkout-payment-instrument/components/with-visibility-observer.tsx?97b9","webpack:///src/modules/checkout-payment-instrument/payment-instrument-message.ts?bbca","webpack:///src/modules/checkout-payment-instrument/checkout-payment-instrument.tsx?0303","webpack:///src/modules/checkout-delivery-options/checkout-delivery-options.view.tsx?d64d","webpack:///src/modules/checkout/components/guided-card.tsx?5a55","webpack:///src/modules/checkout/components/guided-form.tsx?7fad","webpack:///../../src/checkout-state-data-action.ts?8344","webpack:///src/modules/checkout/actions/get-products-in-active-checkout-cart.ts?e0ab","webpack:///src/modules/checkout/methods/place-order.ts?6d11"],"names":["description","className","message","title","isChecked","value","ariaSetSize","ariaPosInSet","ariaLabel","telemetryContent","onChange","payLoad","DeliveryOptions","attributes","checked","type","name","props","super","selectedItemId","deliveryOptions","isLoading","retailMultiplePickUpOptionEnabled","init","async","this","moduleState","onEdit","onCancel","onSubmit","status","canShip","cartDeliveryMode","getSavedDeliveryOption","loadDeliveryOptions","data","checkout","result","checkoutCart","hasInvoiceLine","getCartLinesForShipping","length","isDeliveryModeExists","deliveryMode","find","deliveryOption","Code","getDeliveryOptionSelected","selectedItem","context","telemetry","error","id","typeName","priceFree","resources","price","DeliveryOption","Description","CustomerContextualPrice","freePriceText","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","tag","role","errorMessage","getDeliveryOptionList","count","map","index","code","radioButton","onDeliveryOptionChange","getSaveButton","saveBtnLabel","color","disabled","onClick","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","setHasError","onUpdating","clearError","undefined","updateCartDeliverySpecification","savedDeliveryOption","onReady","cartLinesForShipping","DeliveryMode","deliveryModeId","trim","checkoutState","updateCartDeliverySpecificationInput","shippingAddress","channelDeliveryOptionConfig","onPending","then","response","genericErrorMessage","setIsCancellable","catch","request","pickupDeliveryModeCode","channel","PickupDeliveryModeCode","emailDeliveryModeCode","EmailDeliveryModeCode","cart","CartLines","filter","cartLine","PickupDeliveryModeCodes","getDeliveryOptions","config","cartState","cartId","Id","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","deliveryOptionFilter","filterDeliveryModeOption","callerContext","actionContext","queryResultSettings","deliveryOptionsNotFound","event","currentTarget","telemetryPageName","friendlyName","isReady","isUpdating","hasError","isError","isShowList","isShowSelected","featureState","feature","Name","IsEnabled","viewProps","deliveryOptionsData","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","CheckoutDeliveryOptions","moduleProps","DeliveryOptionsList","list","deliveryOptionSelected","waiting","saveButton","editButton","cancelButton","renderView","getLineItems","input","_getDeliveryLocation","orgUnitLocations","FulfillmentStoreId","locationMatch","location","OrgUnitNumber","OrgUnitName","_getLineItemComponent","product","ProductId","productId","_product","RecordId","_getProduct","imageSettings","showShippingChargesForLineItems","quantityDisplayString","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","productDimensionTypeAmount","configString","inputQuantityAriaLabel","discountStringText","shippingCharges","gridSettings","sizeString","colorString","styleString","amountString","originalPriceText","currentPriceText","shippingChargesText","isQuantityEditable","productUrl","primaryImageUrl","PrimaryImageUrl","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","PickUpAtStore","label","_getEmailDeliveryComponents","emailDeliveryText","EmailDelivery","_getLineItemsComponents","items","isPickUp","_getCartPickDeliveryMode","isEmailDelivery","LineId","LineItem","item","pickUpAtStore","emailDelivery","cartLineItem","isNullOrWhitespace","_countItems","reduce","Quantity","_filterItemsByDiliveryType","_getCartShipDeliveryMode","_getLineItemsByDeliveryType","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","productDeliveryOptions","suffix","replace","toString","_getGroupTitleComponent","LineItemDeliveryGroup","LineItemList","heading","lineItems","handleLineItemHeadingChange","lineItemsHeading","text","target","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","getGroupByStorePickup","groupDelivery","getGroupByDelivery","cartLinesGroup","cartLinesGrp","Object","entries","forEach","groupByDeliveryType","push","keys","key","cartLines","_filterItemsByMultiplePickupMode","lineItemDeliveryGroup","fulFillmentStoreId","pickupDeliveryModeDesc","_getGroupTitleComponentWithMultiplePickUp","groupTitle","iconClass","lineItemWraperIcon","lineItemWraper","products","editCartText","EditCart","attribute","groupClass","LineItems","Header","editProps","requestContext","editLink","href","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","_getLineItems","SummaryForm","formProps","paymentAmount","addPaymentButton","appliedLine","bottomBorder","EditForm","inputLabel","inputAmount","customerName","customerAccountNumber","customerSince","accountCredit","alert","accountDetails","checkoutCustomerAccount","summaryView","editView","ctx","lineItemIdsToRemove","Error","activeCart","activeCartLine","checkoutCartLine","removeCartLines","cartLineIds","removeAllPromoCodes","removeCheckoutCartId","OverlayModal","modal","checkoutPaymentInstrument","paymentInformation","addPaymentForm","overlayModal","isTermsAccepted","handleTextChange","getTermsAndConditions","showCheckbox","isDisabled","isAutoSave","isTermsAndConditionAccepted","checkboxAriaLabel","termsAndConditionAcceptance","checkBox","updateTermsAndConditionsAcceptance","cancelBtnAriaLabel","saveBtnAriaLabel","editBtnAriaLabel","newIsTermsAndConditionAccepted","showControlButtons","isDataReady","defaultTermsAndConditionAcceptedValue","isShowContent","state","isShowButtons","checkoutTermsAndConditions","termsAndConditionsContent","OPERATIONS","PayCard","PayGiftCertificate","PayLoyalty","PayCustomerAccount","getCardTypeId","cardPrefix","TypeId","findTenderIdTypeByOperationId","tenderTypes","operationId","matchedTenderType","tenderType","OperationId","TenderTypeId","roundNumber","Number","toFixed","updatedCartVersion","channelConfiguration","giftCardExtends","tokenizedPaymentCard","guestCheckoutEmail","billingAddress","loyaltyAmount","Currency","cartTenderLines","amountDue","AmountDue","getTenderLinePromises","loyaltyCardNumber","LoyaltyCardId","chargedAmount","Math","min","loyaltyTenderLinePromise","Amount","getLoyaltyTenderLine","some","giftCardExtend","Balance","tenderTypeId","giftCardPin","Pin","giftCardExpirationYear","ExpirationDate","parseInt","split","giftCardExpirationMonth","creditCardTenderLinePromise","GiftCardId","GiftCardPin","GiftCardExpirationYear","GiftCardExpirationMonth","getGiftCardTenderLine","customerAccountAmount","customerAccountTenderLinePromise","user","isAuthenticated","CustomerId","createCustomerAccountTenderLine","cartTypeId","CardTypeId","cardTenderLine","TenderType","TokenizedPaymentCard","House","CardTokenInfo","Phone","Country","ThreeLetterISORegionName","Address1","Street","City","State","Zip","ZipCode","getCreditCardTenderLine","Promise","all","cartVersion","Version","salesOrder","bypassCache","TermsAndCondition","ErrorMessage","slots","content","viewprops","categories","FooterList","FooterListItem","spacerClass","spacerHeight","getAccountPaymentFormEditMode","options","onAddPayment","amount","onChangePaymentAmount","maxAmount","customer","customerCreatedDate","availableCredit","showCreditLimit","onToggleCreditSection","creditSectionIsExpanded","orderTotal","excessCredit","onRemovePayment","appliedAmount","addPaymentButtonLabel","inputAmountLabel","inputAmountAriaLabel","customerSinceLabel","accountCreditLabel","creditDetailsSectionLabel","orderTotalLabel","availableCreditLabel","creditExcessLabel","appliedCustomerAccountPaymentLabel","removeCustomerAccountPaymentLabel","onAddAccountPayment","e","preventDefault","onInput","parseFloat","max","AccountNumber","assertive","fade","includeAlertClass","isOpen","getAccountPaymentFormSummaryMode","inputAmountSummaryLabel","baseClassName","getAvailableCredit","creditBalances","CreditLimit","PendingBalance","addPayment","updateCustomerAccountAmount","newAmount","information","toggleCreditSection","setState","isCreditSectionExpanded","handleCancelOrSubmit","updateMaxAmount","onSkip","removePayment","maxPaymentAmount","customerInfo","platform","AllowOnAccountPayment","enableCustomerAccountPayment","IsB2b","giftCards","giftCardAmount","giftCard","TotalAmount","getLoyaltyAmount","getGiftCardAmount","customerInformation","MandatoryCreditLimit","invalidAmountMessage","cultureFormatter","formatCurrency","currencyCode","totalAmount","isCustomerAccountPaymentEnabled","locale","customerSinceDate","Date","CreatedDateTime","toLocaleDateString","formattedExcessCredit","checkoutPickup","headerError","pickupGroups","isHeaderError","pickupGroupViewProps","pickupGroupContainer","dateTimeslotContainer","groupDivider","groupHeader","groupErrorMessage","cartLineImages","pickupDateDropdown","pickupTimeslotDropdown","selectedDateTimeslot","pickupAddress","isShowDropdown","PickupTimeslotAvailabilityState","CheckoutPickupError","CheckoutPickupGroupHeader","moduleClassName","storeInfo","CheckoutPickupTimeslotInfo","CheckoutPickupAddress","address","County","CheckoutPickupCartLines","hasElements","prop","showQty","quantity","lineId","imageProps","DefaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","quality","getDate","date","Intl","DateTimeFormat","timeZone","format","getTimeslot","placeHolder","startDate","endDate","formatter","hour","minute","hour12","getUTCDateWithoutTime","UTC","getUTCFullYear","getUTCMonth","getUTCDate","defaultKey","updateDateSelection","notification","pickupStoreId","setDateHandler","selectedOption","getDateMap","has","get","mapDatesToOptions","dates","selectedDate","defaultOption","unshift","findIndex","getTime","dropdownOptions","defaultText","bind","Map","availableDates","set","labelClassname","labelText","dropdownId","controlledByParent","toggleColor","dropdownClassname","htmlFor","onSelectOption","updateTimeslotSelection","setTimeslotHandler","getTimeslotMap","mapTimeslotsToOptions","timeslots","selectedTimeslot","timeslotPlaceHolder","StartDateTime","EndDateTime","availableTimeslots","initModuleState","canPickup","isPickupTimeSlotSet","updateCartLinePickupDateTimeslot","headerErrorMessage","initPickupGroup","pickupCartLines","getCartLinesforPickup","getProductsByCartLines","ChannelId","locations","line","group","x","lineDeliverySpecification","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","PickUpStoreId","PickupTimeslotStartDateTime","PickupTimeslotEndDateTime","DeliveryAddress","ShippingAddress","lineDeliverySpecs","storeName","getStoreName","newGroup","pickupModeName","getPickupModeDescription","generalPickupText","availabilityState","None","dailyGroupingResults","searchCriteria","DeliveryModeCode","StoreId","SearchOptionValue","getPickupTimeslotAvailabilityState","NotAvailable","noAvailableDateError","AvailableCapacity","timeslotResults","StartDate","EndDate","filteredPickupGroups","Available","validateTimeslot","lineSpecs","concat","lineDeliverySpecifications","channelId","productInputs","isNullOrUndefined","apiSettings","validationResult","dateErrorMessage","timeslotErrorMessage","pickupDateRequired","pickupTimeslotRequired","pickupDateTimeslotRequired","NotDefined","orgUnitLocation","every","isPickupLine","isPickupMode","pickupDeliveryMode","pickupMode","resourceString","foundProductDeliveryOption","deliveryDesc","deliveryO","option","dailyResult","pickupDateLabel","pickupTimeslotLabel","pickupDateDefaultText","pickupTimeslotDefaultText","itemsText","singleItemText","pickupDateTimeslotText","pickupTimeslotPlaceHolder","pickupLocationLabel","defaultClassName","groupsViewProps","itemText","headerProps","cartlines","altText","src","fallBackSrc","ItemId","loadFailureBehavior","lineImageProps","dateString","timeslotString","timeslotInfoProps","selectedDateTimeslotNode","addressProps","dropdownClassName","labelClassName","dropdownSelectClassName","dateDropdownNode","timeslotDropdownNode","viewProp","pickupDate","oldGroup","lineSpec","noAvailableTimeslotError","groups","pickupTimeslot","pageSummary","keywords","sharingImageUrl","faviconUrl","canonicalUrl","sharingImage","pageTitle","_constructPageTitle","app","rel","disableOgTags","_renderOgTags","disableTwitterTags","_renderTwitterTags","property","moduleConfig","ignoreTitleSuffixPrefix","appConfig","pageTitlePrefix","pageTitleSuffix","WrappedComponent","initializeState","states","hasInitialized","isRequired","isCancellable","isSubmitContainer","childIds","getModuleStateManager","validate","isPending","isSkipped","isCancelAllowed","shouldSubmitContainer","hasModuleState","setIsRequired","update","setIsSubmitContainer","onDisable","getModule","moduleId","getModuleByTypeName","getModuleStateManagerByTypeName","moduleStates","values","_moduleState","modules","_validateLeaf","source","module","_validateContainer","allMatched","skipSkippableItem","method","childId","enableControl","render","ModuleState","GetCardPaymentAcceptPointInput","getCacheKey","paymenTenderType","getCacheObjectType","dataCacheType","showBillingAddress","createCheckoutPaymentInstrumentInput","inputData","getCardPaymentAcceptPointInput","showBillingAddres","getCardPaymentAcceptPointAction","exception","requestUrl","url","URL","origin","window","cardPaymentAcceptSettings","HostPageOrigin","AdaptorPath","CardPaymentEnabled","CardTokenizationEnabled","HideBillingAddress","PaymentAmount","cardPaymentAcceptPoint","AcceptPageUrl","AcceptPageContent","debug","getCardPaymentAcceptPointActionDataAction","action","getForm","inputRef","inputPinRef","inputExpRef","giftCardNumber","giftCardExp","onEnterGiftCardNumber","onEnterGiftCardPin","onEnterGiftCardExp","onApplyGiftCard","supportExternalGiftCard","additionalFields","disableAddGiftCard","applyGiftCardButton","giftCardFormLabel","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","onApply","inputPinLabel","inputExpLabel","alertFieldLabel","inputNumber","ref","RegExp","inputPin","placeholder","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","inputProps","inputNumProps","inputPinProps","inputExpProps","getItem","getFormattedPrice","canRemove","onRemoveGiftCard","enteredGiftCardLabel","giftCardAvailableBalanceLabel","removeGiftCardButton","balance","CardCurrencyCode","giftCardLast4Digit","substr","selectedGiftCard","removeButton","itemProps","getList","listProps","isFetchingGiftCard","isEnabled","isPaymentVerificationRedirection","couldPaidByGiftCard","giftCardSupported","hasSelectedItem","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","removeGiftCard","applyGiftCard","giftCardTypes","getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","PaymentMethodId","getGiftCard","addGiftCard","additionalProperties","resolve","current","focus","findGiftcardTenderTypes","giftcardType","matchedTenderTypes","ConnectorId","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","supportedGiftCardType","internalGiftcardTenderTypes","externalGiftcardTenderTypes","includes","month","year","activeGiftCard","emptyInputError","duplicatedCodeError","invalidCodeError","card","getGiftCardTotalAmount","requestFormData","query","pv","showAdditionalFields","shouldPayGiftCard","checkoutGiftCardProps","showGiftCard","form","_giftCards","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_isTermsAndConditionAccepted","_customerAccountAmount","_tokenizedPaymentCard","_tenderLine","_billingAddress","_shippingAddress","_cardPrefix","_loyaltyCardNumber","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","updateShippingAddress","newShippingAddress","updateBillingAddress","newBillingAddress","updateCardPrefix","newCardPrefix","removeGiftCardExtend","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","updateGuestCheckoutEmail","newGuestCheckoutEmail","ShowContactInfo","showInfoProps","email","AddContactInfo","addFormProps","submitButton","inputGroupProps","showContactInfo","addContactInfo","AddCheckoutLoyalty","cardNumber","drawer","rewardPoints","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","loyaltyAmountInput","loyaltyAmountApplyButton","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","rewardPoint","checkoutLoyaltyRewardPoint","availablePointsText","activePoints","expiringPointsText","expiringPoints","ShowCheckoutLoyalty","coveredAmountText","checkoutLoyalty","showLoyalty","addLoyalty","isShowLoyalty","isShowAddLoyalty","PickUpAtStoreComponent","EmailDeliveryComponent","LineItemComponent","LineItemGroupComponent","lineItem","LineItemGroupComponentWithMultiplePickUp","LineItemComponentWithMultiplePickUp","PickUpAtStoreComponentWithMultiplePickUp","LineItemsComponent","OrderSummaryComponent","lines","subtotal","shipping","otherCharge","tax","totalDiscounts","loyalty","PaymentSummaryComponent","invoices","canShow","checkoutProps","hasSalesOrder","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","orderConfirmation","loading","guidedForm","orderSummary","invoicePaymentSummary","placeOrderButton","termsAndConditions","keepShoppingButton","getInvoicePaymentSummary","totalAmountLabel","invoiceLabel","invoiceSummaryTitle","isValidationPassed","handleCheckoutHeadingChange","checkoutHeading","cartStatus","isEmptyCart","getSlotItems","onPlaceOrder","checkoutOutOfStockErrorMessage","invalidCartVersionErrorMessage","enableStockCheck","isOverMaxQuantity","hasOrderConfirmation","updateCartLineEmailAddress","emailDeliveryCartLines","ElectronicDeliveryEmailAddress","updatedCart","productInventoryInformation","cartline","foundProductAvailability","productInventory","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","getActiveChildModuleStates","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","assign","validateForCheckout","retry","isOrderQuantityLimitsFeatureEnabledInHq","defaultOrderQuantityLimitsFeatureConfig","enableDefaultOrderQuantityLimits","isOrderQuantityLimitsFeatureEnabledInSiteSettings","ValidationFailuresByCartLines","warning","refreshCart","refreshError","isEditorialMode","params","isEditor","isCartReady","disableGuidedCheckoutFlow","backToShopping","placeOrderText","confirmPaymentText","cookieConsentRequiredMessage","checkoutClass","checkoutInformation","isConsentGiven","cookies","isMobile","device","Type","backToShoppingUrl","BackToShopping","backToShoppingAttributes","checkoutBtnText","renderMsdyn365Text","resource","placeOrder","canPlaceOrder","balanceCheckButton","_isEnabled","_getFormattedPrice","_enterGiftCardNumber","_clearError","_enterGiftCardPin","_enterGiftCardExp","_setError","_applyGiftCard","_getGiftCardTypes","_getGiftCard","_findGiftcardTenderTypes","giftCardBalanceCheckProps","getModuleStates","cacheKey","ModuleStatesCacheKey","updateModuleStates","ItemComponent","checkoutPlainContainerProps","From","SelectedGiftCard","GiftCardList","AddResource","ShowResource","canSubmit","canCancel","emailLabel","emailErrortext","canEdit","emailAddress","emailOnCart","ReceiptEmail","updateGuestProfile","isEmailValid","rowEmail","test","getItems","primary","width","container","hidden","initialized","skipped","ready","updating","pending","buttonsStates","isBusy","setIsBusy","payload","Purchase","buttonSetState","getOrderSummary","orderSummaryHeading","subTotalLabel","shippingLabel","taxLabel","loyaltyLabel","giftcardLabel","totalDiscountsLabel","freeText","toBeCalculatedText","otherCharges","showLineItems","orderSummaryProps","otherChargeLabel","Form","Item","step","ariaValueMax","ariaValueMin","ariaValueNow","onBlur","_defaultLoyaltyPoints","loyaltyCard","CardNumber","updateLoyaltyCardId","shouldPayLoyalty","_dialogToggleRef","_applyLoyaltyPoints","_removeLoyaltyPoints","_onInputChange","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","headingTag","loyaltyHeadingText","loyaltyCoveredAmountText","toggleButtonText","_drawerHeader","openGlyph","closeGlyph","glyphPlacement","RewardPoints","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","payWithLoyaltyAmountLabel","applyCheckoutLoyaltyPaymentText","isNaN","removeCheckoutLoyaltyPaymentText","innerRef","point","RewardPointId","ActivePoints","PointsExpiringSoon","num","element","document","getElementById","channelConfig","loyalPointsRequest","_query","newMaxPoints","POST_MESSAGE_NAME","getHostName","toLowerCase","postMessage","iframeRef","contentWindow","targetOrigin","onEvent","sourceUrl","onIFrameMessage","requestUrlOrigin","messageOrigin","sourceHost","eventHost","requestHost","messageHost","updateContentDocument","displayContent","css","innerDocument","contentDocument","open","write","style","createElement","cssNote","createTextNode","appendChild","head","close","addEventListener","prevProps","removeEventListener","iframeAriaLabel","height","sandbox","AddPaymentForm","acceptPageUrl","acceptPageContent","iFrameHeightOverride","isFetchingPaymentConnector","paymentStyleOverride","cancelButtonText","submitButtonText","PaymentInformation","changePaymentButtonText","cardTitle","cardNumberLabel","expiresDateLabel","addressTitle","tenderLine","NameOnCard","ExpirationMonth","ExpirationYear","MaskedCardNumber","cardLastNDigit","isValidCardNumber","StreetNumber","PaymentConnectorPostMessageType","isVisible","observer","selfRef","initMutationObserver","targetNode","getElementsByTagName","MutationObserver","_observer","handleVisibilityChange","observe","childList","subtree","stopMutationObserver","disconnect","offsetWidth","offsetHeight","visibilityObserver","paymentConnectorMessage","messageType","JSON","stringify","parse","setTerminalError","shouldCheckConnectorId","paymentConnectorId","PaymentConnectorId","Height","paymentConnectorHeight","Result","handlePaymentResult","CardPrefix","handlePaymentCardPrefix","handlePaymentError","Redirect","handlePaymentRedirect","Showoverlay","showOverlayModal","Hideoverlay","resultAccessCode","isRedirectedFromPaymentGateway","settings","ReturnUrl","getReturnUrl","TenderLine","AdditionalContext","cardPaymentAcceptResult","saveBillingAddress","handleAdditionalContext","cardTypeId","updatePaymentTenderType","newPaymentTenderType","terminalError","updatePaymentAcceptPageData","finally","isPaymentProcessing","redirectData","isPaymentVerificationRequried","paymentVerificationPostData","isShow","isOverlayModal","redirectToPaymentVerification","saveDataInStorage","redirectInfo","propertyName","body","submit","defaultSubmitErrorMessage","setErrorMessage","_value","Message","join","returnUrl","isAbsoluteUrl","shouldPaidByCard","paymentTenderType","formData","btoa","asyncResultStatus","cardTypeErrorMessage","paymentAcceptPoint","postMessageToIframe","additionalContext","ExtraContext","paymentConnectorExtraContextMessage","Address2","togglePayment","isPrimaryPayment","Submit","checkoutResult","isPaidByOtherPaymentSource","getCustomerAccountAmount","MessageOrigin","paymentTenderTypeClassName","loadingMessage","DeliveryOptionList","DeliveryOptionSelected","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","hasControlGroup","saveAndContinueBtnLabel","contentAction","etext","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","focusOnFirstFocusableElement","node","findDOMNode","child","querySelector","focusOnEditButton","scrollToTitle","formCard","scrollIntoView","getTitle","Tag","isActive","onNext","isExpanded","children","changeBtnLabel","CheckoutChange","changeBtnAttributes","active","expanded","closed","visted","CheckoutGuidedForm","currentStep","getEnabledModules","getStep","indexOf","getId","getHeading","CheckoutStateInput","ActiveCheckoutCartProductsInput","createInput","getActiveCheckoutCartProductsAction","Boolean","getActiveCheckoutCartProductsActionDataAction","orderedProducts","redirect","reject","orderConfirmationUrl","separator","updateSalesOrder","newSalesOrder","newOrderedProducts"],"mappings":"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","file":"static/js/0.f7777d44e9eff2a2.chunk.js","sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = ({\n description\n}) => {\n if (!description) {\n return null;\n }\n\n return (\n {description}\n );\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = ({\n message\n}) => {\n if (!message) {\n return null;\n }\n\n return (\n

\n {message}\n

\n );\n\n};\n\nexport default CheckoutDeliveryOptionsErrorMessage;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = ({\n title\n}) => {\n if (!title) {\n return null;\n }\n\n return (\n

\n {title}\n

\n );\n\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelDeliveryOptionConfiguration, FilterDeliveryModeOption } from '@msdyn365-commerce/retail-proxy';\nimport {\n getDeliveryOptionsAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address, CartLine, DeliveryOption\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { action, observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutDeliveryOptionsData } from './checkout-delivery-options.data';\nimport { filterDeliveryModeOption, ICheckoutDeliveryOptionsProps } from './checkout-delivery-options.props.autogenerated';\nimport DescriptionComponent from './components/checkout-delivery-options.description';\nimport ErrorMessageComponent from './components/checkout-delivery-options.error-message';\nimport ErrorTitleComponent from './components/checkout-delivery-options.error-title';\nimport RadioButtonComponent from './components/checkout-delivery-options.radio-button';\n\nexport interface ICheckoutDeliveryOptionsModuleProps extends ICheckoutDeliveryOptionsProps, 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 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 private cartDeliveryMode?: string;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n constructor(props: ICheckoutDeliveryOptionsModuleProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n }\n\n public async componentDidMount(): Promise {\n this.props.data.checkout.then(async () => {\n await this.init();\n });\n\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n }\n );\n }\n\n public render(): JSX.Element | null {\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;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result\n ?.find(feature => feature.Name === multiplePickupStoreSwitchName)?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n onDeliveryOptionChange: this.onDeliveryOptionChange,\n selectedItemId: this.selectedItemId,\n deliveryOptionsData: this.deliveryOptions,\n isLoading: this.isLoading,\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: { className: 'ms-checkout-delivery-options__list' },\n list: this.getDeliveryOptionList()\n },\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\n errorMessage: this.getErrorMessage(),\n waiting: ,\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSave,\n onEdit: this.onEdit,\n onCancel: this.onCancel\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n status: this.canShip() ? 'updating' : 'disabled'\n });\n\n this.cartDeliveryMode = this.getSavedDeliveryOption();\n\n await this.loadDeliveryOptions();\n };\n\n private readonly canShip = (): boolean => {\n const hasInvoice = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n return !hasInvoice && this.getCartLinesForShipping().length > 0;\n };\n\n private readonly isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\n if (deliveryMode) {\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\n return true;\n }\n }\n return false;\n };\n\n private readonly getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\n if (!selectedItem) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const { id, typeName, context } = this.props;\n const { priceFree } = this.props.resources;\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\n\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option-selected' },\n description: ,\n price: \n };\n };\n\n private readonly getErrorMessage = (): ICheckoutDeliveryOptionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n // @ts-expect-error\n CheckoutDeliveryOptionsError: { tag: 'span', className: 'ms-address-form__error', role: 'alert', 'aria-live': 'assertive' },\n title: ,\n message: \n };\n };\n\n private readonly getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\n const count = this.deliveryOptions.length;\n const { priceFree } = this.props.resources;\n const { id, typeName, context } = this.props;\n\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option' },\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 {editBtnLabel}\n \n );\n };\n\n private readonly getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\n return (\n \n {cancelBtnLabel}\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 = (): void => {\n this.onSubmit();\n };\n\n private readonly onEdit = (): void => {\n this.onUpdating();\n };\n\n private readonly onSubmit = (): void => {\n this.updateCartDeliverySpecification(this.selectedItemId);\n };\n\n private readonly onCancel = (): void => {\n // Reset to the saved value\n const savedDeliveryOption = this.getSavedDeliveryOption();\n if (savedDeliveryOption) {\n this.selectedItemId = savedDeliveryOption;\n this.onReady();\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.updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\n .then((response) => {\n if (response.status === 'FAILED') {\n this.setError(resources.genericErrorMessage);\n } else {\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n }\n })\n .catch(\n () => {\n this.setError(resources.genericErrorMessage);\n }\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 ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(\n cartLine => ((cartLine.DeliveryMode && cartLine.DeliveryMode !== '') ? (cartLine.DeliveryMode !== this.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLine.DeliveryMode) && cartLine.DeliveryMode !== emailDeliveryModeCode) : cartLine)\n ) : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(\n cartLine => ((cartLine.DeliveryMode && cartLine.DeliveryMode !== '') ? (cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode) : 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\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = (shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode);\n if (hasShippingDeliveryLines) {\n\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({ cart });\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({ callerContext: context.actionContext, queryResultSettings: {} }, cartId, shippingAddress, [], deliveryOptionFilter, true);\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 } else {\n this.onUpdating();\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly loadDeliveryOptions = async (): Promise => {\n const shippingAddress = this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress;\n\n if (this.canShip() && shippingAddress) {\n await this.getDeliveryOptions(shippingAddress);\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 this.props.moduleState.onReady();\n };\n\n private readonly onUpdating = () => {\n this.props.moduleState.onUpdating();\n };\n\n private readonly onPending = () => {\n this.props.moduleState.onPending();\n };\n}\n\nexport default CheckoutDeliveryOptions;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 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 { Button, getPayloadObject, getTelemetryAttributes, INodeProps, ITelemetryContent, TelemetryConstant } 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)?.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\n if (!product) {\n return;\n }\n\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: \n {pickUpAtStoreWithLocationText}\n ,\n location:
\n {pickupDeliveryLocation}\n
\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: \n {emailDeliveryText}\n \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 = (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)) ? (retailMultiplePickUpOptionEnabled ? cartLineItem.DeliveryMode === channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLineItem.DeliveryMode) : (cartLineItem.DeliveryMode === pickupDeliveryModeCode)) : false;\n };\n\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\n return (!StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)) ? (retailMultiplePickUpOptionEnabled ? cartLineItem.DeliveryMode !== channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLineItem.DeliveryMode) : (cartLineItem.DeliveryMode !== pickupDeliveryModeCode)) : false;\n };\n\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\n const {\n resources: {\n itemLabel,\n itemsLabel,\n inStorePickUpLabel,\n shippingCountCheckoutLineItem\n }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc ? emailDeliveryModeDesc : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)?.Description!;\n });\n\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title = type === 'ship' ? shippingCountCheckoutLineItem : (type === 'pickup' ? inStorePickUpLabel : `${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\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((\n cartLine: CartLine) => ((cartLine.DeliveryMode && cartLine.DeliveryMode !== '') ? (_getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode) : cartLine)\n );\n } else if (type === 'pickup') {\n return cart.CartLines.filter((cartLine: CartLine) => ((cartLine.DeliveryMode && cartLine.DeliveryMode !== '') ? (_getCartPickDeliveryMode(cartLine)) : null)\n );\n }\n return cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === emailDeliveryModeCode);\n\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:
\n {title}\n
,\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 ? _getLineItemsByDeliveryTypeWithMulitplePickupMode() : undefined\n };\n };\n\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { lineItemsHeading }\n } = input;\n lineItemsHeading!.text = event.target.value;\n };\n\n const _getGroupTitleComponentWithMultiplePickUp = (count: number, type: deliveryType, deliveryMode?: string, fulFillmentStoreId?: string): string => {\n const {\n resources: {\n itemLabel,\n itemsLabel\n }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n let pickupDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc ? emailDeliveryModeDesc : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)?.Description!;\n });\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n pickupDeliveryModeDesc = pickupDeliveryModeDesc ? pickupDeliveryModeDesc : 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 = type === 'ship' ? `(${count} ${suffix})` : (type === 'pickup' ? `${pickupTitle} (${count} ${suffix})` : `${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: {\n multiplePickUpLabel,\n shippingLable\n }\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 = cartLine.FulfillmentStoreId && cartLine.DeliveryMode ? 'pickup' : (cartLine.FulfillmentStoreId === '' && cartLine.DeliveryMode === emailDeliveryModeCode ? 'email' : '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:
\n {groupTitle}\n
,\n heading:
\n {title}\n
,\n lineItems: _getLineItemsComponents(item)\n });\n });\n\n return lineItemDeliveryGroup;\n };\n\n return _getLineItems();\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutCustomerAccountPaymentViewProps } from './checkout-customer-account-payment';\nimport { IAccountPaymentEditViewForm } from './components/get-account-payment-form-edit-mode';\nimport { IAccountPaymentSummaryViewForm } from './components/get-account-payment-form-summary-mode';\n\nexport const SummaryForm: React.FC = ({ formProps, label, paymentAmount, addPaymentButton, appliedLine, bottomBorder }) => (\n \n <>\n {label}\n {paymentAmount}\n {addPaymentButton}\n {appliedLine}\n {bottomBorder}\n \n \n);\n\nexport const EditForm: React.FC = ({ formProps, inputLabel, inputAmount, addPaymentButton, customerName, customerAccountNumber, customerSince, accountCredit, alert, accountDetails, appliedLine, bottomBorder }) => (\n \n <>\n\n {customerName}\n {customerAccountNumber}\n {customerSince}\n {accountCredit}\n {accountDetails}\n {inputLabel}\n {alert}\n {inputAmount}\n {addPaymentButton}\n {appliedLine}\n {bottomBorder}\n \n \n);\n\nconst CheckoutCustomerAccountView: React.FC = props => {\n const { checkoutCustomerAccount, summaryView, editView, moduleState } = props;\n return (\n \n {moduleState.isReady && summaryView && }\n {!moduleState.isReady && editView && }\n \n );\n};\n\nexport default CheckoutCustomerAccountView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { getCartState, getCheckoutState } from '@msdyn365-commerce/global-state';\n\nasync function emptyActiveCart(ctx: IActionContext): Promise {\n let cartState;\n let checkoutState;\n const lineItemIdsToRemove = [];\n\n try {\n cartState = await getCartState(ctx);\n checkoutState = await getCheckoutState(ctx);\n } catch (error) {\n throw error;\n }\n\n if (!cartState || !cartState.cart) {\n throw new Error('Fail to fetch active cart');\n }\n\n if (!checkoutState || !checkoutState.checkoutCart) {\n throw new Error('Fail to fetch checkoutCart cart');\n }\n\n const activeCart = cartState.cart;\n const checkoutCart = checkoutState.checkoutCart.cart;\n\n for (const activeCartLine of activeCart.CartLines || []) {\n for (const checkoutCartLine of checkoutCart.CartLines || []) {\n if (activeCartLine.LineId && activeCartLine.LineId === checkoutCartLine.LineId) {\n lineItemIdsToRemove.push(activeCartLine.LineId);\n }\n }\n }\n\n try {\n await cartState.removeCartLines({ cartLineIds: lineItemIdsToRemove });\n await cartState.removeAllPromoCodes({});\n await checkoutState.removeCheckoutCartId({});\n } catch (error) {\n throw error;\n }\n}\n\nexport default emptyActiveCart;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutPaymentInstrumentViewProps, ICheckoutPaymentOverlayModal } from './checkout-payment-instrument';\n\nconst OverlayModal: React.FC = ({\n modal\n}) => {\n return (\n \n );\n};\n\nconst CheckoutPaymentInstrumentView: React.FC = ({\n checkoutPaymentInstrument,\n className,\n id,\n waiting,\n alert,\n paymentInformation,\n addPaymentForm,\n overlayModal,\n ...restProps\n}) => (\n \n {waiting}\n {alert}\n {paymentInformation}\n {addPaymentForm}\n {overlayModal && }\n \n);\n\nexport default CheckoutPaymentInstrumentView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutTermsAndConditionsCheckboxProps {\n isChecked: boolean;\n ariaLabel?: string;\n disabled: boolean;\n id?: 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.ariaLabel\n * @param root0.disabled\n * @param root0.telemetryContent\n * @param root0.onChange\n * @param root0.id\n * @extends {React.FC}\n */\nconst CheckoutTermsAndConditionsCheckbox: React.FC = ({\n isChecked,\n ariaLabel,\n disabled,\n telemetryContent,\n onChange,\n id\n}) => {\n\n const payLoad = getPayloadObject('click', telemetryContent!, '');\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n \n \n );\n};\n\nexport default CheckoutTermsAndConditionsCheckbox;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nexport interface ICheckoutTermsAndConditionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutTermsAndConditionsErrorMessage: React.FC = ({\n message\n}) => {\n if (!message) {\n return null;\n }\n\n return (\n

\n {message}\n

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

\n {title}\n

\n );\n\n};\n\nexport default CheckoutTermsAndConditionsErrorTitle;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { action, computed, observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutTermsAndConditionsData } from './checkout-terms-and-conditions.data';\nimport {\n ICheckoutTermsAndConditionsProps\n} from './checkout-terms-and-conditions.props.autogenerated';\nimport CheckboxComponent from './components/checkout-terms-and-conditions.check-box';\nimport ErrorMessageComponent from './components/checkout-terms-and-conditions.error-message';\nimport ErrorTitleComponent from './components/checkout-terms-and-conditions.error-title';\n\nexport interface ICheckoutTermsAndConditionsModuleProps extends ICheckoutTermsAndConditionsProps, IModuleStateProps { }\n\nexport interface ICheckoutTermsAndConditions {\n termsAndConditionAcceptance: INodeProps;\n checkBox: React.ReactNode;\n description: React.ReactNode;\n}\n\nexport interface ICheckoutTermsAndConditionsError {\n error: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ICheckoutTermsAndConditionsViewState {\n isError: boolean;\n isShowSaveButton: boolean;\n isShowEditButton: boolean;\n isShowCancelButton: boolean;\n}\n\nexport interface ICheckoutTermsAndConditionsViewProps extends ICheckoutTermsAndConditionsProps<{}> {\n checkoutTermsAndConditions: IModuleProps;\n isTermsAccepted: boolean;\n errorMessageData: string;\n viewState: ICheckoutTermsAndConditionsViewState;\n termsAndConditionsContent: ICheckoutTermsAndConditions;\n errorMessage?: ICheckoutTermsAndConditionsError;\n saveButton?: React.ReactNode;\n editButton?: React.ReactNode;\n cancelButton?: React.ReactNode;\n onChange(event: React.ChangeEvent): void;\n onSave(): void;\n onEdit(): void;\n onCancel(): void;\n}\n\n/**\n *\n * CheckoutTermsAndConditions component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutTermsAndConditions extends React.Component {\n private readonly telemetryContent: ITelemetryContent;\n\n @observable private isTermsAccepted: boolean = true;\n\n @observable private errorMessage?: string;\n\n constructor(props: ICheckoutTermsAndConditionsModuleProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n }\n\n @computed get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get isShowButtons(): boolean {\n const { showControlButtons } = this.props.config;\n return !this.props.moduleState.hasExternalSubmitGroup && (showControlButtons || false);\n }\n\n @computed get isAutoSave(): boolean {\n const { showControlButtons } = this.props.config;\n return !this.props.moduleState.hasExternalSubmitGroup && !showControlButtons;\n }\n\n @computed get defaultTermsAndConditionAcceptedValue(): boolean {\n const { showCheckbox } = this.props.config;\n return !showCheckbox;\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 && this.props.data.checkout.result.isTermsAndConditionAccepted,\n async () => {\n this.isTermsAccepted = this.props.data.checkout.result?.isTermsAndConditionAccepted || this.defaultTermsAndConditionAcceptedValue;\n }\n );\n }\n\n public render(): JSX.Element | null {\n const {\n moduleState: { isReady, hasError },\n config: { className }\n } = this.props;\n const isTermsAndConditionAccepted = this.props.data.checkout.result?.isTermsAndConditionAccepted;\n const isError = hasError;\n const isShowContent = !isReady;\n const isShowSelected = !hasError && isReady;\n\n const viewProps = {\n ...this.props,\n ...this.state,\n isTermsAccepted: this.isTermsAccepted,\n errorMessageData: this.errorMessage,\n viewState: {\n isError,\n isShowSaveButton: isShowContent && this.isShowButtons,\n isShowEditButton: isShowSelected && this.isShowButtons,\n isShowCancelButton: isShowContent && this.isShowButtons && isTermsAndConditionAccepted\n },\n checkoutTermsAndConditions: {\n moduleProps: this.props,\n className: classname('ms-checkout-terms-and-conditions', className)\n },\n termsAndConditionsContent: this.getTermsAndConditions(),\n errorMessage: this.getErrorMessage(),\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSubmit,\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onChange: this.onChange\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleTextChange = (event: MsDyn365.ContentEditableEvent) => this.props.config.description = event.target.value;\n\n private readonly getTermsAndConditions = (): ICheckoutTermsAndConditions => {\n const {\n moduleState: { isReady },\n config: { showCheckbox, description }\n } = this.props;\n const isDisabled = isReady && !this.isAutoSave;\n const isTermsAndConditionAccepted = this.isTermsAccepted;\n const { checkboxAriaLabel } = this.props.resources;\n return {\n termsAndConditionAcceptance: { className: 'ms-checkout-terms-and-conditions__container' },\n checkBox: showCheckbox && ,\n description: \n };\n };\n\n @action\n private readonly init = async (): Promise => {\n const {\n data,\n config: { showCheckbox }\n } = this.props;\n\n const hasInvoiceLine = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n\n // If hasInvoiceLine is true, this is for b2b and isTermsAccepted should be true\n if (hasInvoiceLine || data.checkout.result?.isTermsAndConditionAccepted || !showCheckbox) {\n await this.updateTermsAndConditionsAcceptance(true);\n this.isTermsAccepted = true;\n } else if (showCheckbox) {\n await this.updateTermsAndConditionsAcceptance(false);\n this.isTermsAccepted = false;\n }\n\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n status: hasInvoiceLine ? 'disabled' : (this.isTermsAccepted ? 'ready' : 'updating')\n });\n };\n\n private readonly getErrorMessage = (): ICheckoutTermsAndConditionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n error: { tag: 'div', className: 'ms-checkout-terms-and-conditions__error', role: 'alert', 'aria-live': 'assertive' },\n title: ,\n message: \n };\n };\n\n private readonly getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel', cancelBtnAriaLabel } = this.props.resources;\n return (\n \n {cancelBtnLabel}\n \n );\n };\n\n private readonly getSaveButton = (): React.ReactNode => {\n const { saveBtnLabel = 'Save', saveBtnAriaLabel } = this.props.resources;\n return (\n \n {saveBtnLabel}\n \n );\n };\n\n private readonly getEditButton = (): React.ReactNode => {\n const { editBtnLabel = 'Change', editBtnAriaLabel } = this.props.resources;\n return (\n \n {editBtnLabel}\n \n );\n };\n\n private readonly onEdit = (): void => {\n this.onUpdating();\n };\n\n private readonly onSubmit = async (): Promise => {\n if (!this.isTermsAccepted) {\n if (this.isAutoSave) {\n await this.updateTermsAndConditionsAcceptance(this.isTermsAccepted);\n } else {\n this.setError(this.props.resources.errorMessage);\n this.props.moduleState.setHasError(true);\n }\n } else {\n this.clearError();\n await this.updateTermsAndConditionsAcceptance(this.isTermsAccepted);\n this.props.moduleState.onReady();\n }\n };\n\n private readonly onUpdating = () => {\n this.props.moduleState.onUpdating();\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 onCancel = (): void => {\n // Reset to the saved value\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const isTermsAccepted = this.props.data.checkout.result.isTermsAndConditionAccepted;\n if (!isTermsAccepted) {\n // It has no saved email, set to status updating and request user to fill the email form\n this.props.moduleState.onUpdating();\n\n } else {\n // It has saved email, set to status ready\n this.isTermsAccepted = true;\n this.props.moduleState.setHasError(false);\n this.props.moduleState.onReady();\n }\n };\n\n private readonly updateTermsAndConditionsAcceptance = async (isTermsAccepted: boolean): Promise => {\n if (this.props.data.checkout.result) {\n await this.props.data.checkout.result.updateTermsAndConditionsAcceptance({ newIsTermsAndConditionAccepted: isTermsAccepted });\n }\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.errorMessage = undefined;\n };\n\n private readonly onChange = async (event: React.ChangeEvent) => {\n const checked = event.target.checked;\n this.isTermsAccepted = checked;\n if (this.isAutoSave) {\n await this.onSubmit();\n }\n };\n\n}\n\nexport default CheckoutTermsAndConditions;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 {\n getTenderTypesAsync, resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n Address, CardType, CartTenderLine, RetailOperation, SalesOrder, TenderType, 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\nasync function createCustomerAccountTenderLine(\n ctx: IActionContext,\n Amount: number,\n Currency: string = 'USD'\n): 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 default async (ctx: IActionContext, updatedCartVersion?: number): 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 || !checkoutState || !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 } = 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\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 ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[1], 10) : undefined;\n const giftCardExpirationMonth = giftCardExtend.ExpirationDate ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[0], 10) : undefined;\n const creditCardTenderLinePromise = getGiftCardTenderLine(ctx, giftCardExtend.Id, chargedAmount, Currency, tenderTypeId, giftCardPin, giftCardExpirationYear, giftCardExpirationMonth);\n getTenderLinePromises.push(creditCardTenderLinePromise);\n amountDue = roundNumber(amountDue - chargedAmount);\n }\n return amountDue === 0;\n });\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\n // Pay the rest by credit card\n if (amountDue > 0) {\n if (!tokenizedPaymentCard) {\n throw new Error('Fail to placeOrder: no token found');\n }\n const creditCardTenderLinePromise = getCreditCardTenderLine(\n ctx,\n tokenizedPaymentCard,\n cardPrefix,\n amountDue,\n Currency,\n billingAddress\n );\n getTenderLinePromises.push(creditCardTenderLinePromise);\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 }\n\n const cartVersion = updatedCartVersion || cartState.cart.Version;\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(error => {\n throw error;\n });\n\n if (!salesOrder) {\n throw new Error('Fail to placeOrder: fail to checkout');\n }\n\n return salesOrder;\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutTermsAndConditions, ICheckoutTermsAndConditionsError, ICheckoutTermsAndConditionsViewProps } from './checkout-terms-and-conditions';\n\nconst TermsAndCondition: React.FC = ({\n termsAndConditionAcceptance,\n checkBox,\n description\n}) => {\n\n return (\n \n {checkBox}\n {description}\n \n );\n};\n\nconst ErrorMessage: React.FC = ({\n error,\n title,\n message\n}) => {\n\n return (\n \n {title}\n {message}\n \n );\n};\n\nconst CheckoutTermsAndConditionsView: React.FC = props => {\n const {\n checkoutTermsAndConditions,\n viewState,\n termsAndConditionsContent,\n errorMessage,\n saveButton,\n editButton,\n cancelButton } = props;\n\n return (\n\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\n \n {viewState.isError && errorMessage && }\n \n {viewState.isShowSaveButton && saveButton}\n {viewState.isShowEditButton && editButton}\n {viewState.isShowCancelButton && cancelButton}\n \n );\n};\n\nexport default CheckoutTermsAndConditionsView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IFooterCategoryConfig, IFooterCategoryProps } from './footer-category.props.autogenerated';\n\nexport interface IFooterCategoryViewProps extends IFooterCategoryProps {\n categories: React.ReactNode[];\n FooterList: IModuleProps;\n FooterListItem: INodeProps;\n}\n\n/**\n *\n * FooterCategory component.\n * @extends {React.PureComponent>}\n */\nclass FooterCategory extends React.PureComponent> {\n public render(): JSX.Element | null {\n if (!this.props.slots || !this.props.slots.content || this.props.slots.content.length === 0) {\n this.props.context.telemetry.error('footer slots content is empty, module wont render');\n return null;\n }\n const viewprops = {\n ...this.props,\n categories: this.props.slots.content,\n FooterList: {\n moduleProps: this.props,\n className: classnames('ms-footer__list', this.props.config.className),\n tag: 'ul'\n },\n FooterListItem: {\n className: classnames('ms-footer__list-item', this.props.config.className),\n tag: 'li'\n }\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n}\n\nexport default FooterCategory;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ISpacerProps } from './spacer.props.autogenerated';\n\nexport interface ISpacerViewProps extends ISpacerProps<{}> {\n className?: string;\n}\n\n/**\n *\n * SpacerModule component.\n * @extends {React.PureComponent}\n */\nclass Spacer extends React.PureComponent> {\n public render(): JSX.Element | null {\n const { className } = this.props.config;\n const spacerClass = this.props.config.spacerHeight ? `ms-${this.props.config.spacerHeight}` : 'ms-spacer';\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: className && classnames(spacerClass, className) || spacerClass\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n}\n\nexport default Spacer;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutCustomerAccountPaymentResources } from '../checkout-customer-account-payment.props.autogenerated';\n\nexport interface IGetAccountPaymentEditViewFormInput {\n resources: ICheckoutCustomerAccountPaymentResources;\n amount: number;\n maxAmount: number;\n customer: Customer | undefined;\n customerCreatedDate: string;\n availableCredit: string;\n showCreditLimit: boolean;\n errorMessage: string | undefined;\n creditSectionIsExpanded: boolean;\n orderTotal: string;\n excessCredit: string | undefined;\n appliedAmount: string | undefined;\n onAddPayment(): Promise;\n onChangePaymentAmount(newAmount: number): void;\n onToggleCreditSection(): void;\n onRemovePayment(): Promise;\n}\n\nexport interface IAccountPaymentEditViewForm {\n formProps: INodeProps;\n inputLabel: React.ReactNode;\n inputAmount: React.ReactNode;\n addPaymentButton: React.ReactNode;\n customerName: React.ReactNode;\n customerAccountNumber: React.ReactNode;\n customerSince: React.ReactNode;\n accountCredit: React.ReactNode;\n alert: React.ReactNode;\n accountDetails: React.ReactNode;\n appliedLine: React.ReactNode;\n bottomBorder: React.ReactNode;\n}\n\nexport const getAccountPaymentFormEditMode = (options: IGetAccountPaymentEditViewFormInput): IAccountPaymentEditViewForm => {\n const {\n resources,\n onAddPayment,\n amount,\n onChangePaymentAmount,\n maxAmount,\n customer,\n customerCreatedDate,\n availableCredit,\n showCreditLimit,\n errorMessage,\n onToggleCreditSection,\n creditSectionIsExpanded,\n orderTotal,\n excessCredit,\n onRemovePayment,\n appliedAmount\n } = options;\n\n const { addPaymentButtonLabel, inputAmountLabel, inputAmountAriaLabel, customerSinceLabel, accountCreditLabel, creditDetailsSectionLabel, orderTotalLabel, availableCreditLabel, creditExcessLabel, appliedCustomerAccountPaymentLabel,\n removeCustomerAccountPaymentLabel } = resources;\n\n const inputLabel = (\n \n {inputAmountLabel}\n \n );\n\n const onAddAccountPayment = async (e: React.SyntheticEvent): Promise => {\n e.preventDefault();\n await onAddPayment();\n };\n\n const formProps = {\n className: 'ms-checkout-customer-account__form-edit',\n onSubmit: onAddAccountPayment,\n tag: 'form' as NodeTag\n };\n\n const addPaymentButton = (\n maxAmount) || (amount < 0)}\n >\n {addPaymentButtonLabel}\n \n );\n\n const onChangeAmount = (e: React.ChangeEvent) => {\n const value = Number.parseFloat(e.target.value || '0');\n onChangePaymentAmount(value);\n };\n\n const inputAmount = (\n \n );\n\n const customerName = (\n \n {customer?.Name}\n
\n );\n\n const customerAccountNumber = (\n \n #\n {customer?.AccountNumber}\n \n );\n\n const customerSince = (\n \n {customerSinceLabel}\n {customerCreatedDate}\n \n );\n\n const accountCredit = (\n <>\n \n {accountCreditLabel}\n \n {showCreditLimit && \n {availableCredit}\n }\n \n \n );\n\n const accountDetails = (\n creditSectionIsExpanded ? (\n \n <>\n \n \n \n {creditDetailsSectionLabel}\n \n \n \n \n \n {availableCreditLabel}\n \n \n {availableCredit}\n \n \n \n \n {orderTotalLabel}\n \n \n {orderTotal}\n \n \n \n \n {creditExcessLabel}\n \n \n {excessCredit}\n \n \n \n\n ) : undefined\n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const appliedLine = (\n appliedAmount ? (\n \n \n {appliedCustomerAccountPaymentLabel}\n \n \n {appliedAmount}\n \n \n {removeCustomerAccountPaymentLabel}\n \n \n ) : undefined\n );\n\n const bottomBorder = (\n
\n );\n\n return {\n formProps,\n inputLabel,\n inputAmount,\n addPaymentButton,\n customerName,\n customerAccountNumber,\n customerSince,\n accountCredit,\n alert,\n accountDetails,\n appliedLine,\n bottomBorder\n };\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutCustomerAccountPaymentResources } from '../checkout-customer-account-payment.props.autogenerated';\n\nexport interface IGetAccountPaymentSummaryViewFormInput {\n resources: ICheckoutCustomerAccountPaymentResources;\n amount: number;\n appliedAmount: string | undefined;\n}\n\nexport interface IAccountPaymentSummaryViewForm {\n formProps: INodeProps;\n label: React.ReactNode;\n paymentAmount: React.ReactNode;\n addPaymentButton: React.ReactNode;\n appliedLine: React.ReactNode;\n bottomBorder: React.ReactNode;\n}\n\nexport const getAccountPaymentFormSummaryMode = (options: IGetAccountPaymentSummaryViewFormInput): IAccountPaymentSummaryViewForm => {\n const {\n resources,\n amount,\n appliedAmount\n } = options;\n\n const { addPaymentButtonLabel, inputAmountSummaryLabel, appliedCustomerAccountPaymentLabel } = resources;\n\n const label = (\n \n );\n\n const formProps = {\n className: 'ms-checkout-customer-account__form-summary',\n tag: 'form' as NodeTag\n };\n\n const paymentAmount = (\n \n );\n\n const addPaymentButton = (\n \n {addPaymentButtonLabel}\n \n );\n\n const appliedLine = (\n appliedAmount ? (\n \n \n {appliedCustomerAccountPaymentLabel}\n \n \n {appliedAmount}\n \n
\n ) : undefined\n );\n\n const bottomBorder = (\n
\n );\n\n return {\n formProps,\n label,\n paymentAmount,\n addPaymentButton,\n appliedLine,\n bottomBorder\n };\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CustomerBalances } from '@msdyn365-commerce/retail-proxy';\nimport { IModuleStateManager, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutCustomerAccountPaymentData } from './checkout-customer-account-payment.data';\nimport { ICheckoutCustomerAccountPaymentProps } from './checkout-customer-account-payment.props.autogenerated';\nimport { getAccountPaymentFormEditMode, IAccountPaymentEditViewForm } from './components/get-account-payment-form-edit-mode';\nimport { getAccountPaymentFormSummaryMode, IAccountPaymentSummaryViewForm } from './components/get-account-payment-form-summary-mode';\n\nexport interface ICheckoutCustomerAccountPaymentViewProps extends ICheckoutCustomerAccountPaymentProps {\n checkoutCustomerAccount: IModuleProps;\n summaryView: IAccountPaymentSummaryViewForm;\n editView: IAccountPaymentEditViewForm;\n moduleState: IModuleStateManager;\n}\n\nexport interface ICheckoutCustomerAccountPaymentState {\n paymentAmount: number;\n isCreditSectionExpanded: boolean;\n}\n\n/**\n *\n * CheckoutCustomerAccount component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nexport class CheckoutCustomerAccountPayment extends React.Component {\n\n @computed get isCustomerAccountPaymentEnabled(): boolean {\n const customerInfo = get(this.props, 'data.customerInformation.result');\n const platform = get(this.props, 'context.request.app.platform');\n\n return customerInfo &&\n customerInfo.AllowOnAccountPayment === true &&\n platform &&\n (platform.enableCustomerAccountPayment === 'all' ||\n (platform.enableCustomerAccountPayment === 'b2b' && customerInfo.IsB2b === true) ||\n (platform.enableCustomerAccountPayment === 'b2c' && customerInfo.IsB2b === false));\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 getGiftCardAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.giftCards || checkoutState.giftCards.length === 0) {\n return 0;\n }\n\n let giftCardAmount: number = 0;\n checkoutState.giftCards.forEach(giftCard => {\n giftCardAmount += (giftCard.Balance || 0);\n });\n\n return giftCardAmount;\n }\n\n @computed get maxPaymentAmount(): number {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return 0;\n }\n\n // Use customer account after gift card and loyalty.\n const amountDue = Math.max(0, (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getGiftCardAmount);\n\n // If the user has a mandatory credit limit, then the max amount must not be more than that\n if (this.props.data.customerInformation?.result?.MandatoryCreditLimit) {\n return Math.min(this.getAvailableCredit(this.props.data.creditBalances?.result), amountDue);\n }\n return amountDue;\n\n }\n\n @computed get errorMessage(): string | undefined {\n if (this.state.paymentAmount > this.maxPaymentAmount || this.state.paymentAmount < 0) {\n return this.props.resources.invalidAmountMessage;\n }\n\n return undefined;\n }\n\n @computed get currencyCode(): string | undefined {\n return get(this.props, 'context.request.channel.Currency');\n }\n\n @computed get availableCredit(): number {\n const creditBalances = get(this.props, 'data.creditBalances.result');\n\n return creditBalances ? this.getAvailableCredit(creditBalances) : 0;\n }\n\n @computed get orderTotal(): number {\n const orderTotal = get(this.props, 'data.checkout.result.checkoutCart.cart.TotalAmount');\n\n return orderTotal ? orderTotal : 0;\n }\n\n @computed get formattedExcessCredit(): string | undefined {\n const excessCredit = this.availableCredit - this.orderTotal;\n return excessCredit < 0 ? this.props.context.cultureFormatter.formatCurrency(excessCredit, this.currencyCode) : undefined;\n }\n\n private readonly baseClassName: string = 'ms-checkout-customer-account';\n\n public constructor(props: ICheckoutCustomerAccountPaymentViewProps) {\n super(props);\n this.state = { paymentAmount: this.maxPaymentAmount, isCreditSectionExpanded: false };\n }\n\n public async componentDidMount(): Promise {\n await this.init();\n\n // When the cart.TotalAmount gets updated (like if selecting the delivery option adds a charge) we need to update the amount based on the new total amount.\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart && this.props.data.checkout.result.checkoutCart.cart.TotalAmount,\n totalAmount => {\n this.updateMaxAmount(this.maxPaymentAmount);\n }\n );\n }\n\n public render(): JSX.Element | null {\n const customerInfo = this.props.data.customerInformation.result;\n\n if (!this.isCustomerAccountPaymentEnabled) {\n this.props.context.telemetry.information('customer account payments will not display, because the feature is disabled or not enabled for this type of customer');\n return null;\n }\n\n const checkoutState = this.props.data.checkout.result;\n const cart = checkoutState ? checkoutState.checkoutCart.cart : undefined;\n const hasInvoiceLine = checkoutState?.checkoutCart.hasInvoiceLine;\n const creditBalances = this.props.data.creditBalances.result;\n\n if (!cart || hasInvoiceLine) {\n return null;\n }\n const resources = this.props.resources;\n const locale = get(this.props, 'context.request.locale') || 'en-us';\n\n const customerSinceDate = new Date(customerInfo?.CreatedDateTime || 0).toLocaleDateString(locale);\n\n const props = {\n ...this.props,\n checkoutCustomerAccount: {\n moduleProps: this.props,\n className: classnames(\n this.baseClassName\n ) },\n editView: getAccountPaymentFormEditMode({\n onAddPayment: this.addPayment,\n resources,\n amount: this.state.paymentAmount,\n onChangePaymentAmount: this.onChangePaymentAmount,\n maxAmount: this.maxPaymentAmount,\n customer: customerInfo,\n customerCreatedDate: customerSinceDate,\n availableCredit: this.props.context.cultureFormatter.formatCurrency(this.getAvailableCredit(creditBalances), this.currencyCode),\n showCreditLimit: customerInfo?.MandatoryCreditLimit || false,\n errorMessage: this.errorMessage,\n onToggleCreditSection: this.toggleCreditSection,\n creditSectionIsExpanded: this.state.isCreditSectionExpanded,\n orderTotal: this.props.context.cultureFormatter.formatCurrency(this.orderTotal, this.currencyCode),\n excessCredit: this.formattedExcessCredit,\n onRemovePayment: this.removePayment,\n appliedAmount: checkoutState && checkoutState.customerAccountAmount > 0 ? this.props.context.cultureFormatter.formatCurrency(checkoutState.customerAccountAmount, this.currencyCode) : undefined\n }),\n summaryView: getAccountPaymentFormSummaryMode({\n resources,\n amount: this.state.paymentAmount,\n appliedAmount: checkoutState && checkoutState.customerAccountAmount > 0 ? this.props.context.cultureFormatter.formatCurrency(checkoutState.customerAccountAmount, this.currencyCode) : undefined\n })\n };\n\n return this.props.renderView(props) as React.ReactElement;\n }\n\n private readonly getAvailableCredit = (creditBalances: CustomerBalances | undefined) => {\n if (!creditBalances) {\n return 0;\n }\n return creditBalances.CreditLimit - creditBalances.Balance - creditBalances.PendingBalance;\n };\n\n private readonly addPayment = async (): Promise => {\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n this.props.context.telemetry.error('checkout state not found');\n return;\n }\n\n await checkoutState.updateCustomerAccountAmount({ newAmount: this.state.paymentAmount });\n this.props.context.telemetry.information('customer account payment amount updated');\n };\n\n private readonly toggleCreditSection = (): void => {\n this.setState({\n isCreditSectionExpanded: !this.state.isCreditSectionExpanded\n });\n };\n\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onCancel: this.handleCancelOrSubmit,\n onSubmit: this.handleCancelOrSubmit,\n onEdit: this.onEdit\n });\n\n if (this.props.data.checkout.result && this.props.data.checkout.result.customerAccountAmount !== 0) {\n this.props.moduleState.onReady();\n }\n };\n\n private readonly onChangePaymentAmount =(newAmount: number): void => {\n this.setState({\n paymentAmount: newAmount\n });\n };\n\n private readonly updateMaxAmount =(newAmount: number): void => {\n\n // If the user has already set an amount, we should not override that in the UI because it will be confusing.\n if (this.props.data.checkout.result && this.props.data.checkout.result.customerAccountAmount === 0) {\n this.setState({\n // We should never allow a negative amount.\n paymentAmount: Math.max(0, newAmount)\n });\n }\n };\n\n private readonly onEdit = (): void => {\n this.props.moduleState.onUpdating();\n };\n\n private readonly handleCancelOrSubmit = () => {\n const checkoutState = this.props.data.checkout.result;\n if (checkoutState && checkoutState.customerAccountAmount > 0) {\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly removePayment = async (): Promise => {\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n this.props.context.telemetry.error('checkout state not found');\n return;\n }\n\n this.setState({\n paymentAmount: 0\n });\n\n await checkoutState.updateCustomerAccountAmount({ newAmount: 0 });\n this.props.context.telemetry.information('customer account payment removed');\n };\n}\n\nexport default CheckoutCustomerAccountPayment;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutPickupViewProps } from './checkout-pickup';\nimport { ICheckoutPickupGroupViewProps } from './components/checkout-pickup-group';\n\nconst CheckoutPickupView: React.FC = props => {\n const {\n checkoutPickup,\n viewState,\n headerError,\n waiting,\n pickupGroups\n } = props;\n\n return (\n \n {viewState.isLoading && waiting}\n {viewState.isHeaderError && headerError}\n {pickupGroups.map((pickupGroupViewProps: ICheckoutPickupGroupViewProps, index: number): React.ReactElement => {\n const {\n pickupGroupContainer,\n dateTimeslotContainer,\n groupDivider,\n groupHeader,\n groupErrorMessage,\n cartLineImages,\n pickupDateDropdown,\n pickupTimeslotDropdown,\n selectedDateTimeslot,\n pickupAddress\n } = pickupGroupViewProps;\n\n return (\n \n {groupDivider}\n {groupHeader}\n {groupErrorMessage}\n {cartLineImages}\n {viewState.isShowDropdown &&\n \n {pickupDateDropdown}\n {pickupTimeslotDropdown}\n }\n {viewState.isShowSelected && pickupAddress}\n {viewState.isShowSelected && selectedDateTimeslot}\n \n );\n })}\n \n );\n\n};\n\nexport default CheckoutPickupView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IImageProps, IImageSettings, Image, IModule } from '@msdyn365-commerce/core';\nimport {\n Address, CartLine, LineDeliverySpecification, PickupTimeslotAvailability, SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface ICheckoutPickupGroupKey {\n pickupStoreId: string;\n deliveryMode: string;\n}\n\nexport interface ICheckoutPickupGroup extends ICheckoutPickupGroupKey {\n pickupModeName: string;\n storeName: string;\n pickupAddress?: Address;\n availabilityState: PickupTimeslotAvailabilityState;\n groupErrorMessage?: string;\n dateErrorMessage?: string;\n timeslotErrorMessage?: string;\n lineDeliverySpecs: LineDeliverySpecification[];\n cartLines: ICartLineWithProduct[];\n\n availableDates: Date[];\n availableTimeslots: PickupTimeslotAvailability[];\n\n selectedDate?: Date;\n selectedTimeslot?: PickupTimeslotAvailability;\n}\n\nexport enum PickupTimeslotAvailabilityState {\n None,\n Available,\n NotDefined,\n NotAvailable // All slots occupied\n}\n\nexport interface ICartLineWithProduct {\n cartLine: CartLine;\n product?: SimpleProduct;\n}\n\nexport interface ICheckoutPickupGroupViewProps {\n moduleProps: IModule;\n\n pickupGroupContainer: INodeProps;\n dateTimeslotContainer: INodeProps;\n\n pickupStoreId: string;\n pickupModeName: string;\n deliveryMode: string;\n\n groupDivider: React.ReactNode;\n groupHeader: React.ReactNode;\n groupErrorMessage: React.ReactNode;\n cartLineImages: React.ReactNode;\n pickupDateDropdown: React.ReactNode;\n pickupTimeslotDropdown: React.ReactNode;\n\n selectedDateTimeslot: React.ReactNode;\n pickupAddress: React.ReactNode;\n}\n\nexport interface ICheckoutPickupErrorProps {\n errorMessage?: string;\n}\n\nexport const CheckoutPickupError: React.FC = ({\n errorMessage\n}) => {\n if (!errorMessage) {\n return null;\n }\n\n return (\n \n \n );\n};\n\nexport interface ICheckoutPickupGroupHeaderProps {\n moduleClassName: string;\n storeInfo: string;\n items: string;\n}\n\nexport const CheckoutPickupGroupHeader: React.FC = ({ moduleClassName, storeInfo, items }) => {\n return (\n
\n
\n {storeInfo}\n
\n
\n {items}\n
\n
\n );\n};\n\nexport interface ICheckoutPickupTimeslotInfoProps {\n moduleClassName: string;\n title: string;\n content: string;\n}\n\nexport const CheckoutPickupTimeslotInfo: React.FC = ({ moduleClassName, title, content }) => {\n return (\n
\n
\n {title}\n
\n
\n {content}\n
\n
\n );\n};\n\nexport interface ICheckoutPickupAddressProps {\n moduleClassName: string;\n title: string;\n address?: Address;\n}\n\nexport const CheckoutPickupAddress: React.FC = ({ moduleClassName, title, address }) => {\n if (!address) {\n return null;\n }\n\n return (\n
\n
\n {title}\n
\n {address.Name && \n {address.Name}\n }\n <>\n {address.Street && \n {address.Street}\n }\n {address.City && \n {address.City}\n }\n {address.State && \n {`, ${address.State}`}\n }\n {address.County && \n {`, ${address.County}`}\n }\n {address.ZipCode && \n {` ${address.ZipCode}`}\n }\n {address.ThreeLetterISORegionName && \n {` ${address.ThreeLetterISORegionName}`}\n }\n \n
\n );\n};\n\nexport interface ICheckoutPickupCartLineInfo {\n lineId: string;\n imageProps: IImageProps;\n quantity: number;\n}\n\nexport interface ICheckoutPickupCartLinesProps {\n moduleClassName: string;\n cartLines: ICheckoutPickupCartLineInfo[];\n}\n\nexport const CheckoutPickupCartLines: React.FC = ({ moduleClassName, cartLines }) => {\n if (!ArrayExtensions.hasElements(cartLines)) {\n return null;\n }\n return (\n
\n {cartLines.map(prop => {\n const showQty = prop.quantity > 1;\n let className = `${moduleClassName}__group-product-image`;\n if (showQty) {\n className = classnames(className, ' product-image-wide');\n }\n return (\n
\n \n {showQty &&
\n {prop.quantity}\n
}\n
\n );\n })}\n
\n );\n};\n\nexport const DefaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=108&h=108&q=80&m=6&f=jpg\"', w: 108, h: 108 },\n lg: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n xl: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 }\n },\n lazyload: true,\n quality: 80\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { format } from '@msdyn365-commerce-modules/utilities';\n\nexport function getDate(date: Date | undefined, locale: string): string {\n if (!date) {\n return '';\n }\n const options: Intl.DateTimeFormatOptions = {\n timeZone: 'UTC'\n };\n const formatter = new Intl.DateTimeFormat(locale, options);\n return formatter.format(new Date(date));\n}\n\nexport const getTimeslot = (placeHolder: string, startDate: Date | undefined, endDate: Date | undefined, locale: string): string => {\n if (!startDate || !endDate) {\n return '';\n }\n const options: Intl.DateTimeFormatOptions = {\n hour: 'numeric',\n minute: 'numeric',\n hour12: true,\n timeZone: 'UTC'\n };\n const formatter = new Intl.DateTimeFormat(locale, options);\n return format(placeHolder, formatter.format(new Date(startDate)), formatter.format(new Date(endDate)));\n};\n\nexport const getUTCDateWithoutTime = (input: Date): Date => {\n const date: Date = new Date(input);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0));\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { LabeledDropdown } from '@msdyn365-commerce-modules/utilities';\nimport {\n ILabeledDropdownOnChangeNotification, ILabeledDropdownOption\n} from '@msdyn365-commerce-modules/utilities/dist/types/labeled-dropdown/LabeledDropdown.props';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { CheckoutPickupError } from './checkout-pickup-group';\nimport { getDate } from './checkout-pickup-utility';\n\nexport interface IPickupDropdownProps {\n pickupStoreId: string;\n deliveryMode: string;\n\n className: string;\n labelClassname?: string;\n labelText: string;\n defaultText: string;\n errorMessage?: string;\n\n locale: string;\n\n // Props for the LabeledDropdown component\n dropdownId: string;\n controlledByParent: boolean;\n toggleColor?: string;\n dropdownClassname?: string;\n}\n\nexport interface IPickupDateDropdownProps extends IPickupDropdownProps {\n availableDates: Date[];\n selectedDate?: Date;\n setDateHandler(pickupStoreId: string, deliveryMode: string, pickupDate: Date | undefined): void;\n}\n\n/**\n *\n * CheckoutPickupDateDropdown component.\n * @extends {React.Component}\n */\nexport class CheckoutPickupDateDropdown extends React.Component {\n\n private readonly defaultKey: number = -1;\n\n private readonly defaultOption: ILabeledDropdownOption;\n\n // As the LabeledDropdown control only offers key and value, we need to map the key with date and timeslot data\n @computed get getDateMap(): Map {\n const map = new Map();\n this.props.availableDates.forEach((value, index) => {\n map.set(index.toString(), value);\n });\n return map;\n }\n\n constructor(props: IPickupDateDropdownProps) {\n super(props);\n this.defaultOption = { key: this.defaultKey.toString(), value: props.defaultText };\n this.updateDateSelection = this.updateDateSelection.bind(this);\n }\n\n public render(): JSX.Element | null {\n const {\n className,\n labelClassname,\n labelText,\n errorMessage,\n dropdownId,\n availableDates,\n selectedDate,\n controlledByParent,\n toggleColor,\n dropdownClassname\n } = this.props;\n\n const { dropdownOptions, selectedOption } = this.mapDatesToOptions(availableDates, selectedDate);\n\n return (\n
\n \n \n \n
\n );\n }\n\n private readonly updateDateSelection = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n pickupStoreId,\n deliveryMode,\n setDateHandler\n } = this.props;\n const date: Date | undefined = this.getDate(notification);\n setDateHandler(pickupStoreId, deliveryMode, date);\n };\n\n private readonly getDate = (notification: ILabeledDropdownOnChangeNotification): Date | undefined => {\n const key: string = notification.selectedOption.key;\n if (key === this.defaultKey.toString() || !this.getDateMap.has(key)) {\n return undefined;\n }\n return this.getDateMap.get(key);\n\n };\n\n private readonly mapDatesToOptions = (dates: Date[], selectedDate: Date | undefined): { dropdownOptions: ILabeledDropdownOption[]; selectedOption: ILabeledDropdownOption | undefined } => {\n const { locale } = this.props;\n let options: ILabeledDropdownOption[] = [];\n let selectedOption: ILabeledDropdownOption = this.defaultOption;\n\n options = dates.map((value: Date, index: number) => {\n return {\n key: index.toString(),\n value: getDate(value, locale)\n };\n });\n options.unshift(this.defaultOption);\n\n const index: number = dates.findIndex((value: Date) => (selectedDate !== undefined && selectedDate.getTime() === value.getTime()));\n if (index >= 0 && selectedDate) {\n selectedOption = {\n key: index.toString(),\n value: getDate(selectedDate, locale)\n };\n }\n\n return {\n dropdownOptions: options,\n selectedOption\n };\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n PickupTimeslotAvailability\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { LabeledDropdown } from '@msdyn365-commerce-modules/utilities';\nimport {\n ILabeledDropdownOnChangeNotification, ILabeledDropdownOption\n} from '@msdyn365-commerce-modules/utilities/dist/types/labeled-dropdown/LabeledDropdown.props';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { IPickupDropdownProps } from './checkout-pickup-date-dropdown';\nimport { CheckoutPickupError } from './checkout-pickup-group';\nimport { getTimeslot } from './checkout-pickup-utility';\n\nexport interface IPickupTimeslotDropdownProps extends IPickupDropdownProps {\n availableTimeslots: PickupTimeslotAvailability[];\n selectedTimeslot?: PickupTimeslotAvailability;\n timeslotPlaceHolder: string;\n setTimeslotHandler(pickupStoreId: string, deliveryMode: string, pickupTimeslot: PickupTimeslotAvailability | undefined): void;\n}\n\n/**\n *\n * CheckoutPickupTimeslotDropdown component.\n * @extends {React.Component}\n */\nexport class CheckoutPickupTimeslotDropdown extends React.Component {\n\n private readonly defaultKey: number = -1;\n\n private readonly defaultOption: ILabeledDropdownOption;\n\n // As the LabeledDropdown control only offers key and value, we need to map the key with date and timeslot data\n @computed get getTimeslotMap(): Map {\n const map = new Map();\n this.props.availableTimeslots.forEach((value, index) => {\n map.set(index.toString(), value);\n });\n return map;\n }\n\n constructor(props: IPickupTimeslotDropdownProps) {\n super(props);\n this.defaultOption = { key: this.defaultKey.toString(), value: props.defaultText };\n this.updateTimeslotSelection = this.updateTimeslotSelection.bind(this);\n }\n\n public render(): JSX.Element | null {\n const {\n className,\n labelClassname,\n labelText,\n errorMessage,\n dropdownId,\n availableTimeslots,\n selectedTimeslot,\n controlledByParent,\n toggleColor,\n dropdownClassname\n } = this.props;\n\n const { dropdownOptions, selectedOption } = this.mapTimeslotsToOptions(availableTimeslots, selectedTimeslot);\n\n return (\n
\n \n \n \n
\n );\n }\n\n private readonly updateTimeslotSelection = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n pickupStoreId,\n deliveryMode,\n setTimeslotHandler\n } = this.props;\n const timeslot: PickupTimeslotAvailability | undefined = this.getTimeslot(notification);\n setTimeslotHandler(pickupStoreId, deliveryMode, timeslot);\n };\n\n private readonly getTimeslot = (notification: ILabeledDropdownOnChangeNotification): PickupTimeslotAvailability | undefined => {\n const key: string = notification.selectedOption.key;\n if (key === this.defaultKey.toString() || !this.getTimeslotMap.has(key)) {\n return undefined;\n }\n return this.getTimeslotMap.get(key);\n\n };\n\n private readonly mapTimeslotsToOptions = (timeslots: PickupTimeslotAvailability[], selectedTimeslot: PickupTimeslotAvailability | undefined): { dropdownOptions: ILabeledDropdownOption[]; selectedOption: ILabeledDropdownOption | undefined } => {\n const { timeslotPlaceHolder, locale } = this.props;\n let options: ILabeledDropdownOption[] = [];\n let selectedOption: ILabeledDropdownOption = this.defaultOption;\n\n options = timeslots.map((value: PickupTimeslotAvailability, index: number) => {\n return {\n key: index.toString(),\n value: getTimeslot(timeslotPlaceHolder, value.StartDateTime, value.EndDateTime, locale)\n };\n });\n options.unshift(this.defaultOption);\n\n const index: number = timeslots.findIndex(value => (\n selectedTimeslot !== undefined &&\n selectedTimeslot.StartDateTime?.getTime() === value.StartDateTime?.getTime() &&\n selectedTimeslot.EndDateTime?.getTime() === value.EndDateTime?.getTime()\n ));\n if (index >= 0 && selectedTimeslot) {\n selectedOption = {\n key: index.toString(),\n value: getTimeslot(timeslotPlaceHolder, selectedTimeslot.StartDateTime, selectedTimeslot.EndDateTime, locale)\n };\n }\n\n return {\n dropdownOptions: options,\n selectedOption\n };\n };\n\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport {\n getEstimatedPickupTimeslotAvailabilitiesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CartLine, LineDeliverySpecification, OrgUnitLocation, PickupTimeslotAvailability, PickupTimeslotAvailabilitySearchCriteria,\n ProductDeliveryOptions, SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n ArrayExtensions, getFallbackImageUrl, getSimpleProducts, ObjectExtensions, ProductInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n format, IModuleProps, isNullOrWhiteSpace, Waiting\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { action, computed, observable, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutPickupData } from './checkout-pickup.data';\nimport { ICheckoutPickupProps } from './checkout-pickup.props.autogenerated';\nimport {\n CheckoutPickupDateDropdown, CheckoutPickupError, CheckoutPickupTimeslotDropdown, getDate, getTimeslot,\n getUTCDateWithoutTime\n} from './components';\nimport {\n CheckoutPickupAddress, CheckoutPickupCartLines, CheckoutPickupGroupHeader,\n CheckoutPickupTimeslotInfo, DefaultImageSettings, ICheckoutPickupAddressProps,\n ICheckoutPickupCartLineInfo, ICheckoutPickupCartLinesProps, ICheckoutPickupGroup,\n ICheckoutPickupGroupHeaderProps, ICheckoutPickupGroupViewProps, ICheckoutPickupTimeslotInfoProps, PickupTimeslotAvailabilityState\n} from './components/checkout-pickup-group';\n\nexport interface ICheckoutPickupModuleProps extends ICheckoutPickupProps, IModuleStateProps { }\n\nexport interface ICheckoutPickupState {\n pickupGroups: ICheckoutPickupGroup[];\n}\n\nexport interface ICheckoutPickupViewState {\n isLoading: boolean;\n isHeaderError: boolean;\n isShowDropdown: boolean;\n isShowSelected: boolean;\n}\n\nexport interface ICheckoutPickupViewProps extends ICheckoutPickupProps<{}> {\n checkoutPickup: IModuleProps;\n viewState: ICheckoutPickupViewState;\n headerError: React.ReactNode;\n waiting: React.ReactNode;\n pickupGroups: ICheckoutPickupGroupViewProps[];\n}\n\n/**\n *\n * CheckoutPickup component.\n * @extends {React.Component}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutPickup extends React.Component {\n @observable private isLoading: boolean = false;\n\n @observable private headerErrorMessage?: string;\n\n @computed get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS' &&\n (this.props.data.orgUnitLocations.result && this.props.data.orgUnitLocations.status) === 'SUCCESS';\n }\n\n constructor(props: ICheckoutPickupModuleProps) {\n super(props);\n this.state = { pickupGroups: [] };\n\n this.setDateHandler = this.setDateHandler.bind(this);\n this.setTimeslotHandler = this.setTimeslotHandler.bind(this);\n }\n\n public componentDidMount(): void {\n when(\n () => this.isDataReady,\n async () => {\n await this.initPickupGroup();\n this.initModuleState();\n }\n );\n }\n\n public render(): JSX.Element | null {\n if (!this.isDataReady || !this.canPickup()) {\n return null;\n }\n\n const { resources, config, context } = this.props;\n\n const {\n pickupDateLabel,\n pickupTimeslotLabel,\n pickupDateDefaultText,\n pickupTimeslotDefaultText,\n itemsText,\n singleItemText,\n pickupDateTimeslotText,\n pickupTimeslotPlaceHolder,\n pickupLocationLabel\n } = resources;\n\n const { locale } = context.request;\n const { className, imageSettings } = config;\n const defaultClassName = 'ms-checkout-pickup';\n const groupsViewProps: ICheckoutPickupGroupViewProps[] = [];\n\n this.state.pickupGroups.forEach((value, index) => {\n // Divider line for each pickup group\n const groupDivider: React.ReactNode = index !== 0 && (\n
\n );\n\n // Heading for each group\n const itemText = value.lineDeliverySpecs.length > 1 ? itemsText : singleItemText;\n const headerProps: ICheckoutPickupGroupHeaderProps = {\n moduleClassName: defaultClassName,\n storeInfo: `${value.pickupModeName}, ${value.storeName}`,\n items: `(${format(itemText, value.lineDeliverySpecs.length)})`\n };\n const groupHeader: React.ReactNode = ;\n\n // Line images\n const cartlines: ICheckoutPickupCartLineInfo[] = value.cartLines.filter(x => !ObjectExtensions.isNullOrUndefined(x.product)).map(line => ({\n lineId: line.cartLine.LineId || '',\n imageProps: {\n requestContext: context.actionContext.requestContext,\n className: `${defaultClassName}__group-line-image`,\n altText: line.product?.Name,\n src: line.product?.PrimaryImageUrl || '',\n fallBackSrc: getFallbackImageUrl(line.product?.ItemId, context.actionContext.requestContext.apiSettings),\n gridSettings: context.request.gridSettings!,\n imageSettings: imageSettings || DefaultImageSettings,\n loadFailureBehavior: 'empty'\n },\n quantity: line.cartLine.Quantity || 0\n })\n );\n const lineImageProps: ICheckoutPickupCartLinesProps = {\n moduleClassName: defaultClassName,\n cartLines: cartlines.filter(x => !ObjectExtensions.isNullOrUndefined(x))\n };\n const cartLineImages: React.ReactNode = ;\n\n // Selected pickup date and timeslot node\n const dateString = getDate(value.selectedDate, locale);\n const timeslotString = getTimeslot(pickupTimeslotPlaceHolder, value.selectedTimeslot?.StartDateTime, value.selectedTimeslot?.EndDateTime, locale);\n const timeslotInfoProps: ICheckoutPickupTimeslotInfoProps = {\n moduleClassName: defaultClassName,\n title: pickupDateTimeslotText,\n content: `${dateString} ${timeslotString}`\n };\n const selectedDateTimeslotNode: React.ReactNode = ;\n\n // Pickup address\n const addressProps: ICheckoutPickupAddressProps = {\n moduleClassName: defaultClassName,\n title: pickupLocationLabel,\n address: value.pickupAddress\n };\n const pickupAddress: React.ReactNode = ;\n\n // Pickup date and timeslot dropdown list\n const dropdownClassName = `${defaultClassName}__group-datetime-dropdown`;\n const labelClassName = `${dropdownClassName}-label`;\n const dropdownSelectClassName = `${dropdownClassName}-select`;\n const dateDropdownNode: React.ReactNode = (\n \n );\n\n const timeslotDropdownNode: React.ReactNode = (\n \n );\n\n const viewProp: ICheckoutPickupGroupViewProps = {\n moduleProps: { ...this.props },\n pickupGroupContainer: { className: `${defaultClassName}__group` },\n dateTimeslotContainer: { className: `${defaultClassName}__group-datetime` },\n pickupStoreId: value.pickupStoreId,\n pickupModeName: value.pickupModeName,\n deliveryMode: value.deliveryMode,\n groupDivider,\n groupHeader,\n groupErrorMessage: ,\n cartLineImages,\n pickupDateDropdown: dateDropdownNode,\n pickupTimeslotDropdown: timeslotDropdownNode,\n selectedDateTimeslot: selectedDateTimeslotNode,\n pickupAddress\n };\n\n groupsViewProps.push(viewProp);\n });\n\n const {\n moduleState: { isReady, hasError }\n } = this.props;\n const isHeaderError = !this.isLoading && this.headerErrorMessage !== undefined;\n const isShowDropdown = !this.isLoading && !isReady;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n\n const viewProps: ICheckoutPickupViewProps = {\n ...this.props,\n checkoutPickup: {\n moduleProps: this.props,\n className: classname(defaultClassName, className)\n },\n viewState: {\n isLoading: this.isLoading,\n isHeaderError,\n isShowSelected,\n isShowDropdown\n },\n headerError: ,\n waiting: ,\n pickupGroups: groupsViewProps\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n public async setDateHandler(pickupStoreId: string, deliveryMode: string, pickupDate: Date | undefined): Promise {\n const oldGroup = this.state.pickupGroups.find(group => group.pickupStoreId === pickupStoreId && group.deliveryMode === deliveryMode);\n if (!oldGroup) {\n return;\n }\n\n const newGroup: ICheckoutPickupGroup = { ...oldGroup };\n newGroup.selectedDate = pickupDate;\n newGroup.selectedTimeslot = undefined; // Clear the selected timeslot in any case\n newGroup.timeslotErrorMessage = undefined; // Clear the timeslot error message if any\n newGroup.lineDeliverySpecs.forEach((lineSpec: LineDeliverySpecification) => {\n if (lineSpec.DeliverySpecification) {\n lineSpec.DeliverySpecification.PickupTimeslotStartDateTime = undefined;\n lineSpec.DeliverySpecification.PickupTimeslotEndDateTime = undefined;\n }\n });\n\n if (pickupDate) { // Date is set\n const searchCriteria: PickupTimeslotAvailabilitySearchCriteria = {\n DeliveryModeCode: newGroup.deliveryMode,\n StoreId: newGroup.pickupStoreId,\n StartDate: pickupDate,\n EndDate: pickupDate,\n SearchOptionValue: 2 // Test runtime does not recognize PickupTimeslotAvailabilitySearchOption.All\n };\n const timeslotResults: PickupTimeslotAvailability[] = await getEstimatedPickupTimeslotAvailabilitiesAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {}, bypassCache: 'get' }, searchCriteria);\n\n newGroup.availableTimeslots = timeslotResults.filter(value => (value.AvailableCapacity || 0) > 0);\n newGroup.dateErrorMessage = newGroup.availableTimeslots.length === 0 ? this.props.resources.noAvailableTimeslotError : undefined;\n } else { // Date is not set\n newGroup.availableTimeslots = [];\n newGroup.dateErrorMessage = undefined;\n }\n\n const groups = this.state.pickupGroups.map(group => {\n if (group.pickupStoreId === pickupStoreId && group.deliveryMode === deliveryMode) {\n return newGroup;\n }\n return group;\n\n });\n\n this.setState({ pickupGroups: groups });\n }\n\n @action\n public setTimeslotHandler(pickupStoreId: string, deliveryMode: string, pickupTimeslot: PickupTimeslotAvailability | undefined): void {\n const oldGroup = this.state.pickupGroups.find(group => group.pickupStoreId === pickupStoreId && group.deliveryMode === deliveryMode);\n if (!oldGroup) {\n return;\n }\n\n const newGroup: ICheckoutPickupGroup = { ...oldGroup };\n\n newGroup.selectedTimeslot = pickupTimeslot;\n newGroup.lineDeliverySpecs.forEach((lineSpec: LineDeliverySpecification) => {\n if (lineSpec.DeliverySpecification) {\n lineSpec.DeliverySpecification.PickupTimeslotStartDateTime = pickupTimeslot?.StartDateTime;\n lineSpec.DeliverySpecification.PickupTimeslotEndDateTime = pickupTimeslot?.EndDateTime;\n }\n });\n\n if (pickupTimeslot) {\n newGroup.timeslotErrorMessage = undefined;\n }\n\n const groups = this.state.pickupGroups.map(group => {\n if (group.pickupStoreId === pickupStoreId && group.deliveryMode === deliveryMode) {\n return newGroup;\n }\n return group;\n\n });\n\n this.setState({ pickupGroups: groups });\n }\n\n @action\n private readonly initModuleState = (): void => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onSubmit: this.onSubmit,\n status: this.canPickup() ? (this.isPickupTimeSlotSet() ? 'ready' : 'updating') : 'disabled'\n });\n };\n\n private readonly onEdit = (): void => {\n this.props.moduleState.onUpdating();\n };\n\n private readonly onReady = (): void => {\n this.props.moduleState.onReady();\n };\n\n private readonly onPending = (): void => {\n this.props.moduleState.onPending();\n };\n\n private readonly onSubmit = async (): Promise => {\n await this.updateCartLinePickupDateTimeslot();\n };\n\n private readonly setError = (errorMessage: string, isHeaderError: boolean = true): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n if (isHeaderError) {\n this.headerErrorMessage = errorMessage;\n }\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.headerErrorMessage = undefined;\n };\n\n @action\n\n private readonly initPickupGroup = async (): Promise => {\n const pickupCartLines: CartLine[] = this.getCartLinesforPickup();\n let products: SimpleProduct[] = [];\n try {\n products = await this.getProductsByCartLines(this.props.data.checkout.result?.checkoutCart.cart.ChannelId || 0, pickupCartLines);\n } catch (error) {\n this.props.telemetry.error(error);\n }\n const pickupGroups: ICheckoutPickupGroup[] = [];\n const locations: OrgUnitLocation[] = this.props.data.orgUnitLocations.result || [];\n this.isLoading = true;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { featureState, deliveryOptions } = this.props?.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)?.IsEnabled;\n\n for (const line of pickupCartLines) {\n const group: ICheckoutPickupGroup | undefined = pickupGroups.find(x => x.pickupStoreId === line.FulfillmentStoreId && x.deliveryMode === line.DeliveryMode);\n const product: SimpleProduct | undefined = products.find(x => x.RecordId === line.ProductId);\n const lineDeliverySpecification: LineDeliverySpecification = {\n LineId: line.LineId,\n DeliverySpecification: {\n DeliveryModeId: line.DeliveryMode,\n DeliveryPreferenceTypeValue: 2,\n PickUpStoreId: line.FulfillmentStoreId,\n PickupTimeslotStartDateTime: line.PickupTimeslotStartDateTime,\n PickupTimeslotEndDateTime: line.PickupTimeslotEndDateTime,\n DeliveryAddress: line.ShippingAddress\n }\n };\n if (group) {\n group.lineDeliverySpecs.push(lineDeliverySpecification);\n group.cartLines.push({ cartLine: line, product });\n } else { // Group not exists yet\n const location: OrgUnitLocation | undefined = locations.find(x => x.OrgUnitNumber === line.FulfillmentStoreId);\n const storeName: string = this.getStoreName(location, line);\n const selectedDate: Date | undefined = line.PickupTimeslotStartDateTime && getUTCDateWithoutTime(line.PickupTimeslotStartDateTime);\n const selectedTimeslot = (line.PickupTimeslotStartDateTime && line.PickupTimeslotEndDateTime) ? { StartDateTime: line.PickupTimeslotStartDateTime, EndDateTime: line.PickupTimeslotEndDateTime } : undefined;\n const newGroup: ICheckoutPickupGroup = {\n pickupModeName: retailMultiplePickUpOptionEnabled ? this.getPickupModeDescription(this.props.resources.generalPickupText, line.DeliveryMode, deliveryOptions?.result, product) : this.props.resources.generalPickupText,\n pickupStoreId: line.FulfillmentStoreId || '',\n deliveryMode: line.DeliveryMode || '',\n storeName,\n pickupAddress: line.ShippingAddress,\n availabilityState: PickupTimeslotAvailabilityState.None,\n lineDeliverySpecs: [lineDeliverySpecification],\n cartLines: [{ cartLine: line, product }],\n availableDates: [],\n availableTimeslots: [],\n selectedDate,\n selectedTimeslot\n };\n\n let dailyGroupingResults: PickupTimeslotAvailability[] = [];\n try {\n const searchCriteria: PickupTimeslotAvailabilitySearchCriteria = {\n DeliveryModeCode: newGroup.deliveryMode,\n StoreId: newGroup.pickupStoreId,\n SearchOptionValue: 1 // Test runtime does not recognize PickupTimeslotAvailabilitySearchOption.DailyGroupingTimeslotOnly\n };\n dailyGroupingResults = await getEstimatedPickupTimeslotAvailabilitiesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }, searchCriteria);\n } catch (error) {\n this.props.telemetry.error(error);\n }\n newGroup.availabilityState = this.getPickupTimeslotAvailabilityState(dailyGroupingResults);\n if (newGroup.availabilityState === PickupTimeslotAvailabilityState.NotAvailable) {\n newGroup.groupErrorMessage = this.props.resources.noAvailableDateError;\n this.setError(newGroup.groupErrorMessage, false);\n }\n dailyGroupingResults.forEach(value => {\n if (value.StartDateTime && (value.AvailableCapacity || 0) > 0) {\n newGroup.availableDates.push(getUTCDateWithoutTime(value.StartDateTime));\n }\n });\n\n if (selectedDate) {\n let timeslotResults: PickupTimeslotAvailability[] = [];\n try {\n const searchCriteria: PickupTimeslotAvailabilitySearchCriteria = {\n DeliveryModeCode: newGroup.deliveryMode,\n StoreId: newGroup.pickupStoreId,\n StartDate: selectedDate,\n EndDate: selectedDate,\n SearchOptionValue: 2 // Test runtime does not recognize PickupTimeslotAvailabilitySearchOption.All\n };\n timeslotResults = await getEstimatedPickupTimeslotAvailabilitiesAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {}, bypassCache: 'get' },\n searchCriteria);\n } catch (error) {\n this.props.telemetry.error(error);\n }\n newGroup.availableTimeslots = timeslotResults.filter(value => (value.AvailableCapacity || 0) > 0);\n }\n pickupGroups.push(newGroup);\n }\n }\n\n const filteredPickupGroups = pickupGroups.filter(group => group.availabilityState === PickupTimeslotAvailabilityState.Available ||\n group.availabilityState === PickupTimeslotAvailabilityState.NotAvailable);\n\n if (!ArrayExtensions.hasElements(filteredPickupGroups)) {\n this.props.context.telemetry.error('Data is not ready or pickup group is empty, module wont render.');\n }\n this.isLoading = false;\n this.setState({ pickupGroups: filteredPickupGroups });\n };\n\n @action\n private readonly updateCartLinePickupDateTimeslot = async (): Promise => {\n if (!this.validateTimeslot()) {\n return;\n }\n const { resources } = this.props;\n let lineSpecs: LineDeliverySpecification[] = [];\n\n this.state.pickupGroups.forEach(group => {\n lineSpecs = lineSpecs.concat(group.lineDeliverySpecs);\n });\n\n this.clearError();\n this.onPending();\n\n try {\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const response = await checkoutState.checkoutCart.updateCartLinePickupDateTimeslot({ lineDeliverySpecifications: lineSpecs });\n\n if (response.status === 'FAILED') {\n this.setError(resources.genericErrorMessage);\n } else {\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n };\n\n private readonly getProductsByCartLines = async (channelId: number, cartLines: CartLine[]): Promise => {\n const actionContext = this.props.context.actionContext;\n const productInputs = cartLines.filter(line => !ObjectExtensions.isNullOrUndefined(line.ProductId)).map(line => new ProductInput(line.ProductId || 0, actionContext.requestContext.apiSettings, channelId));\n return getSimpleProducts(productInputs, actionContext);\n };\n\n private readonly validateTimeslot = (): boolean => {\n let validationResult = true;\n this.state.pickupGroups.forEach(group => {\n switch (group.availabilityState) {\n case PickupTimeslotAvailabilityState.NotAvailable:\n // Need customer to select another store in this case\n validationResult = false;\n break;\n case PickupTimeslotAvailabilityState.Available:\n if (!group.selectedDate || !group.selectedTimeslot) {\n if (!group.selectedDate) {\n group.dateErrorMessage = this.props.resources.pickupDateRequired;\n }\n if (!group.selectedTimeslot) {\n group.timeslotErrorMessage = this.props.resources.pickupTimeslotRequired;\n }\n this.setError(this.props.resources.pickupDateTimeslotRequired, false);\n validationResult = false;\n } else {\n group.dateErrorMessage = undefined;\n group.timeslotErrorMessage = undefined;\n }\n break;\n\n // We consider timeslot not defined as fallback case\n case PickupTimeslotAvailabilityState.NotDefined:\n default:\n }\n });\n\n return validationResult;\n };\n\n private readonly getStoreName = (orgUnitLocation: OrgUnitLocation | undefined, cartLine: CartLine): string => {\n return orgUnitLocation?.OrgUnitName || cartLine.ShippingAddress?.Name || cartLine.FulfillmentStoreId || '';\n };\n\n private readonly canPickup = (): boolean => {\n return ArrayExtensions.hasElements(this.state.pickupGroups);\n };\n\n private readonly isPickupTimeSlotSet = (): boolean => {\n return ArrayExtensions.hasElements(this.state.pickupGroups) &&\n this.state.pickupGroups.every(group => !ObjectExtensions.isNullOrUndefined(group.selectedTimeslot?.StartDateTime) && !ObjectExtensions.isNullOrUndefined(group.selectedTimeslot?.EndDateTime));\n };\n\n private readonly getCartLinesforPickup = (): CartLine[] => {\n return this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(line => this.isPickupLine(line)) || [];\n };\n\n private readonly isPickupMode = (deliveryMode: string | undefined): boolean => {\n const pickupDeliveryModeCode = this.props.context.request.channel?.PickupDeliveryModeCode;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props?.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)?.IsEnabled;\n if (retailMultiplePickUpOptionEnabled && deliveryMode !== undefined) {\n const pickupDeliveryMode = channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.some(pickupMode => pickupMode === deliveryMode);\n return pickupDeliveryMode !== undefined ? pickupDeliveryMode : false;\n }\n return deliveryMode !== undefined && pickupDeliveryModeCode !== undefined && (deliveryMode === pickupDeliveryModeCode);\n };\n\n private readonly isPickupLine = (line: CartLine): boolean => {\n return this.isPickupMode(line.DeliveryMode) && line.FulfillmentStoreId !== undefined && !isNullOrWhiteSpace(line.FulfillmentStoreId);\n };\n\n private readonly getPickupModeDescription = (resourceString: string, deliveryMode?: string, deliveryOptions?: ProductDeliveryOptions[], product?: SimpleProduct): string => {\n let deliveryOption: string = resourceString;\n if (ArrayExtensions.hasElements(deliveryOptions) && product !== undefined) {\n let foundProductDeliveryOption;\n foundProductDeliveryOption = deliveryOptions?.find((deliveryO) => {\n return deliveryO && deliveryO.ProductId === product.RecordId;\n });\n const deliveryDesc = foundProductDeliveryOption?.DeliveryOptions ? foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === deliveryMode)?.Description : resourceString;\n if (deliveryDesc !== undefined) {\n deliveryOption = deliveryDesc;\n }\n }\n return deliveryOption;\n };\n\n private readonly getPickupTimeslotAvailabilityState = (dailyResult: PickupTimeslotAvailability[]) => {\n let state: PickupTimeslotAvailabilityState = PickupTimeslotAvailabilityState.None;\n if (!ArrayExtensions.hasElements(dailyResult)) {\n state = PickupTimeslotAvailabilityState.NotDefined;\n } else if (dailyResult.every(date => (date.AvailableCapacity || 0) <= 0)) {\n state = PickupTimeslotAvailabilityState.NotAvailable;\n } else {\n state = PickupTimeslotAvailabilityState.Available;\n }\n return state;\n };\n}\n\nexport default CheckoutPickup;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport checkoutStateDataAction from './checkout-state-data-action';\n\nexport * from './checkout-state';\nexport * from './checkout-state-data-action';\nexport * from './module-state-manager';\n\nexport { checkoutStateDataAction };\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { HtmlHeadInclude, IAny, IGeneric } from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { IDefaultPageSummaryData } from './default-page-summary.data';\nimport { IDefaultPageSummaryProps } from './default-page-summary.props.autogenerated';\n\n/**\n *\n * DefaultPageSummaryMetadata component.\n * @extends {React.PureComponent}\n */\nclass DefaultPageSummary extends React.PureComponent> {\n public render(): JSX.Element {\n if (this.props.data.pageSummary.result === undefined) {\n throw new Error('PageSummaryData input to page-summary is undefined. Unable to generate page-summary');\n }\n let {\n data: {\n pageSummary: {\n result: { title, description, keywords, sharingImageUrl, faviconUrl }\n }\n }\n } = this.props;\n\n const {\n config,\n context,\n data: {\n pageSummary: {\n result: { canonicalUrl }\n }\n }\n } = this.props;\n\n // Override values coming from data action if config values are provided\n title = config.title || title;\n description = config.description || description;\n keywords = config.keywords || keywords;\n sharingImageUrl = (config.sharingImage && config.sharingImage.src) || sharingImageUrl;\n faviconUrl = config.faviconUrl || faviconUrl;\n\n const pageTitle = this._constructPageTitle(title, context && context.request && context.request.app);\n return (\n <>\n \n {pageTitle && \n {pageTitle}\n }\n {description && }\n {keywords && }\n {canonicalUrl && }\n {faviconUrl && }\n \n {!config.disableOgTags && this._renderOgTags(pageTitle, description, sharingImageUrl)}\n {!config.disableTwitterTags && this._renderTwitterTags(pageTitle, description, sharingImageUrl)}\n \n );\n }\n\n private _renderOgTags(title: string | undefined, description: string | undefined, sharingImageUrl: string | undefined): JSX.Element {\n return (\n \n {title && }\n {description && }\n {sharingImageUrl && }\n \n \n );\n }\n\n private _renderTwitterTags(\n title: string | undefined,\n description: string | undefined,\n sharingImageUrl: string | undefined\n ): JSX.Element {\n return (\n \n {title && }\n {description && }\n {sharingImageUrl && }\n \n \n );\n }\n\n private _constructPageTitle(title: string | undefined, app: IGeneric): string | undefined {\n if (!title) {\n title = '';\n }\n\n const moduleConfig = this.props.config;\n if (moduleConfig && moduleConfig.ignoreTitleSuffixPrefix) {\n return title;\n }\n\n const appConfig = app && app.platform;\n if (appConfig) {\n if (appConfig.pageTitlePrefix) {\n title = (appConfig.pageTitlePrefix as string) + title;\n }\n if (appConfig.pageTitleSuffix) {\n title += (appConfig.pageTitleSuffix as string);\n }\n }\n\n return title;\n }\n}\n\nexport default DefaultPageSummary;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\n// TODO: Current build require at least one tsx file\nexport default () =>
;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IModule } from '@msdyn365-commerce/core';\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 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 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 // It is container module\n const method = allMatched ? 'every' : 'some';\n return module.childIds[method](childId => this._validateContainer(childId, source, allMatched, skipSkippableItem));\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 = (id: string, source: Partial, allMatched?: boolean, skipSkippableItem?: boolean): 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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\n ICommerceApiSettings, ICreateActionContext, isEmptyOrNullObject\n} from '@msdyn365-commerce/core';\nimport { getCheckoutState, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport {\n getCardPaymentAcceptPointAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n CardPaymentAcceptPoint\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\nimport get from 'lodash/get';\n\nexport interface IGetCardPaymentAcceptPointInput {\n showBillingAddress?: boolean;\n paymenTenderType?: string;\n apiSettings: ICommerceApiSettings;\n}\n\n/**\n * GetCardPaymentAcceptPointInput - Input for create GetCardPaymentAcceptPoint.\n */\nexport class GetCardPaymentAcceptPointInput implements IActionInput {\n public showBillingAddress?: boolean;\n\n public paymenTenderType?: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(input: IGetCardPaymentAcceptPointInput) {\n this.showBillingAddress = input.showBillingAddress;\n this.paymenTenderType = input.paymenTenderType;\n this.apiSettings = input.apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`CardPaymentAcceptPoint${this.paymenTenderType ? `-${this.paymenTenderType}` : ''}`, this.apiSettings);\n\n public getCacheObjectType = () => 'CardPaymentAcceptPoint';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport const createCheckoutPaymentInstrumentInput = (inputData: ICreateActionContext) => {\n // @ts-expect-error\n const { showBillingAddress, paymenTenderType } = inputData.config;\n const getCardPaymentAcceptPointInput = {\n showBillingAddres: showBillingAddress,\n paymenTenderType,\n apiSettings: inputData.requestContext.apiSettings\n };\n\n return new GetCardPaymentAcceptPointInput(getCardPaymentAcceptPointInput);\n};\n\n/**\n * Calls the Retail API and returns a cart object based on the passed GetCartInput.\n * @param input\n * @param ctx\n */\nexport async function getCardPaymentAcceptPointAction(\n input: GetCardPaymentAcceptPointInput,\n ctx: IActionContext\n): Promise {\n // If no cart ID is provided in input, we need to create a cart object\n if (!input) {\n ctx.telemetry.exception(new Error('[getCardPaymentAcceptPointAction] No valid Input was provided, failing'));\n throw new Error('[getCardPaymentAcceptPointAction] No valid Input was provided, failing');\n }\n\n const { showBillingAddress, paymenTenderType } = input;\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n if (\n isEmptyOrNullObject(checkoutState) ||\n isEmptyOrNullObject(checkoutState.checkoutCart) ||\n isEmptyOrNullObject(checkoutState.checkoutCart.cart)\n ) {\n ctx.telemetry.exception(new Error('[getCardPaymentAcceptPointAction] Unable to get cart'));\n throw new Error('[getCardPaymentAcceptPointAction] Unable to get cart');\n }\n\n if (!checkoutState.checkoutCart.cart.CartLines || checkoutState.checkoutCart.cart.CartLines.length === 0) {\n ctx.telemetry.exception(new Error('[getCardPaymentAcceptPointAction] Cart is empty'));\n throw new Error('[getCardPaymentAcceptPointAction] Cart is empty');\n }\n\n const requestUrl =\n typeof ctx.requestContext.url.requestUrl === 'string' ? new URL(ctx.requestContext.url.requestUrl) : ctx.requestContext.url.requestUrl;\n const origin = get(window, 'location.origin') || requestUrl.origin;\n\n const cardPaymentAcceptSettings = {\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardPaymentAcceptSettings',\n HostPageOrigin: origin,\n AdaptorPath: `${origin}/Connectors/` || origin,\n CardPaymentEnabled: false,\n CardTokenizationEnabled: true,\n ...(!showBillingAddress && { HideBillingAddress: true }),\n ...(paymenTenderType && { TenderTypeId: paymenTenderType }),\n PaymentAmount: 0\n };\n\n return getCardPaymentAcceptPointAsync(\n { callerContext: ctx, bypassCache: 'get' },\n checkoutState.checkoutCart.cart.Id,\n cardPaymentAcceptSettings,\n []\n )\n .then(cardPaymentAcceptPoint => {\n if (!cardPaymentAcceptPoint.AcceptPageUrl && !cardPaymentAcceptPoint.AcceptPageContent) {\n throw new Error(\n '[getCardPaymentAcceptPointAction] Payment Accept Page has neither return AcceptPageUrl nor AcceptPageContent in updatePaymentAcceptPageData'\n );\n }\n return cardPaymentAcceptPoint;\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('Unable to get Card Payment Accept Point');\n throw error;\n });\n}\n\nexport const getCardPaymentAcceptPointActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce/checkout-payment-instrument/get-card-payment-accept-point',\n action: >getCardPaymentAcceptPointAction,\n input: createCheckoutPaymentInstrumentInput\n});\n\nexport default getCardPaymentAcceptPointActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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\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: { applyGiftCardButton, giftCardFormLabel, giftCardNumberLabel, giftCardPinLabel, giftCardExpLabel,\n giftCardAlertLabel, giftCardPinPlaceholderText, giftCardExpPlaceholderText }\n } = options;\n\n const onApply = async (e: React.SyntheticEvent): Promise => {\n e.preventDefault();\n await onApplyGiftCard();\n };\n\n const onChangeNumber = (e: React.ChangeEvent) => {\n const value = (e.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n };\n\n const onChangePin = (e: React.ChangeEvent) => {\n const value = (e.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n };\n\n // Need to filter out the month and year\n const onChangeExp = (e: React.ChangeEvent) => {\n const value = (e.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n };\n\n const formProps = {\n className: classnames('ms-checkout-gift-card__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApply,\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. All rights reserved.\n * See License.txt 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 * 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 const onRemove = (): void => {\n onRemoveGiftCard(giftCard.Id || '');\n };\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 \n {balance}\n \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. All rights reserved.\n * See License.txt 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 => 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. All rights reserved.\n * See License.txt 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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport {\n getGiftCardAsync, getTenderTypesAsync, resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType, CardTypeInfo, GiftCard, RetailOperation, TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { computed, 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';\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\nconst enum 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 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 @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 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;\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 @computed get isPaymentVerificationRedirection(): boolean {\n const { requestFormData, query } = this.props.context.request;\n return !!((requestFormData && query && query.pv === '1'));\n }\n\n public componentDidMount(): void {\n when(\n () => this.isDataReady,\n () => {\n this.init();\n }\n );\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 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\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.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n }\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 (!this.props.context.request.user.isAuthenticated && this.props.context.app.config.giftCardSupported !== 'external') {\n return false;\n }\n return this.couldPaidByGiftCard();\n };\n\n private readonly onEdit = (): void => {\n // Show add gift card form\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = (): void => {\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = (): void => {\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 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 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({ giftCard, additionalProperties: { Pin: giftCardPin, ExpirationDate: giftCardExp, TenderTypeId: tenderTypeId } });\n this.clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false\n });\n return Promise.resolve();\n }\n const input =\n 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\n };\n\n private readonly findGiftcardTenderTypes = (tenderTypes: TenderType[], operationId: RetailOperation, giftcardType: string): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(tenderType => (tenderType.OperationId === operationId && tenderType.ConnectorId === ''));\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(tenderType => (tenderType.OperationId === operationId && tenderType.ConnectorId !== ''));\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 (giftCardNumber: string, giftCardPin: string, giftCardExp: string, isPinRequired: boolean | undefined, isExpRequired: boolean | undefined, tenderTypeId: string | undefined): 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(error => {\n throw error;\n });\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n const internalGiftcardTenderTypes = this.findGiftcardTenderTypes(tenderTypes, OPERATIONS.PayGiftCertificate, SupportedGiftCardType.Internal);\n const externalGiftcardTenderTypes = this.findGiftcardTenderTypes(tenderTypes, OPERATIONS.PayGiftCertificate, SupportedGiftCardType.External);\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 const GIFTCARDTYPE = 7 as CardType.GiftCard; // This is a workaround. ts-jest doesn't support 'const enum'\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, GIFTCARDTYPE)\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. All rights reserved.\n * See License.txt 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;\n\n @computed public get tokenizedPaymentCard(): Readonly {\n return this._tokenizedPaymentCard;\n }\n\n @observable private _tenderLine?: TenderLine;\n\n @computed public get tenderLine(): Readonly {\n return this._tenderLine;\n }\n\n @observable private _billingAddress?: Address;\n\n @computed public get billingAddress(): Readonly

{\n return this._billingAddress;\n }\n\n @observable private _shippingAddress?: Address;\n\n @computed public get shippingAddress(): Readonly
{\n return this._shippingAddress;\n }\n\n @observable private _cardPrefix?: string;\n\n @computed public get cardPrefix(): Readonly {\n return this._cardPrefix;\n }\n\n @observable private _giftCards: GiftCard[] = [];\n\n @computed public get giftCards(): Readonly {\n return this._giftCards;\n }\n\n @observable private _giftCardExtends: IGiftCardExtend[] = [];\n\n @computed public get giftCardExtends(): Readonly {\n return this._giftCardExtends;\n }\n\n @observable private _loyaltyCardNumber?: string;\n\n @computed public get loyaltyCardNumber(): Readonly {\n return this._loyaltyCardNumber;\n }\n\n @observable private _loyaltyAmount: number = 0;\n\n @computed public get loyaltyAmount(): Readonly {\n return this._loyaltyAmount;\n }\n\n @observable private _guestCheckoutEmail: string = '';\n\n @computed public get guestCheckoutEmail(): Readonly {\n return this._guestCheckoutEmail;\n }\n\n @observable private _isTermsAndConditionAccepted: boolean = false;\n\n @computed public get isTermsAndConditionAccepted(): Readonly {\n return this._isTermsAndConditionAccepted;\n }\n\n @observable private _customerAccountAmount: number = 0;\n\n @computed public get customerAccountAmount(): Readonly {\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): 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. All rights reserved.\n * See License.txt 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 {\n Checkout,\n CheckoutView\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAddContactInfo, ICheckoutGuestProfileViewProps, IShowContactInfo } from './checkout-guest-profile';\n\nexport const ShowContactInfo: React.FC = ({ showInfoProps, email, editButton }) => (\n \n {email}\n {editButton}\n \n);\n\nexport const AddContactInfo: React.FC = ({\n addFormProps,\n submitButton,\n cancelButton,\n inputGroupProps,\n label,\n error,\n input\n}) => (\n \n \n {label}\n {error}\n {input}\n \n {submitButton}\n {cancelButton}\n \n);\n\nconst CheckoutGuestProfileView: React.FC = ({ moduleProps, showContactInfo, addContactInfo }) => {\n return (\n \n {showContactInfo && }\n {addContactInfo && }\n \n );\n};\n\nexport default CheckoutGuestProfileView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutLoyaltyAdd, ICheckoutLoyaltyRewardPoint, ICheckoutLoyaltyShow,\n ICheckoutLoyaltyViewProps\n} 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\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 {\n showAppliedAmount &&\n \n {loyaltyAmountAppliedText}\n {loyaltyAmountAppliedPrice}\n {loyaltyAmountRemoveButton}\n \n }\n \n \n );\n};\n\nconst ShowCheckoutLoyalty: React.FC = ({\n heading,\n coveredAmountText,\n amount\n}) => {\n\n return (\n <>\n {heading}\n {coveredAmountText}\n {amount}\n \n );\n};\n\nconst CheckoutLoyaltyView: React.FC = props => {\n const { checkoutLoyalty,\n viewState,\n showLoyalty,\n addLoyalty } = props;\n\n return (\n \n {viewState.isShowLoyalty && }\n {viewState.isShowAddLoyalty && }\n \n );\n};\n\nexport default CheckoutLoyaltyView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } 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 }) => (\n \n {label}\n \n);\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 = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems, lineItemWraper, lineItemWraperIcon }) => (\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 = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip, itemsForEmail, itemsGroupWithMulitplePickupMode }) => (\n \n \n {heading}\n {editLink}\n \n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\n {itemsGroupWithMulitplePickupMode !== undefined ? itemsGroupWithMulitplePickupMode.map((item, index) => {\n return ;\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.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 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 } = props;\n\n return (\n \n {!hasSalesOrder && \n {title}\n }\n {!hasSalesOrder &&\n \n {loading}\n {alert}\n {canShow && (\n <>\n \n {guidedForm}\n \n {termsAndConditions}\n \n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n {!hasInvoiceLine ? orderSummary && : invoicePaymentSummary && }\n \n \n {termsAndConditions}\n \n {placeOrderButton}\n {keepShoppingButton}\n \n {lineItems && }\n \n \n {termsAndConditions}\n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n )}\n }\n {hasSalesOrder && orderConfirmation}\n \n );\n};\n\nexport default CheckoutView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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: {\n totalAmountLabel,\n invoiceLabel,\n invoiceSummaryTitle\n },\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:

\n { invoiceSummaryTitle }\n

,\n lines: checkoutCart?.hasInvoiceLine ? InvoiceSummary({\n orderTotalLabel: totalAmountLabel,\n invoiceLabel,\n cart,\n context,\n typeName,\n telemetry,\n id,\n checkoutState: checkout.result\n }) : undefined\n };\n\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { Cart, CartLineValidationResults } from '@msdyn365-commerce/retail-proxy';\nimport { updateLineDeliverySpecificationsAsync, validateForCheckoutAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { DeliveryPreferenceType, LineDeliverySpecification } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { getAvailabilitiesForCartLineItems, ProductAvailabilitiesForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, TelemetryConstant, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\nimport { computed, 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';\n\nexport * from './components/get-line-items';\nexport * from './components/get-order-summary';\n\ntype DeviceType = 'Mobile';\n\ninterface ICheckoutState {\n errorMessage: string;\n isValidationPassed: boolean;\n}\n\nexport interface ICheckoutViewProps extends ICheckoutProps {\n className: string;\n canShow?: boolean;\n isEmptyCart?: boolean;\n isConsentGiven?: boolean;\n hasError?: 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\nexport interface ICheckoutModuleProps extends ICheckoutProps, IModuleStateProps { }\n\n/**\n *\n * CheckoutContainer component.\n * @extends {React.Component}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass Checkout extends React.Component {\n\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 // If isTermsAndConditionAccepted is undefined means TermsAndCondition module is not added to page and we should able to place order.\n return this.props.moduleState.isReady && (isTermsAndConditionAccepted === undefined || isTermsAndConditionAccepted) && this.state.errorMessage === '';\n }\n\n @computed get isCartReady(): boolean {\n return !!this.props.data.checkout.result?.checkoutCart?.cart &&\n this.props.data.customerInformation.status !== 'LOADING' &&\n this.props.data.featureState.status !== 'LOADING';\n }\n\n public state: ICheckoutState = {\n errorMessage: '',\n isValidationPassed: false\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\n\n public componentDidMount(): void {\n const {\n resources: { genericErrorMessage }\n } = this.props;\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\n public render(): JSX.Element {\n const {\n moduleState,\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\n resources\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 checkoutInformation = this.getSlotItems('checkoutInformation');\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 &&\n this.props.slots.termsAndConditions.length > 0 &&\n 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 let viewProps: ICheckoutViewProps = {\n ...this.props,\n className: checkoutClass,\n isEmptyCart: this.isEmptyCart,\n isConsentGiven,\n hasError: this.hasError,\n hasSalesOrder: this.props.data.checkout && this.props.data.checkout.result !== undefined && 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: this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0 ? this.props.slots.orderConfirmation[0] : 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: '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 && (\n this.renderMsdyn365Text(checkoutHeading)\n )\n };\n\n if (!isConsentGiven) {\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 public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\n return (\n \n );\n }\n\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.checkoutHeading!.text = event.target.value;\n\n private readonly isLoading = (): boolean => {\n return !this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart || !this.state.isValidationPassed;\n };\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 private readonly onPlaceOrder = async (): Promise => {\n const {\n resources: { checkoutOutOfStockErrorMessage, genericErrorMessage, invalidCartVersionErrorMessage },\n context: { actionContext, app: { config: { enableStockCheck = false } } },\n slots: { orderConfirmation },\n data: { checkout }\n } = this.props;\n\n // If hasInvoiceLine is true, no inventory check\n if (!this.props.data.checkout.result?.checkoutCart.hasInvoiceLine && enableStockCheck && await this.isOverMaxQuantity((await checkout).checkoutCart.cart)) {\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 await placeOrder(actionContext, this.props.data.checkout.result, this.props.data.products.result, !hasOrderConfirmation, updatedCartVersion).catch(error => {\n let errorMessage = genericErrorMessage;\n\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n errorMessage = invalidCartVersionErrorMessage;\n }\n\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n });\n }\n };\n\n // Update receipt email address for electronic cart line\n // return the updated cart version\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 { 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 ).then(updatedCart => {\n updatedCartVersion = updatedCart.Version;\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 // Return true if any product in the cart is over its max quantity\n private readonly isOverMaxQuantity = async (cart: Cart): 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 ).then(productInventoryInformation => {\n cart.CartLines?.map((cartline) => {\n // If cartline is electronic delivery, then no inventory check\n if (cartline.DeliveryMode !== emailDeliveryModeCode && productInventoryInformation && productInventoryInformation.length > 0) {\n const foundProductAvailability = productInventoryInformation.find((productInventory) => {\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n\n if (!(foundProductAvailability?.IsProductAvailable && foundProductAvailability.ProductAvailableQuantity.AvailableQuantity !== undefined &&\n cartline.Quantity && cartline.Quantity <= foundProductAvailability.ProductAvailableQuantity.AvailableQuantity)) {\n isOverMaxQuantity = true;\n }\n }\n });\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 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 private readonly onContainerReady = (): void => {\n this.getActiveChildModuleStates().forEach(state => {\n state.isReady && state.onContainerReady && state.onContainerReady();\n });\n };\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 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 = this.props.data.featureState.result\n ?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')?.IsEnabled || false;\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n const customerInfo = this.props.data.customerInformation.result;\n\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings = defaultOrderQuantityLimitsFeatureConfig === 'all' ||\n (customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b)));\n if (isOrderQuantityLimitsFeatureEnabledInHq && isOrderQuantityLimitsFeatureEnabledInSiteSettings) {\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?.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\nexport default Checkout;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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\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: { balanceCheckButton, giftCardFormLabel, giftCardNumberLabel, giftCardPinLabel, giftCardExpLabel,\n giftCardAlertLabel, giftCardPinPlaceholderText, giftCardExpPlaceholderText }\n } = options;\n\n const onApply = async (e: React.SyntheticEvent): Promise => {\n e.preventDefault();\n await onApplyGiftCard();\n };\n\n const onChangeNumber = (e: React.ChangeEvent) => {\n const value = (e.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n };\n\n const onChangePin = (e: React.ChangeEvent) => {\n const value = (e.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n };\n\n const onChangeExp = (e: React.ChangeEvent) => {\n const value = (e.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n };\n\n const formProps = {\n className: classnames('ms-gift-card-balance-check__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApply,\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. All rights reserved.\n * See License.txt 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 {' '}\n (\n {giftCardAvailableBalanceLabel}\n {' '}\n \n {balance}\n \n )\n \n );\n\n return {\n itemProps,\n id: giftCard && giftCard.Id,\n selectedGiftCard\n };\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { getGiftCardAsync, getTenderTypesAsync, resolveCardTypesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType, CardTypeInfo, GiftCard, RetailOperation, 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\nconst enum 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 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: this.state.giftCard && 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 (!this.props.context.request.user.isAuthenticated && this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External) {\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 =\n 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\n private readonly _findGiftcardTenderTypes = (tenderTypes: TenderType[], operationId: RetailOperation, giftcardType: string): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(tenderType => (tenderType.OperationId === operationId && tenderType.ConnectorId === ''));\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(tenderType => (tenderType.OperationId === operationId && tenderType.ConnectorId !== ''));\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 (giftCardNumber: string, giftCardPin: string, giftCardExp: string, isPinRequired: boolean | undefined, isExpRequired: boolean | undefined, tenderTypeId: string | undefined): 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(error => {\n throw error;\n });\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const internalGiftcardTenderTypes = this._findGiftcardTenderTypes(tenderTypes, OPERATIONS.PayGiftCertificate, SupportedGiftCardType.Internal);\n const externalGiftcardTenderTypes = this._findGiftcardTenderTypes(tenderTypes, OPERATIONS.PayGiftCertificate, SupportedGiftCardType.External);\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 const GIFTCARDTYPE = 7 as CardType.GiftCard; // This is a workaround. ts-jest doesn't support 'const enum'\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, GIFTCARDTYPE)\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. All rights reserved.\n * See License.txt 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","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutSectionContainerItem, ICheckoutSectionContainerViewProps } from './checkout-section-container';\n\nconst ItemComponent: React.FC = ({ loading, itemProps, item }) => (\n <>\n {loading}\n \n {item}\n \n \n);\n\nconst CheckoutSectionContainerView: React.FC = ({ checkoutPlainContainerProps, items }) => (\n \n {items.map(item => (\n \n ))}\n \n);\n\nexport default CheckoutSectionContainerView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = ({ formProps, label, inputPinLabel, inputExpLabel, alert, inputProps, inputNumProps,\n inputPinProps, inputExpProps, inputNumber, inputPin, inputExp, applyButton, supportExternalGiftCard, showGiftCardPinInput, showGiftCardExpInput, alertFieldLabel }) => (\n \n {alert}\n {supportExternalGiftCard ? \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput &&\n \n {inputPinLabel}\n {inputPin}\n }\n {showGiftCardExpInput &&\n \n {inputExpLabel}\n {inputExp}\n }\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n : <>\n {label}\n {inputNumber}\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, showGiftCard, addGiftCard } = props;\n return (\n \n {showGiftCard && }\n {addGiftCard && }\n \n );\n};\n\nexport default CheckoutGiftCardView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IAddContactInfoInput {\n inputRef?: React.RefObject;\n hasError: boolean;\n email: string;\n resources: {\n emailLabel: string;\n emailErrortext: string;\n saveBtnLabel: string;\n cancelBtnLabel: string;\n };\n canSubmit: boolean;\n canCancel: boolean;\n onChange(email: string): void;\n onSubmit(): void;\n onCancel(): void;\n}\n\nexport interface IAddContactInfo {\n addFormProps: INodeProps;\n submitButton: React.ReactNode;\n cancelButton: React.ReactNode;\n inputGroupProps: INodeProps;\n label: React.ReactNode;\n error: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst getAddContactInfo = ({\n hasError,\n inputRef,\n email,\n canSubmit,\n canCancel,\n onChange,\n onSubmit,\n onCancel,\n resources: { emailLabel, emailErrortext, saveBtnLabel, cancelBtnLabel }\n}: IAddContactInfoInput): IAddContactInfo => {\n const onInputChange = (e: React.ChangeEvent): void => {\n onChange(e.target.value || '');\n };\n\n return {\n addFormProps: { className: 'ms-checkout-guest-profile__add-contact-info' },\n submitButton: canSubmit && (\n \n {saveBtnLabel}\n \n ),\n cancelButton: canCancel && (\n \n {cancelBtnLabel}\n \n ),\n inputGroupProps: { className: classnames('ms-checkout-guest-profile__input', { 'is-invalid': hasError }) },\n label: (\n \n ),\n error: hasError && (\n \n {emailErrortext}\n \n ),\n input: (\n \n )\n };\n};\n\nexport default getAddContactInfo;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IShowContactInfoInput {\n canEdit: boolean;\n email: string;\n resources: {\n editBtnLabel: string;\n };\n onEdit(): void;\n}\n\nexport interface IShowContactInfo {\n showInfoProps: INodeProps;\n email: React.ReactNode;\n editButton?: React.ReactNode;\n}\n\nconst getContactInfo = ({ canEdit, email, resources: { editBtnLabel }, onEdit }: IShowContactInfoInput): IShowContactInfo => ({\n showInfoProps: { className: 'ms-checkout-guest-profile__selected-item' },\n email: \n {email}\n ,\n editButton: canEdit && (\n \n {editBtnLabel}\n \n )\n});\n\nexport default getContactInfo;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutGuestProfileData } from './checkout-guest-profile.data';\nimport { ICheckoutGuestProfileProps } from './checkout-guest-profile.props.autogenerated';\nimport getAddContactInfo, { IAddContactInfo } from './components/get-add-contact-info';\nimport getShowContactInfo, { IShowContactInfo } from './components/get-show-contact-info';\n\nexport * from './components/get-add-contact-info';\nexport * from './components/get-show-contact-info';\n\ninterface ICheckoutGuestProfileState {\n email: string;\n}\n\nexport interface ICheckoutGuestProfileModuleProps extends ICheckoutGuestProfileProps, IModuleStateProps { }\n\nexport interface ICheckoutGuestProfileViewProps extends ICheckoutGuestProfileProps, ICheckoutGuestProfileState {\n moduleProps: IModuleProps;\n showContactInfo?: IShowContactInfo;\n addContactInfo?: IAddContactInfo;\n\n onChange?(email: string): void;\n onEdit?(): void;\n onSubmit?(): void;\n onCancel?(): void;\n}\n\n/**\n *\n * CheckoutGuestProfile component.\n * @extends {React.PureComponent, ICheckoutGuestProfileState>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutGuestProfile extends React.Component {\n public state: ICheckoutGuestProfileState = {\n email:\n (this.props.context &&\n this.props.context.request &&\n this.props.context.request.user &&\n this.props.context.request.user.isAuthenticated &&\n this.props.context.request.user.emailAddress) ||\n ''\n };\n\n private readonly inputRef: 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 public componentDidMount(): void {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n }\n\n public render(): JSX.Element {\n const {\n config: { className },\n resources,\n moduleState: { isReady, hasError, hasExternalSubmitGroup }\n } = this.props;\n const email = (this.props.data.checkout.result && this.props.data.checkout.result.guestCheckoutEmail) || '';\n\n const viewProps: ICheckoutGuestProfileViewProps = {\n ...this.props,\n ...this.state,\n onChange: this.onChange,\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n\n moduleProps: {\n moduleProps: this.props,\n className: classnames('ms-checkout-guest-profile', className, isReady ? 'show' : 'add')\n },\n showContactInfo: isReady ? getShowContactInfo({\n canEdit: !hasExternalSubmitGroup,\n email,\n resources,\n onEdit: this.onEdit\n }) : undefined,\n addContactInfo: !isReady ? getAddContactInfo({\n email: this.state.email,\n hasError,\n resources,\n inputRef: this.inputRef,\n onChange: this.onChange,\n canSubmit: !hasExternalSubmitGroup,\n onSubmit: this.onSubmit,\n canCancel: !hasExternalSubmitGroup && !!email,\n onCancel: this.onCancel\n }) : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly init = async (): Promise => {\n const hasInvoiceLine = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n\n const emailOnCart = this.props.data.checkout.result?.checkoutCart.cart.ReceiptEmail;\n const email = hasInvoiceLine ? (this.props.context.request.user.emailAddress || '') : (emailOnCart || this.state.email);\n\n if (email) {\n await this.updateGuestProfile(email);\n }\n\n const isEmailValid = this.isEmailValid(email);\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n status: hasInvoiceLine ? 'disabled' : (email && isEmailValid ? 'ready' : 'updating'),\n hasError: !!email && !isEmailValid\n });\n };\n\n private readonly onChange = (rowEmail: string): void => {\n const email = (rowEmail || '').replace(new RegExp('[<>]', 'gi'), '');\n this.setState({ email });\n if (this.props.moduleState.hasError) {\n // Clear error during user updating the email\n this.props.moduleState.setHasError(false);\n }\n };\n\n private readonly isEmailValid = (email: string): boolean => {\n const regex = /^(([^\\s\"(),.:;<>@[\\\\\\]]+(\\.[^\\s\"(),.:;<>@[\\\\\\]]+)*)|(\".+\"))@((\\[(?:\\d{1,3}\\.){3}\\d{1,3}])|(([\\dA-Za-z\\-]+\\.)+[A-Za-z]{2,}))$/;\n return regex.test(email);\n };\n\n private readonly updateGuestProfile = async (newGuestCheckoutEmail: string): Promise => {\n if (this.props.data.checkout.result) {\n await this.props.data.checkout.result.updateGuestCheckoutEmail({ newGuestCheckoutEmail });\n this.setState({ email: newGuestCheckoutEmail });\n }\n };\n\n private readonly onEdit = (): void => {\n this.props.moduleState.onUpdating();\n };\n\n private readonly onSubmit = async (): Promise => {\n const { email } = this.state;\n const isValid = this.isEmailValid(email);\n if (!isValid) {\n this.props.moduleState.setHasError(true);\n\n // Get error, focus back on the input field\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n } else {\n this.props.moduleState.onReady();\n await this.updateGuestProfile(email);\n }\n };\n\n private readonly onCancel = (): void => {\n // Reset to the saved value\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const email = this.props.data.checkout.result.guestCheckoutEmail;\n if (!email) {\n // It has no saved email, set to status updating and request user to fill the email form\n this.props.moduleState.onUpdating();\n\n } else {\n // It has saved email, set to status ready\n this.setState({\n email\n });\n this.props.moduleState.setHasError(false);\n this.props.moduleState.onReady();\n }\n };\n}\n\nexport default CheckoutGuestProfile;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nconst Loading: React.FC = () =>
;\n\nexport default Loading;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutSectionContainerProps } from './checkout-section-container.props.autogenerated';\nimport LoadingComponent from './components/loading';\n\nexport interface ICheckoutSectionContainerModuleProps extends ICheckoutSectionContainerProps<{}>, IModuleStateProps {\n enableControl: boolean;\n}\n\nexport interface ICheckoutSectionContainerItem {\n id: string;\n loading?: React.ReactNode;\n itemProps: INodeProps;\n item: React.ReactNode;\n}\n\nexport interface ICheckoutSectionContainerViewProps extends ICheckoutSectionContainerProps<{}> {\n className: string;\n checkoutPlainContainerProps: IModuleProps;\n items: ICheckoutSectionContainerItem[];\n}\n\n/**\n *\n * CheckoutPlainContainer component.\n * @extends {React.Component}\n */\n@observer\nexport class CheckoutPlainContainer extends React.Component {\n public componentDidMount(): void {\n const items = this.getItems();\n const childIds = items.map((item: React.ReactNode) => get(item, 'props.id'));\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n childIds\n });\n\n reaction(\n () => this.props.moduleState.isReady,\n () => {\n this.onContainerReady();\n }\n );\n\n reaction(\n () => this.props.moduleState.shouldSubmitContainer,\n () => {\n this.onSubmit();\n }\n );\n }\n\n public componentDidUpdate(): void {\n if (!this.props.moduleState.hasExternalSubmitGroup) {\n return;\n }\n\n /**\n * Review all modules to updating status if one of the modules has error.\n */\n const { childIds, hasError, getModule } = this.props.moduleState;\n const hasReadyItems = childIds.some((childId: string) => {\n const state = getModule(childId);\n return !!state && state.isReady;\n });\n if (hasReadyItems && hasError) {\n this.onEdit();\n }\n }\n\n public render(): JSX.Element | null {\n const {\n enableControl,\n moduleState,\n config: { width }\n } = this.props;\n\n const items = this.getItems();\n if (items.length === 0) {\n this.props.context.telemetry.error('Checkout section content is empty, module wont render');\n return null;\n }\n\n const moduleClassName = classname(\n 'ms-checkout-section-container',\n {\n 'has-initialized': moduleState.hasInitialized,\n 'is-ready': moduleState.isReady,\n 'is-updating': !moduleState.isReady,\n container: width === 'container',\n 'col-12 fullwidth': width === 'fluid'\n },\n this.props.config.className\n );\n\n const viewProps: ICheckoutSectionContainerViewProps = {\n ...this.props,\n\n className: moduleClassName,\n checkoutPlainContainerProps: {\n moduleProps: this.props,\n className: moduleClassName\n },\n items: items.map((item: React.ReactNode) => {\n const childId = get(item, 'props.id');\n const state = moduleState.getModule(childId);\n\n // Modules has not completed initializing or it's disable\n const hidden = state.hasModuleState && (!state.hasInitialized || state.isDisabled || state.isSkipped);\n return {\n id: childId,\n loading: state.hasModuleState && !state.hasInitialized && ,\n itemProps: {\n 'data-type-name': state.typeName,\n className: classname('ms-checkout-section-container__item', {\n hidden,\n initialized: state.hasInitialized,\n disabled: state.isDisabled,\n skipped: state.isSkipped,\n ready: state.isReady,\n updating: state.isUpdating,\n pending: state.isPending\n })\n },\n item: React.cloneElement(item as React.ReactElement, { enableControl })\n };\n })\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly getItems = (): React.ReactNode[] => {\n const { slots } = this.props;\n return (slots && slots.primary && slots.primary.length && slots.primary) || [];\n };\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 private readonly clearError = (): void => {\n // Clear error before action, otherwise it will rise conflict;\n this.getActiveChildModuleStates().forEach(state => {\n state.hasError && state.setHasError(false);\n });\n };\n\n private readonly onSubmit = (): void => {\n this.clearError();\n this.getActiveChildModuleStates().forEach(state => {\n !state.isReady && state.onSubmit && state.onSubmit();\n });\n };\n\n private readonly onCancel = (): void => {\n this.clearError();\n this.getActiveChildModuleStates().forEach(state => {\n !state.isReady && state.onCancel && state.onCancel();\n });\n };\n\n private readonly onEdit = (): void => {\n this.getActiveChildModuleStates().forEach(state => {\n (state.isReady || state.isSkipped) && state.onEdit && state.onEdit();\n });\n };\n\n private readonly onContainerReady = (): void => {\n this.getActiveChildModuleStates().forEach(state => {\n state.isReady && state.onContainerReady && state.onContainerReady();\n });\n };\n}\n\nexport default withModuleState(CheckoutPlainContainer);\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 placeOrder(): Promise;\n}\n\nconst buttonsStates: React.Dispatch>[] = [];\n\nconst CheckoutPlaceOrderButton: React.FC = ({ checkoutBtnText, canPlaceOrder, placeOrder, telemetryContent }) => {\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 const onPlaceOrder = async () => {\n if (isBusy || !canPlaceOrder) {\n return;\n }\n buttonsStates.forEach(buttonSetState => {\n buttonSetState(true);\n });\n await placeOrder();\n buttonsStates.forEach(buttonSetState => {\n buttonSetState(false);\n });\n };\n return (\n \n {checkoutBtnText}\n \n );\n};\n\nexport default CheckoutPlaceOrderButton;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 },\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)?.IsEnabled;\n\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { orderSummaryHeading }\n } = input;\n orderSummaryHeading!.text = event.target.value;\n };\n\n return {\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\n heading: orderSummaryHeading && orderSummaryHeading.text && (\n \n ),\n lines: showLineItems ? 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 }) : undefined\n };\n\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nexport * from './checkout';\nexport * from './empty-active-cart';\nexport * from './place-order';\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IForm, IItem } from './components';\nimport { IGiftCardBalanceCheckViewProps } from './gift-card-balance-check';\n\nexport const Form: React.FC = ({ formProps, label, inputPinLabel, inputExpLabel, alert, inputProps, inputNumProps,\n inputPinProps, inputExpProps, inputNumber, inputPin, inputExp, applyButton, supportExternalGiftCard, showGiftCardPinInput, showGiftCardExpInput, alertFieldLabel }) => (\n \n {alert}\n {supportExternalGiftCard ? \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput &&\n \n {inputPinLabel}\n {inputPin}\n }\n {showGiftCardExpInput &&\n \n {inputExpLabel}\n {inputExp}\n }\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n : <>\n {label}\n {inputNumber}\n }\n {applyButton}\n \n);\n\nexport const Item: React.FC = ({ itemProps, selectedGiftCard }) => (\n \n {selectedGiftCard}\n \n);\n\nconst GiftCardBalanceCheckView: React.FC = props => {\n const { giftCardBalanceCheckProps, form, item } = props;\n return (\n \n {form &&
}\n {item && }\n \n );\n};\n\nexport default GiftCardBalanceCheckView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyInput {\n className: string;\n type: string;\n value: string | number;\n min: number;\n max: number;\n ariaValueMax: number;\n ariaValueMin: number;\n ariaValueNow: number;\n id: string;\n step: string;\n onChange(event: React.ChangeEvent): void;\n onBlur(event: React.FocusEvent): void;\n}\n\nconst AdressInput: React.FC = ({\n className,\n type,\n value,\n min,\n max,\n step,\n ariaValueMax,\n ariaValueMin,\n ariaValueNow,\n onChange,\n onBlur,\n id\n}) => (\n\n \n);\n\nexport default AdressInput;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyLabelProps {\n className: string;\n text: string;\n htmlFor: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @param root0.htmlFor\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyLabel: React.FC = ({\n className,\n text,\n htmlFor\n}) => {\n\n return ();\n};\n\nexport default CheckoutLoyaltyLabel;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyTextProps {\n className: string;\n text?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyText: React.FC = ({\n className,\n text\n}) => {\n if (!text) {\n return null;\n }\n\n return (\n {text}\n );\n};\n\nexport default CheckoutLoyaltyText;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { callActionOrExecute } from '@msdyn365-commerce/retail-proxy';\nimport { createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { LoyaltyPointRedemptionEstimate, LoyaltyRewardPoint } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { GetLoyaltyTransactionEstimationInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Drawer, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyData } from './checkout-loyalty.data';\nimport { ICheckoutLoyaltyProps } from './checkout-loyalty.props.autogenerated';\nimport InputComponent from './components/checkout-loyalty-input';\nimport LabelComponent from './components/checkout-loyalty-label';\nimport TextComponent from './components/checkout-loyalty-text';\n\nexport interface ICheckoutLoyaltyState {\n dollarsApplied: number;\n isFetchingLoyaltyCard: boolean;\n}\n\nexport interface ICheckoutLoyaltyModuleProps extends ICheckoutLoyaltyProps, IModuleStateProps {}\n\nexport interface ICheckoutLoyaltyViewState {\n isShowLoyalty: boolean;\n isShowAddLoyalty: boolean;\n}\n\nexport interface ICheckoutLoyaltyShow {\n heading: React.ReactNode;\n coveredAmountText: React.ReactNode;\n amount: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyRewardPoint {\n checkoutLoyaltyRewardPoint: INodeProps;\n key: string;\n title: React.ReactNode;\n availablePointsText: React.ReactNode;\n activePoints: React.ReactNode;\n expiringPointsText: React.ReactNode;\n expiringPoints: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyAdd {\n heading: React.ReactNode;\n cardNumber: React.ReactNode;\n drawer: INodeProps;\n rewardPoints: ICheckoutLoyaltyRewardPoint[];\n loyaltyAmountContainer: INodeProps;\n appliedLoyaltyAmountContainer: INodeProps;\n loyaltyAmountLabel: React.ReactNode;\n loyaltyAmountInput: React.ReactNode;\n loyaltyAmountApplyButton: React.ReactNode;\n showAppliedAmount: boolean;\n loyaltyAmountAppliedText: React.ReactNode;\n loyaltyAmountAppliedPrice: React.ReactNode;\n loyaltyAmountRemoveButton: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyViewProps extends ICheckoutLoyaltyModuleProps {\n checkoutLoyalty: IModuleProps;\n viewState: ICheckoutLoyaltyViewState;\n showLoyalty: ICheckoutLoyaltyShow;\n addLoyalty: ICheckoutLoyaltyAdd;\n}\n\n/**\n *\n * CheckoutLoyalty component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n// eslint-disable-next-line react/require-optimization -- Existing code.\n@withModuleState\n@observer\nclass CheckoutLoyalty extends React.Component {\n private readonly _dialogToggleRef: React.RefObject | undefined;\n\n private readonly moduleClassName: string = 'ms-checkout-loyalty';\n\n private readonly _defaultLoyaltyPoints: number = 0;\n\n constructor(props: ICheckoutLoyaltyModuleProps) {\n super(props);\n this._dialogToggleRef = React.createRef();\n this._applyLoyaltyPoints = this._applyLoyaltyPoints.bind(this);\n this._removeLoyaltyPoints = this._removeLoyaltyPoints.bind(this);\n this._onInputChange = this._onInputChange.bind(this);\n this._onBlur = this._onBlur.bind(this);\n this.state = { dollarsApplied: this.maxDollars, isFetchingLoyaltyCard: false };\n }\n\n @computed get shouldPayLoyalty(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use loyalty when cart is not full of free items\n const amountDue = cart.TotalAmount || 0;\n return amountDue > 0;\n }\n\n @computed get isDataReady(): boolean {\n return (\n (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS' &&\n (this.props.data.loyaltyCard && this.props.data.loyaltyCard.status) !== 'LOADING' &&\n (this.props.data.loyaltyTransactionEstimation && this.props.data.loyaltyTransactionEstimation.status) !== 'LOADING'\n );\n }\n\n @computed get maxDollars(): number {\n return this.props.data.loyaltyTransactionEstimation.result &&\n this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints ? this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints : 0;\n }\n\n @computed get isPaymentVerificationRedirection(): boolean {\n const { requestFormData, query } = this.props.context.request;\n return !!(requestFormData && query && query.pv === '1');\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 && this.props.data.checkout.result.checkoutCart.cart,\n async () => {\n this._updateEstimate();\n }\n );\n\n reaction(\n () => this.props.data.loyaltyCard.result,\n async () => {\n this._updateLoyalty();\n }\n );\n }\n\n public render(): JSX.Element | null {\n const {\n resources,\n renderView,\n moduleState: { isReady }\n } = this.props;\n\n if (\n this.props.data.loyaltyCard &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n ) {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n const checkoutState = this.props.data.checkout.result;\n let isShowLoyalty = false;\n\n if (isReady) {\n if (!checkoutState || checkoutState.loyaltyAmount === 0) {\n return null;\n }\n isShowLoyalty = true;\n\n }\n\n const viewProps = {\n ...this.props,\n viewState: {\n isShowLoyalty,\n isShowAddLoyalty: !isReady\n },\n checkoutLoyalty: {\n moduleProps: this.props,\n className: classnames(\n this.moduleClassName,\n { [`${this.moduleClassName}__applied`]: isShowLoyalty },\n this.props.config.className\n )\n },\n showLoyalty: {\n heading: ,\n coveredAmountText: (\n \n ),\n amount: (\n \n )\n },\n addLoyalty: {\n heading: ,\n drawer: {\n tag: Drawer,\n className: `${this.moduleClassName}__drawer`,\n toggleButtonText: this._drawerHeader(),\n openGlyph: `${this.moduleClassName}__drawer-open`,\n closeGlyph: `${this.moduleClassName}__drawer-close`,\n glyphPlacement: 'end'\n },\n cardNumber: ,\n rewardPoints:\n loyaltyCard.RewardPoints &&\n loyaltyCard.RewardPoints.map((points, index) => {\n return this._renderPointSection(points, resources.availablePointsLabel, resources.expiringLoyaltyPointsLabel);\n }),\n loyaltyAmountContainer: {\n className: `${this.moduleClassName}__amount`\n },\n appliedLoyaltyAmountContainer: {\n className: `${this.moduleClassName}__applied-amount`\n },\n loyaltyAmountLabel: (\n \n ),\n loyaltyAmountInput: (\n \n ),\n loyaltyAmountApplyButton: (\n this.maxDollars ||\n this.state.dollarsApplied <= 0 || isNaN(this.state.dollarsApplied) ||\n this.state.isFetchingLoyaltyCard\n }\n >\n {this.props.resources.applyCheckoutLoyaltyPaymentText}\n \n ),\n showAppliedAmount: checkoutState && checkoutState.loyaltyAmount > 0,\n loyaltyAmountAppliedText: (\n \n ),\n loyaltyAmountAppliedPrice: (\n \n ),\n loyaltyAmountRemoveButton: (\n \n {this.props.resources.removeCheckoutLoyaltyPaymentText}\n \n )\n }\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n this.props.context.telemetry.error('Checkout loyalty content is empty, module wont render');\n return null;\n }\n\n private _drawerHeader(): JSX.Element {\n return (\n <>\n

\n {this.props.resources.loyaltyCoveredAmountText}\n

\n \n \n );\n }\n\n private _renderPointSection(\n point: LoyaltyRewardPoint,\n loyaltyCoveredAmountText: string,\n expiringLoyaltyPointsLabel: string\n ): ICheckoutLoyaltyRewardPoint {\n return {\n key: point.RewardPointId || '',\n checkoutLoyaltyRewardPoint: {\n className: `${this.moduleClassName}__program`\n },\n title: ,\n availablePointsText: ,\n activePoints: (\n \n ),\n expiringPointsText: ,\n expiringPoints: (\n \n )\n };\n }\n\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const savedLoyaltyAmount = this.props.data.checkout.result?.loyaltyAmount;\n if (savedLoyaltyAmount) {\n this.props.moduleState.onReady();\n } else if (this.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n } else if (\n this.props.data.loyaltyCard.result &&\n this.props.data.checkout.result &&\n this.props.data.loyaltyCard.result.CardNumber !== this.props.data.checkout.result.checkoutCart.cart.LoyaltyCardId\n ) {\n this.props.data.checkout.result.checkoutCart\n .updateLoyaltyCardId({ loyaltyCardNumber: this.props.data.loyaltyCard.result.CardNumber })\n .catch(error => {\n if (this.context.telemetry) {\n this.context.telemetry.warning(error);\n this.context.telemetry.debug('Unable to update the loyalty card');\n }\n });\n }\n };\n\n private readonly onEdit = () => {\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = () => {\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = () => {\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n const checkoutState = this.props.data.checkout.result;\n if (checkoutState && checkoutState.loyaltyAmount > 0) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly isEnabled = () => {\n return (\n this.props.context.request.user.isAuthenticated &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n );\n };\n\n private async _applyLoyaltyPoints(): Promise {\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n await checkoutState.updateLoyaltyAmount({ newAmount: Number.parseFloat(this.state.dollarsApplied.toString()) });\n this.setState({\n isFetchingLoyaltyCard: true\n });\n }\n\n private async _removeLoyaltyPoints(): Promise {\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n await checkoutState.updateLoyaltyAmount({ newAmount: 0 });\n this.setState({\n dollarsApplied: 0\n });\n }\n\n private _onInputChange(event: React.ChangeEvent): void {\n const value = event.currentTarget.value;\n this.setState({ dollarsApplied: value.length > 0 ? Number(value) : Number.parseFloat(value), isFetchingLoyaltyCard: false });\n }\n\n private _onBlur(event: React.FocusEvent): void {\n const num = Number.parseFloat(event.currentTarget.value).toFixed(2);\n const element = document.getElementById(`${this.props.id}-label`) as HTMLInputElement;\n if (element && num) {\n element.value = num;\n this.setState({ dollarsApplied: Number.parseFloat(num) });\n }\n }\n\n private _updateLoyalty(): void {\n if (this.props.moduleState.isDisabled && this.isEnabled()) {\n this._updateEstimate();\n this.props.moduleState.onUpdating();\n }\n }\n\n private _updateEstimate(): void {\n const card = this.props.data.loyaltyCard.result;\n const checkout = this.props.data.checkout.result;\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n const channelConfig = this.props.context.request.channel;\n if (card && card.CardNumber && cart && channelConfig) {\n const currencyCode = channelConfig.Currency || '';\n const loyalPointsRequest = createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput(cart.Id, card.CardNumber, currencyCode);\n\n // @ts-expect-error\n // Due to bug 23214358, this is getting improperly cached. Need to turn on cache bypass for now to work around issue\n loyalPointsRequest._query.options.bypassCache = 'get';\n\n callActionOrExecute(loyalPointsRequest, this.props.context.actionContext)\n .then(async points => {\n this.props.context.actionContext.update(\n new GetLoyaltyTransactionEstimationInput(this.props.context.request.apiSettings),\n points\n );\n const newMaxPoints = points.MaxCurrencyValueOfLoyaltyPoints ?? this._defaultLoyaltyPoints;\n\n // If points are already applied, ensure you don't apply more points than max\n if (checkout && (checkout.loyaltyAmount > newMaxPoints)) {\n await checkout.updateLoyaltyAmount({ newAmount: newMaxPoints });\n }\n\n this.setState({ dollarsApplied: newMaxPoints, isFetchingLoyaltyCard: false });\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n this.props.context.actionContext.telemetry.debug('Error getting Loyalty Point Redemption Estimate');\n });\n }\n }\n}\n\nexport default CheckoutLoyalty;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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\nexport interface IPaymentFrameElementProps {\n className?: string;\n iframeAriaLabel: string;\n displayContent?: string;\n sourceUrl?: string;\n requestUrlOrigin?: string;\n messageOrigin?: string;\n css?: string;\n height?: number;\n onIFrameMessage?(event: MessageEvent): void;\n}\n\nexport const POST_MESSAGE_NAME = 'message';\n\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 */\nclass IPaymentFrameElement extends React.PureComponent {\n private readonly iframeRef: React.RefObject;\n\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(prevProps: IPaymentFrameElementProps): void {\n if (prevProps.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 } = this.props;\n return (\n \n );\n }\n\n public postMessage = (params: IPaymentConnectorPostMessage): void => {\n if (\n this.iframeRef &&\n this.iframeRef.current &&\n this.iframeRef.current.contentWindow &&\n this.iframeRef.current.contentWindow.postMessage\n ) {\n this.iframeRef.current.contentWindow.postMessage(params.message, params.targetOrigin);\n }\n };\n\n private readonly onEvent = (event: MessageEvent) => {\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 private readonly updateContentDocument = (): void => {\n const { displayContent, sourceUrl, css } = this.props;\n if (!sourceUrl && displayContent && this.iframeRef && 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.type = 'text/css';\n style.appendChild(cssNote);\n innerDocument.head.appendChild(style);\n }\n\n innerDocument.close();\n }\n }\n };\n}\n\nexport default IPaymentFrameElement;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 defaultPaymentConnectorDropinStyle from '../payment-instrument.dropin.style';\nimport defaultPaymentConnectorPaypalStyle from '../payment-instrument.paypal.style';\nimport defaultPaymentConnectorStyle from '../payment-instrument.style';\nimport Iframe from './iframe';\n\nexport interface IAddPaymentFormProps {\n acceptPageUrl?: string;\n acceptPageContent?: string;\n iframeRef?: React.RefObject