{"version":3,"file":"static/js/afdca22edd59e27026c6.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/actions/checkout-applied-state.ts?8f07","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/actions/get-products-in-active-dlvry-checkout-v2-cart.ts?4e73","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/checkout-state/deferred-base-checkout-state.ts?9842","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/checkout-state/deferred-checkout-state-data-action.ts?81ff","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/components/alert.tsx?4415","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/components/get-invoice-payment-summary.tsx?e434","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/components/get-order-summary.tsx?bc2f","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/components/guided-card.tsx?f9e4","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/components/guided-form.tsx?cd89","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/components/place-order-button.tsx?1dfb","webpack://Msdyn365.Commerce.Online/./src/actions/update-transaction-customer.ts?5196","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/common/place-order.tsx?d0d2","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/common/empty-active-cart.tsx?7e17","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/components/get-line-items.tsx?4d68","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/dlvry-checkout-v2.tsx?cf94","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/methods/place-order.ts?fc6b","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-checkout-v2/dlvry-checkout-v2.view.tsx?c298","webpack://Msdyn365.Commerce.Online/./lib/dlvry-checkout-v2/module-registration.js?6f58","webpack://Msdyn365.Commerce.Online/../../src/search-org-unit-locations.ts?d18d","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["import {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface ICheckoutAppliedState {\r\n applied: {\r\n customerInformation: boolean;\r\n shippingInformation: boolean;\r\n deliveryOptions: boolean;\r\n },\r\n newCartObject: Partial;\r\n newCartLinesObject: CartLine[];\r\n}\r\n\r\nexport class CheckoutAppliedStateInput implements IActionInput {\r\n public getCacheKey = () => `CheckoutAppliedState`;\r\n public getCacheObjectType = () => 'CheckoutAppliedState';\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\nexport async function checkoutAppliedStateAction(input: CheckoutAppliedStateInput, ctx: IActionContext): Promise {\r\n return {\r\n applied: {\r\n customerInformation: false,\r\n shippingInformation: false,\r\n deliveryOptions: false\r\n },\r\n newCartObject: {},\r\n newCartLinesObject: []\r\n };\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new CheckoutAppliedStateInput();\r\n};\r\n\r\nexport default createObservableDataAction({\r\n action: >checkoutAppliedStateAction,\r\n input: createInput\r\n});\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getSimpleProducts, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for ActiveCheckoutCartWithProducts data action.\n */\nexport class ActiveCheckoutCartProductsInput implements IActionInput {\n public getCacheKey = () => 'ActiveCheckoutCartProducts';\n\n public getCacheObjectType = () => 'ActiveCheckoutCartProducts';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport const createInput = () => {\n return new ActiveCheckoutCartProductsInput();\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 getActiveCheckoutCartProductsAction(\n input: ActiveCheckoutCartProductsInput,\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('[getActiveCheckoutCartWithProducts]No valid Input was provided, failing'));\n throw new Error('[getActiveCheckoutCartWithProducts]No valid Input was provided, failing');\n }\n\n const checkoutState = await getCheckoutState(ctx);\n const cart = checkoutState.checkoutCart.cart;\n\n // If there are cart lines, make call to get products\n if (!checkoutState.checkoutCart.hasInvoiceLine && cart && cart.CartLines && cart.CartLines.length > 0) {\n return getSimpleProducts(\n cart.CartLines.map(cartLine => {\n if (cartLine.ProductId) {\n return new ProductInput(\n cartLine.ProductId,\n ctx.requestContext.apiSettings,\n undefined,\n undefined,\n ctx.requestContext,\n cartLine.CatalogId\n );\n }\n return undefined;\n }).filter(Boolean),\n ctx\n )\n .then(products => {\n if (products) {\n return products;\n }\n return [];\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCheckoutCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return [];\n}\n\nexport const getActiveCheckoutCartProductsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/checkout/get-products-in-active-checkout-cart',\n action: >getActiveCheckoutCartProductsAction,\n input: createInput\n});\n\nexport default getActiveCheckoutCartProductsActionDataAction;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport {\r\n Address,\r\n AttributeValueBase,\r\n CardPaymentAcceptResult,\r\n CartLine,\r\n CommerceProperty,\r\n GiftCard,\r\n SalesOrder,\r\n SimpleProduct,\r\n TenderLine,\r\n TokenizedPaymentCard\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport get from 'lodash/get';\r\nimport { action, computed, observable } from 'mobx';\r\n\r\nimport { GlobalState, CheckoutModule, ICartState,\r\n ICheckoutActionResult,\r\n ICheckoutGenericData,\r\n ICheckoutState,\r\n IGiftCardExtend,\r\n ICheckoutError,\r\n BaseCheckoutCartState\r\n} from '@msdyn365-commerce/global-state';\r\n\r\nexport enum CheckoutStorageKey {\r\n BillingAddress = 'BillingAddress',\r\n GiftCard = 'GiftCard',\r\n LoyaltyCardNumber = 'LoyaltyCardNumber',\r\n LoyaltyAmount = 'LoyaltyAmount',\r\n TermsAndCondition = 'TermsAndCondition',\r\n CheckoutGenericData = 'Checkout-Generic-Data',\r\n PaymentTenderType = 'PaymentTenderType',\r\n RedirectPaymentConnectorId = 'RedirectPaymentConnectorId',\r\n IsExpressCheckoutApplied = 'IsExpressCheckoutApplied'\r\n}\r\n\r\n/**\r\n * State information related to what is needed to succesfully perform a checkout.\r\n */\r\nexport class DeferredBaseCheckoutState extends GlobalState implements ICheckoutState {\r\n @observable protected _deferred: boolean = true;\r\n\r\n @computed public get deferred(): Readonly {\r\n return this._deferred;\r\n }\r\n\r\n @observable protected _timedOut: boolean = false;\r\n\r\n @computed public get timedOut(): Readonly {\r\n return this._timedOut;\r\n }\r\n\r\n @observable protected _checkoutCart: ICartState;\r\n\r\n @computed public get checkoutCart(): ICartState {\r\n return this._checkoutCart;\r\n }\r\n\r\n @observable protected _salesOrder?: SalesOrder;\r\n\r\n @computed public get salesOrder(): Readonly {\r\n return this._salesOrder;\r\n }\r\n\r\n @observable protected _attributeValues: AttributeValueBase[];\r\n\r\n @computed public get attributeValues(): Readonly {\r\n return this._attributeValues;\r\n }\r\n\r\n @observable protected _extensionProperties: CommerceProperty[];\r\n\r\n @computed public get extensionProperties(): Readonly {\r\n return this._extensionProperties;\r\n }\r\n\r\n @observable protected _orderedProducts?: SimpleProduct[];\r\n\r\n @computed public get orderedProducts(): Readonly {\r\n return this._orderedProducts;\r\n }\r\n\r\n @observable protected _tokenizedPaymentCard?: TokenizedPaymentCard;\r\n\r\n @computed public get tokenizedPaymentCard(): Readonly {\r\n return this._tokenizedPaymentCard;\r\n }\r\n\r\n @observable protected _tenderLine?: TenderLine;\r\n\r\n @computed public get tenderLine(): Readonly {\r\n return this._tenderLine;\r\n }\r\n\r\n @observable protected _billingAddress?: Address;\r\n\r\n @computed public get billingAddress(): Readonly
{\r\n return this._billingAddress;\r\n }\r\n\r\n @observable protected _isBillingAddressSameAsShippingAddress?: boolean;\r\n\r\n @computed public get isBillingAddressSameAsShippingAddress(): Readonly {\r\n return this._isBillingAddressSameAsShippingAddress;\r\n }\r\n\r\n @observable protected _shippingAddress?: Address;\r\n\r\n @computed public get shippingAddress(): Readonly
{\r\n return this._shippingAddress;\r\n }\r\n\r\n @observable protected _cartLinesWithShippingAddress?: CartLine[];\r\n\r\n @computed public get cartLinesWithShippingAddress(): Readonly {\r\n return this._cartLinesWithShippingAddress;\r\n }\r\n\r\n @observable protected _hasShippingAddress?: boolean;\r\n\r\n @computed public get hasShippingAddress(): Readonly {\r\n return this._hasShippingAddress;\r\n }\r\n\r\n @observable protected _hasCartDeliveryMode?: boolean;\r\n\r\n @computed public get hasCartDeliveryMode(): Readonly {\r\n return this._hasCartDeliveryMode;\r\n }\r\n\r\n @observable protected _cardPrefix?: string;\r\n\r\n @computed public get cardPrefix(): Readonly {\r\n return this._cardPrefix;\r\n }\r\n\r\n @observable protected _paymentTenderType?: string;\r\n\r\n @computed public get paymentTenderType(): Readonly {\r\n return this._paymentTenderType;\r\n }\r\n\r\n /**\r\n * @deprecated Use giftCardExtends method.\r\n */\r\n @computed public get giftCards(): Readonly {\r\n return this.giftCardExtends;\r\n }\r\n\r\n @observable protected _giftCardExtends: IGiftCardExtend[] = [];\r\n\r\n @computed public get giftCardExtends(): Readonly {\r\n return this._giftCardExtends;\r\n }\r\n\r\n @observable protected _loyaltyCardNumber?: string;\r\n\r\n @computed public get loyaltyCardNumber(): Readonly {\r\n return this._loyaltyCardNumber;\r\n }\r\n\r\n @observable protected _loyaltyAmount: number = 0;\r\n\r\n @computed public get loyaltyAmount(): Readonly {\r\n return this._loyaltyAmount;\r\n }\r\n\r\n @observable protected _guestCheckoutEmail: string = '';\r\n\r\n @computed public get guestCheckoutEmail(): Readonly {\r\n return this._guestCheckoutEmail;\r\n }\r\n\r\n @observable protected _hasGuestCheckoutEmail?: boolean;\r\n\r\n @computed public get hasGuestCheckoutEmail(): Readonly {\r\n return this._hasGuestCheckoutEmail;\r\n }\r\n\r\n @observable protected _isTermsAndConditionAccepted?: boolean;\r\n\r\n @computed public get isTermsAndConditionAccepted(): Readonly {\r\n return this._isTermsAndConditionAccepted;\r\n }\r\n\r\n @observable protected _isTermsAndConditionChecked?: boolean;\r\n\r\n @computed public get isTermsAndConditionChecked(): Readonly {\r\n return this._isTermsAndConditionChecked;\r\n }\r\n\r\n @observable protected _shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\r\n\r\n @computed public get shouldEnableSinglePaymentAuthorizationCheckout(): Readonly {\r\n return this._shouldEnableSinglePaymentAuthorizationCheckout;\r\n }\r\n\r\n @observable protected _shouldEnableCheckoutErrorDisplayMessaging?: boolean;\r\n\r\n @computed public get shouldEnableCheckoutErrorDisplayMessaging(): Readonly {\r\n return this._shouldEnableCheckoutErrorDisplayMessaging;\r\n }\r\n\r\n @observable protected _shouldCollapsePaymentSection?: boolean;\r\n\r\n @computed public get shouldCollapsePaymentSection(): Readonly {\r\n return this._shouldCollapsePaymentSection;\r\n }\r\n\r\n @observable protected _shouldTriggerPaymentWithPlaceOrder?: boolean;\r\n\r\n @computed public get shouldTriggerPaymentWithPlaceOrder(): Readonly {\r\n return this._shouldTriggerPaymentWithPlaceOrder;\r\n }\r\n\r\n @observable protected _isPaymentSectionContainerReady?: boolean;\r\n\r\n @computed public get isPaymentSectionContainerReady(): Readonly {\r\n return this._isPaymentSectionContainerReady;\r\n }\r\n\r\n @observable protected _cardPaymentAcceptResult?: CardPaymentAcceptResult;\r\n\r\n @computed public get cardPaymentAcceptResult(): Readonly {\r\n return this._cardPaymentAcceptResult;\r\n }\r\n\r\n @observable protected _isPaymentSectionContainerHasError?: boolean;\r\n\r\n @computed public get isPaymentSectionContainerHasError(): Readonly {\r\n return this._isPaymentSectionContainerHasError;\r\n }\r\n\r\n @observable protected _redirectAdditionalContext?: string;\r\n\r\n @computed public get redirectAdditionalContext(): Readonly {\r\n return this._redirectAdditionalContext;\r\n }\r\n\r\n @observable protected _redirectPaymentConnectorId?: string;\r\n\r\n @computed public get redirectPaymentConnectorId(): Readonly {\r\n return this._redirectPaymentConnectorId;\r\n }\r\n\r\n @observable protected _checkoutErrorPaymentConnectorId?: string;\r\n\r\n @computed public get checkoutErrorPaymentConnectorId(): Readonly {\r\n return this._checkoutErrorPaymentConnectorId;\r\n }\r\n\r\n @observable protected _isPlaceOrderEnabledInRedirection?: boolean;\r\n\r\n @computed public get isPlaceOrderEnabledInRedirection(): Readonly {\r\n return this._isPlaceOrderEnabledInRedirection;\r\n }\r\n\r\n @observable protected _isPaymentVerificationRequired?: boolean;\r\n\r\n @computed public get isPaymentVerificationRequired(): Readonly {\r\n return this._isPaymentVerificationRequired;\r\n }\r\n\r\n @observable protected _isCheckoutCallFailed?: boolean;\r\n\r\n @computed public get isCheckoutCallFailed(): Readonly {\r\n return this._isCheckoutCallFailed;\r\n }\r\n\r\n @observable protected _customerAccountAmount: number = 0;\r\n\r\n @computed public get customerAccountAmount(): Readonly {\r\n return this._customerAccountAmount;\r\n }\r\n\r\n @observable protected _shouldEnableExpressCheckoutInCheckout?: boolean;\r\n\r\n @computed public get shouldEnableExpressCheckoutInCheckout(): Readonly {\r\n return this._shouldEnableExpressCheckoutInCheckout;\r\n }\r\n\r\n @observable protected _shouldEnableExpressCheckoutInCart?: boolean;\r\n\r\n @computed public get shouldEnableExpressCheckoutInCart(): Readonly {\r\n return this._shouldEnableExpressCheckoutInCart;\r\n }\r\n\r\n @observable protected _shippingAddressFromExpressCheckout?: Address;\r\n\r\n @computed public get shippingAddressFromExpressCheckout(): Readonly
{\r\n return this._shippingAddressFromExpressCheckout;\r\n }\r\n\r\n @observable protected _emailAddressFromExpressCheckout: string = '';\r\n\r\n @computed public get emailAddressFromExpressCheckout(): Readonly {\r\n return this._emailAddressFromExpressCheckout;\r\n }\r\n\r\n @observable protected _billingAddressFromExpressCheckout?: Address;\r\n\r\n @computed public get billingAddressFromExpressCheckout(): Readonly
{\r\n return this._billingAddressFromExpressCheckout;\r\n }\r\n\r\n @observable protected _isExpressCheckoutApplied?: boolean;\r\n\r\n @computed public get isExpressCheckoutApplied(): Readonly {\r\n return this._isExpressCheckoutApplied;\r\n }\r\n\r\n @observable protected _isExpressAddressApplied?: boolean;\r\n\r\n @computed public get isExpressAddressApplied(): Readonly {\r\n return this._isExpressAddressApplied;\r\n }\r\n\r\n @observable protected _isExpressCheckoutAppliedInCartPage?: boolean;\r\n\r\n @computed public get isExpressCheckoutAppliedInCartPage(): Readonly {\r\n return this._isExpressCheckoutAppliedInCartPage;\r\n }\r\n\r\n @observable protected _isExpressPaymentModulesReady?: CommerceProperty[];\r\n\r\n @computed public get isExpressPaymentModulesReady(): Readonly {\r\n return this._isExpressPaymentModulesReady;\r\n }\r\n\r\n @computed public get isPaymentVerificationRedirection(): Readonly {\r\n const { requestFormData, query } = this.actionContext.requestContext;\r\n return !!(query && query.pv === '1' && (requestFormData || query.redirectResult));\r\n }\r\n\r\n @observable protected _checkoutError?: ICheckoutError;\r\n\r\n @computed public get checkoutError(): Readonly {\r\n return this._checkoutError;\r\n }\r\n\r\n @observable protected _isBillingAddressHasError?: boolean;\r\n\r\n @computed public get isBillingAddressHasError(): Readonly {\r\n return this._isBillingAddressHasError;\r\n }\r\n\r\n @observable protected _checkoutErrorFocus?: CheckoutModule;\r\n\r\n @computed public get checkoutErrorFocus(): Readonly {\r\n return this._checkoutErrorFocus;\r\n }\r\n\r\n @observable protected _shouldFocusOnCheckoutError?: boolean;\r\n\r\n @computed public get shouldFocusOnCheckoutError(): Readonly {\r\n return this._shouldFocusOnCheckoutError;\r\n }\r\n\r\n @observable protected _checkoutGenericData: object = {};\r\n\r\n constructor(actionContext: IActionContext) {\r\n super(actionContext);\r\n this._checkoutCart = new BaseCheckoutCartState(actionContext);\r\n this._attributeValues = [];\r\n this._extensionProperties = [];\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for app settings.\r\n this._shouldEnableSinglePaymentAuthorizationCheckout = actionContext.requestContext.app.config\r\n .shouldEnableSinglePaymentAuthorizationCheckout as boolean;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for app settings.\r\n this._shouldEnableCheckoutErrorDisplayMessaging = actionContext.requestContext.app.config\r\n .shouldEnableCheckoutErrorDisplayMessaging as boolean;\r\n }\r\n\r\n @action\r\n public updateSalesOrder(input: {\r\n newSalesOrder: SalesOrder;\r\n newOrderedProducts: SimpleProduct[];\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._salesOrder = input.newSalesOrder;\r\n this._orderedProducts = input.newOrderedProducts;\r\n this._attributeValues = input.newSalesOrder.AttributeValues || [];\r\n this._extensionProperties = input.newSalesOrder.ExtensionProperties || [];\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public async updateAttributeValues(input: {\r\n newAttributeValues: AttributeValueBase[];\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._attributeValues = input.newAttributeValues;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public async updateExtensionProperties(input: {\r\n newExtensionProperties: CommerceProperty[];\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._extensionProperties = input.newExtensionProperties;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public updateTokenizedPaymentCard(input: {\r\n newTokenizedPaymentCard?: TokenizedPaymentCard;\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._tokenizedPaymentCard = input.newTokenizedPaymentCard;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public updateTenderLine(input: { newTenderLine?: TenderLine; additionalProperties?: object }): Promise {\r\n this._tenderLine = input.newTenderLine;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public async updateShippingAddress(input: {\r\n newShippingAddress: Address;\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._shippingAddress = input.newShippingAddress;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public async updateCartLinesShippingAddress(input: {\r\n newCartLinesWithShippingAddress: CartLine[];\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._cartLinesWithShippingAddress = input.newCartLinesWithShippingAddress;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public async updateHasShippingAddress(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newHasShippingAddress: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._hasShippingAddress = input.newHasShippingAddress;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateHasCartDeliveryMode(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newHasCartDeliveryMode: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._hasCartDeliveryMode = input.newHasCartDeliveryMode;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateTermsAndConditionsAcceptance(input: {\r\n newIsTermsAndConditionAccepted: boolean;\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._isTermsAndConditionAccepted = input.newIsTermsAndConditionAccepted;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public async updateIsTermsAndConditionsChecked(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsTermsAndConditionChecked: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isTermsAndConditionChecked = input.newIsTermsAndConditionChecked;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateShouldCollapsePaymentSection(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newShouldCollapsePaymentSection: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._shouldCollapsePaymentSection = input.newShouldCollapsePaymentSection;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateShouldTriggerPaymentWithPlaceOrder(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newShouldTriggerPaymentWithPlaceOrder: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._shouldTriggerPaymentWithPlaceOrder = input.newShouldTriggerPaymentWithPlaceOrder;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsPaymentSectionContainerReady(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsPaymentSectionContainerReady: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isPaymentSectionContainerReady = input.newIsPaymentSectionContainerReady;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateCardPaymentAcceptResult(input: {\r\n newCardPaymentAcceptResult: CardPaymentAcceptResult;\r\n additionalProperties?: { [key: string]: unknown };\r\n }): Promise {\r\n this._cardPaymentAcceptResult = input.newCardPaymentAcceptResult;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsPaymentSectionContainerHasError(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsPaymentSectionContainerHasError: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isPaymentSectionContainerHasError = input.newIsPaymentSectionContainerHasError;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateRedirectAdditionalContext(input: {\r\n newRedirectAdditionalContext: string;\r\n additionalProperties?: { [key: string]: unknown };\r\n }): Promise {\r\n this._redirectAdditionalContext = input.newRedirectAdditionalContext;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateRedirectPaymentConnectorId(input: {\r\n newRedirectPaymentConnectorId: string;\r\n additionalProperties?: { [key: string]: unknown };\r\n }): Promise {\r\n this._redirectPaymentConnectorId = input.newRedirectPaymentConnectorId;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateCheckoutErrorPaymentConnectorId(input: {\r\n newCheckoutErrorPaymentConnectorId: string;\r\n additionalProperties?: { [key: string]: unknown };\r\n }): Promise {\r\n this._checkoutErrorPaymentConnectorId = input.newCheckoutErrorPaymentConnectorId;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsCheckoutCallFailed(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsCheckoutCallFailed: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isCheckoutCallFailed = input.newIsCheckoutCallFailed;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsPlaceOrderEnabledInRedirection(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsPlaceOrderEnabledInRedirection: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isPlaceOrderEnabledInRedirection = input.newIsPlaceOrderEnabledInRedirection;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsPaymentVerificationRequired(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsPaymentVerificationRequired: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isPaymentVerificationRequired = input.newIsPaymentVerificationRequired;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public updateBillingAddress(input: { newBillingAddress: Address; additionalProperties?: object }): Promise {\r\n this._billingAddress = input.newBillingAddress;\r\n\r\n // @ts-expect-error\r\n this._isBillingAddressSameAsShippingAddress = input.additionalProperties?.isBillingAddressSameAsShippingAddress || false;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public removeBillingAddress(input: { additionalProperties?: object }): Promise {\r\n this._billingAddress = undefined;\r\n this._isBillingAddressSameAsShippingAddress = undefined;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public updatePaymentTenderType(input: {\r\n newPaymentTenderType?: string;\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._paymentTenderType = input.newPaymentTenderType;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public updateCardPrefix(input: { newCardPrefix: string; additionalProperties?: object }): Promise {\r\n this._cardPrefix = input.newCardPrefix;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public removeGiftCard(input: { giftCardNumber: string; additionalProperties?: object }): Promise {\r\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== input.giftCardNumber);\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public removeGiftCardExtend(input: { giftCardNumber: string; additionalProperties?: object }): Promise {\r\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== input.giftCardNumber);\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public addGiftCard(input: { giftCard: GiftCard; additionalProperties?: object }): Promise {\r\n // @ts-expect-error\r\n const { Pin, ExpirationDate, TenderTypeId } = input.additionalProperties || {};\r\n\r\n const gitCardExtend = { ...input.giftCard, ...{ Pin, ExpirationDate, TenderTypeId } };\r\n\r\n this._giftCardExtends = [gitCardExtend, ...this._giftCardExtends];\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public addGiftCardExtend(input: { giftCard: IGiftCardExtend; additionalProperties?: object }): Promise {\r\n this._giftCardExtends = [input.giftCard, ...this._giftCardExtends];\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public updateLoyaltyCardNumber(input: { newLoyaltyCardNumber: string; additionalProperties?: object }): Promise {\r\n this._loyaltyCardNumber = input.newLoyaltyCardNumber;\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public updateLoyaltyAmount(input: { newAmount: number; additionalProperties?: object }): Promise {\r\n this._loyaltyAmount = Number(input.newAmount.toFixed(2));\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public async updateGuestCheckoutEmail(input: {\r\n newGuestCheckoutEmail: string;\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._guestCheckoutEmail = input.newGuestCheckoutEmail;\r\n const emailOnCart = this.checkoutCart.cart.ReceiptEmail;\r\n\r\n if (emailOnCart !== input.newGuestCheckoutEmail) {\r\n await this.checkoutCart.updateReceiptEmail({ newEmail: input.newGuestCheckoutEmail });\r\n }\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n /**\r\n * Updates cartLines objects in cart.\r\n * @param input - The input.\r\n * @param input.updatedCartLinesObject - updated cartline.\r\n * @returns ICartActionResult.\r\n */\r\n @action\r\n public async updateCartLines(input: { updatedCartLinesObject: CartLine[] }): Promise {\r\n await this.checkoutCart.updateCartLines({ updatedCartLinesObject: input.updatedCartLinesObject });\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public async updateHasGuestCheckoutEmail(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newHasGuestCheckoutEmail: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._hasGuestCheckoutEmail = input.newHasGuestCheckoutEmail;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public removeCheckoutCartId(input: { additionalProperties?: object }): Promise {\r\n this.actionContext.requestContext.cookies.removeCheckoutCartCookie();\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public saveDataInStorage(input: { additionalProperties?: object }): Promise {\r\n const { sessionStorage } = this.actionContext.requestContext;\r\n\r\n // Add all local data to session storage\r\n if (this.billingAddress) {\r\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.BillingAddress, {\r\n billingAddress: this.billingAddress,\r\n isBillingAddressSameAsShippingAddress: this.isBillingAddressSameAsShippingAddress\r\n });\r\n }\r\n\r\n if (this.giftCardExtends && this.giftCardExtends.length > 0) {\r\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.GiftCard, this.giftCardExtends);\r\n }\r\n\r\n if (this.loyaltyCardNumber) {\r\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.LoyaltyCardNumber, { loyaltyCardNumber: this.loyaltyCardNumber });\r\n }\r\n\r\n if (this.loyaltyAmount) {\r\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.LoyaltyAmount, { loyaltyAmount: this.loyaltyAmount });\r\n }\r\n\r\n if (this.isTermsAndConditionAccepted) {\r\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.TermsAndCondition, {\r\n isTermsAndConditionAccepted: this.isTermsAndConditionAccepted\r\n });\r\n }\r\n\r\n if (this.paymentTenderType) {\r\n window.sessionStorage.setItem(CheckoutStorageKey.PaymentTenderType, this.paymentTenderType);\r\n }\r\n\r\n if (this.redirectPaymentConnectorId) {\r\n window.sessionStorage.setItem(CheckoutStorageKey.RedirectPaymentConnectorId, this.redirectPaymentConnectorId);\r\n }\r\n\r\n if (this.isExpressCheckoutApplied) {\r\n window.sessionStorage.setItem(CheckoutStorageKey.IsExpressCheckoutApplied, this.isExpressCheckoutApplied.toString());\r\n }\r\n\r\n // Save generic data with SaveDataBeforeRedirect value true\r\n const filtered = Object.keys(this._checkoutGenericData).reduce((filteredData: object, key: string) => {\r\n if (this._checkoutGenericData[key].SaveDataBeforeRedirect) {\r\n filteredData[key] = this._checkoutGenericData[key];\r\n }\r\n return filteredData;\r\n }, {});\r\n\r\n if (Object.keys(filtered).length > 0) {\r\n sessionStorage.setCheckoutCartData(CheckoutStorageKey.CheckoutGenericData, { checkoutGenericData: filtered });\r\n }\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public updateCustomerAccountAmount(input: { newAmount: number; additionalProperties?: object }): Promise {\r\n this._customerAccountAmount = Number(input.newAmount.toFixed(2));\r\n\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public async updateBillingAddressFromExpressCheckout(input: {\r\n newBillingAddressFromExpressCheckout: Address;\r\n additionalProperties?: { [key: string]: unknown };\r\n }): Promise {\r\n this._billingAddressFromExpressCheckout = input.newBillingAddressFromExpressCheckout;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateShippingAddressFromExpressCheckout(input: {\r\n newShippingAddressFromExpressCheckout: Address;\r\n additionalProperties?: { [key: string]: unknown };\r\n }): Promise {\r\n this._shippingAddressFromExpressCheckout = input.newShippingAddressFromExpressCheckout;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateEmailAddressFromExpressCheckout(input: {\r\n newEmailAddressFromExpressCheckout: string;\r\n additionalProperties?: { [key: string]: unknown };\r\n }): Promise {\r\n this._emailAddressFromExpressCheckout = input.newEmailAddressFromExpressCheckout;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateShouldEnableExpressCheckoutInCheckout(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newShouldEnableExpressCheckoutInCheckout: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._shouldEnableExpressCheckoutInCheckout = input.newShouldEnableExpressCheckoutInCheckout;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateShouldEnableExpressCheckoutInCart(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newShouldEnableExpressCheckoutInCart: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._shouldEnableExpressCheckoutInCart = input.newShouldEnableExpressCheckoutInCart;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsExpressCheckoutApplied(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsExpressCheckoutApplied: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isExpressCheckoutApplied = input.newIsExpressCheckoutApplied;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsExpressAddressApplied(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsExpressAddressApplied: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isExpressAddressApplied = input.newIsExpressAddressApplied;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsExpressCheckoutAppliedInCartPage(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsExpressCheckoutAppliedInCartPage: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isExpressCheckoutAppliedInCartPage = input.newIsExpressCheckoutAppliedInCartPage;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsBillingAddressHasError(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newIsBillingAddressHasError: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._isBillingAddressHasError = input.newIsBillingAddressHasError;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateIsExpressPaymentModulesReady(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: {\r\n newIsExpressPaymentModulesReady: CommerceProperty[];\r\n additionalProperties?: { [key: string]: unknown };\r\n }\r\n ): Promise {\r\n this._isExpressPaymentModulesReady = input.newIsExpressPaymentModulesReady;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateExpressCheckoutDetails(input: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n newIsExpressCheckoutApplied: boolean;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n newIsExpressAddressApplied?: boolean;\r\n newCardPaymentAcceptResult?: CardPaymentAcceptResult;\r\n newEmailAddressFromExpressCheckout: string;\r\n newTenderLine?: TenderLine;\r\n newPaymentTenderType?: string;\r\n newTokenizedPaymentCard?: TokenizedPaymentCard;\r\n additionalProperties?: { [key: string]: unknown };\r\n }): Promise {\r\n this._isExpressCheckoutApplied = input.newIsExpressCheckoutApplied;\r\n\r\n if (input.newIsExpressAddressApplied !== undefined) {\r\n this._isExpressAddressApplied = input.newIsExpressAddressApplied;\r\n }\r\n\r\n if (input.newCardPaymentAcceptResult !== undefined) {\r\n this._cardPaymentAcceptResult = input.newCardPaymentAcceptResult;\r\n }\r\n\r\n if (input.newPaymentTenderType !== undefined) {\r\n this._paymentTenderType = input.newPaymentTenderType;\r\n }\r\n\r\n if (input.newTokenizedPaymentCard !== undefined) {\r\n this._tokenizedPaymentCard = input.newTokenizedPaymentCard;\r\n }\r\n\r\n if (input.newTenderLine !== undefined) {\r\n this._tenderLine = input.newTenderLine;\r\n }\r\n\r\n if (input.newEmailAddressFromExpressCheckout) {\r\n this._emailAddressFromExpressCheckout = input.newEmailAddressFromExpressCheckout;\r\n }\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateCheckoutError(input: {\r\n newCheckoutError: ICheckoutError;\r\n additionalProperties?: { [key: string]: unknown };\r\n }): Promise {\r\n this._checkoutError = input.newCheckoutError;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public setCheckoutGenericData(input: {\r\n key: string;\r\n checkoutGenericData: ICheckoutGenericData;\r\n additionalProperties?: object;\r\n }): Promise {\r\n this._checkoutGenericData[input.key] = input.checkoutGenericData;\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n @action\r\n public getCheckoutGenericData(input: { key: string }): ICheckoutGenericData | undefined {\r\n return this._checkoutGenericData[input.key];\r\n }\r\n\r\n @action\r\n public async updateCheckoutErrorFocus(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newCheckoutErrorFocus: CheckoutModule; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._checkoutErrorFocus = input.newCheckoutErrorFocus;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public async updateShouldFocusOnCheckoutError(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\r\n input: { newShouldFocusOnCheckoutError: boolean; additionalProperties?: { [key: string]: unknown } }\r\n ): Promise {\r\n this._shouldFocusOnCheckoutError = input.newShouldFocusOnCheckoutError;\r\n\r\n const result: ICheckoutActionResult = { status: 'SUCCESS' };\r\n return Promise.resolve(result);\r\n }\r\n\r\n @action\r\n public setTimedOut(value: boolean): void {\r\n this._timedOut = value;\r\n }\r\n\r\n public async initialize(deferred: boolean = true): Promise {\r\n if (deferred || this.isInitialized) {\r\n this._status = 'UPDATING';\r\n return;\r\n }\r\n\r\n await this._checkoutCart.initialize();\r\n\r\n this.setInitialData();\r\n this.isInitialized = true;\r\n this._status = 'READY';\r\n this._attributeValues = [];\r\n this._extensionProperties = [];\r\n\r\n this._deferred = deferred;\r\n }\r\n\r\n @action\r\n private cleanCheckoutData(input: { additionalProperties?: object }): Promise {\r\n this.actionContext.requestContext.sessionStorage.removeCheckoutCartData();\r\n return Promise.resolve({ status: 'SUCCESS' });\r\n }\r\n\r\n private setInitialData() {\r\n const { sessionStorage } = this.actionContext.requestContext;\r\n\r\n if (this.isPaymentVerificationRedirection) {\r\n const billingAddress = sessionStorage.getCheckoutCartData(CheckoutStorageKey.BillingAddress);\r\n const giftCard = sessionStorage.getCheckoutCartData(CheckoutStorageKey.GiftCard);\r\n\r\n this._billingAddress = get(billingAddress, 'billingAddress');\r\n this._isBillingAddressSameAsShippingAddress = get(billingAddress, 'isBillingAddressSameAsShippingAddress');\r\n this._giftCardExtends = (giftCard && Array.isArray(giftCard) ? giftCard : []) as IGiftCardExtend[];\r\n this._loyaltyCardNumber = get(sessionStorage.getCheckoutCartData(CheckoutStorageKey.LoyaltyCardNumber), 'loyaltyCardNumber');\r\n this._loyaltyAmount = get(sessionStorage.getCheckoutCartData(CheckoutStorageKey.LoyaltyAmount), 'loyaltyAmount')!;\r\n this._isTermsAndConditionAccepted = get(\r\n sessionStorage.getCheckoutCartData(CheckoutStorageKey.TermsAndCondition),\r\n 'isTermsAndConditionAccepted'\r\n );\r\n this._checkoutGenericData =\r\n get(sessionStorage.getCheckoutCartData(CheckoutStorageKey.CheckoutGenericData), 'checkoutGenericData') || {};\r\n this._paymentTenderType = window.sessionStorage.getItem(CheckoutStorageKey.PaymentTenderType) ?? undefined;\r\n this._redirectPaymentConnectorId = window.sessionStorage.getItem(CheckoutStorageKey.RedirectPaymentConnectorId) as string;\r\n this._isExpressCheckoutApplied = (window.sessionStorage.getItem(CheckoutStorageKey.IsExpressCheckoutApplied) as string)\r\n ? true\r\n : false;\r\n }\r\n\r\n void this.cleanCheckoutData({});\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { DeferredBaseCheckoutState } from './deferred-base-checkout-state';\r\nimport {\r\n ICheckoutState,\r\n IGlobalState,\r\n GlobalStateType,\r\n GlobalStateConstructor,\r\n GlobalStateInput,\r\n getState\r\n} from '@msdyn365-commerce/global-state';\r\nimport { IObservableAction, createObservableDataAction, IAction, ICreateActionContext } from '@msdyn365-commerce/core';\r\n\r\nfunction createGlobalStateDataAction(\r\n key: GlobalStateType,\r\n stateConstructor: GlobalStateConstructor\r\n): IObservableAction {\r\n return createObservableDataAction({\r\n action: >getState,\r\n input: (args: ICreateActionContext) => {\r\n return new GlobalStateInput(key, stateConstructor, args.requestContext.apiSettings, args.requestContext);\r\n }\r\n });\r\n}\r\n\r\nexport default createGlobalStateDataAction('CHECKOUTSTATE', DeferredBaseCheckoutState);\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface IAlertProps {\r\n message: string;\r\n details?: string;\r\n correlationId?: string;\r\n}\r\n\r\nconst CheckoutAlert: React.FC = ({ message, details, correlationId }) => (\r\n

\r\n {message}\r\n {details ?

{details}
: null}\r\n {correlationId\r\n ?\r\n
\r\n Correlation Id: {correlationId}\r\n
\r\n : null}\r\n

\r\n);\r\n\r\nexport default CheckoutAlert;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\n\r\nimport { IDlvryCheckoutV2Data } from '../dlvry-checkout-v2.data';\r\nimport { IDlvryCheckoutV2Props } from '../dlvry-checkout-v2.props.autogenerated';\r\n\r\nexport interface IInvoicePaymentSummary {\r\n heading?: React.ReactNode;\r\n lines?: IInvoiceSummaryLines;\r\n isCalculatingTotal?: boolean;\r\n}\r\nexport const getInvoicePaymentSummary = (input: IDlvryCheckoutV2Props): IInvoicePaymentSummary => {\r\n const {\r\n data: { checkout },\r\n resources: { totalAmountLabel, invoiceLabel, invoiceSummaryTitle },\r\n context,\r\n typeName,\r\n id,\r\n telemetry\r\n } = input;\r\n\r\n const checkoutCart = get(checkout, 'result.checkoutCart');\r\n const cart = get(checkout, 'result.checkoutCart.cart');\r\n\r\n return {\r\n heading:

{invoiceSummaryTitle}

,\r\n lines: checkoutCart?.hasInvoiceLine\r\n ? InvoiceSummary({\r\n orderTotalLabel: totalAmountLabel,\r\n invoiceLabel,\r\n cart,\r\n context,\r\n typeName,\r\n telemetry,\r\n id,\r\n checkoutState: checkout.result\r\n })\r\n : undefined\r\n };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\n\r\nimport { IDlvryCheckoutV2Data } from '../dlvry-checkout-v2.data';\r\nimport { IDlvryCheckoutV2Props, IDlvryCheckoutV2Resources } from '../dlvry-checkout-v2.props.autogenerated';\r\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { ICheckoutState } from '../dlvry-checkout-v2';\r\n\r\nexport interface IOrderSummary {\r\n orderSummaryProps: INodeProps;\r\n heading?: React.ReactNode;\r\n lines?: IOrderSummaryLines;\r\n isCalculatingTotal?: boolean;\r\n resources: IDlvryCheckoutV2Resources;\r\n}\r\nexport const getOrderSummary = (input: IDlvryCheckoutV2Props, state: ICheckoutState): IOrderSummary => {\r\n const {\r\n config: { orderSummaryHeading },\r\n data: { checkout },\r\n resources: {\r\n subTotalLabel,\r\n shippingLabel,\r\n taxLabel,\r\n orderTotalLabel,\r\n loyaltyLabel,\r\n giftcardLabel,\r\n totalDiscountsLabel,\r\n freeText,\r\n toBeCalculatedText,\r\n otherCharges,\r\n customerAccountLabel\r\n },\r\n context,\r\n typeName,\r\n id,\r\n telemetry\r\n } = input;\r\n\r\n const checkoutState = get(checkout, 'result');\r\n let cart = get(checkout, 'result.checkoutCart.cart');\r\n const showLineItems = cart?.CartLines && cart?.CartLines.length > 0;\r\n const channelConfiguration = context.request.channel!;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const { channelDeliveryOptionConfig, featureState } = input.data;\r\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\r\n ?.IsEnabled;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\r\n const isShowOrHideTaxEnabled = context.request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\r\n\r\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\r\n const {\r\n config: { orderSummaryHeading }\r\n } = input;\r\n if (orderSummaryHeading) {\r\n orderSummaryHeading.text = event.target.value;\r\n }\r\n };\r\n\r\n // Use price from cart if price has previously been calculated. Otherwise add cart line prices together \"manually\"\r\n if (!state.hasCalculatedTotal && cart?.CartLines) {\r\n const sumPrice = cart?.CartLines\r\n .map((x: CartLine) => x.NetAmountWithoutTax\r\n ? x.NetAmountWithoutTax\r\n : x.Price! * (x.Quantity || 1)\r\n )\r\n .reduce((sum: number, price: number) => sum + price, 0);\r\n\r\n // Reset some values to avoid confusion with \"Free\" labels when price hasn't been calculated yet\r\n cart = {\r\n ...cart,\r\n DiscountAmount: 0,\r\n DiscountAmountWithoutTax: 0,\r\n SubtotalAmount: sumPrice,\r\n SubtotalAmountWithoutTax: sumPrice,\r\n TaxAmount: undefined,\r\n TotalAmount: undefined\r\n };\r\n }\r\n\r\n return {\r\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\r\n heading: orderSummaryHeading && orderSummaryHeading.text && (\r\n \r\n ),\r\n resources: input.resources,\r\n lines: showLineItems\r\n ? OrderSummary({\r\n checkoutState,\r\n cart,\r\n subTotalLabel,\r\n shippingLabel,\r\n taxLabel,\r\n orderTotalLabel,\r\n loyaltyLabel,\r\n giftcardLabel,\r\n totalDiscountsLabel,\r\n freeText,\r\n toBeCalculatedText,\r\n context,\r\n typeName,\r\n id,\r\n channelConfiguration,\r\n telemetry,\r\n otherChargeLabel: otherCharges,\r\n retailMultiplePickUpOptionEnabled,\r\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- existing property.\r\n isTaxIncludedInPrice: cart.IsTaxIncludedInPrice,\r\n isShowTaxBreakup: isShowOrHideTaxEnabled,\r\n customerAccountLabel\r\n })\r\n : undefined\r\n };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n IPayLoad,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport classname from 'classnames';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { focusOnCheckoutError, setCheckoutErrorFocus } from '@msdyn365-commerce-modules/checkout';\r\n\r\nexport interface ICheckoutGuidedCardProps {\r\n id?: string;\r\n step: number;\r\n title?: HeadingType;\r\n cartReady: boolean;\r\n disabled?: boolean; // Module is not available\r\n isActive?: boolean; // Step === currentStep\r\n isVisted?: boolean; // Step < currentStep\r\n isExpanded?: boolean;\r\n isReady?: boolean;\r\n isPending?: boolean;\r\n isUpdating?: boolean;\r\n isSubmitting?: boolean;\r\n isCancelAllowed?: boolean;\r\n isMobile?: boolean;\r\n hasInitialized?: boolean;\r\n hasControlGroup?: boolean;\r\n shouldFocus?: boolean;\r\n children: React.ReactNode;\r\n moduleState?: IModuleStateManager;\r\n actionContext?: IActionContext;\r\n resource: {\r\n checkoutStepTitleFormat: string;\r\n saveBtnLabel: string;\r\n changeBtnLabel: string;\r\n cancelBtnLabel: string;\r\n saveAndContinueBtnLabel: string;\r\n };\r\n telemetryContent?: ITelemetryContent;\r\n onEdit?(): void;\r\n onCancel?(): void;\r\n onSubmit?(): void;\r\n onNext(): void;\r\n}\r\n\r\n/**\r\n *\r\n * CheckoutGuidedCard component.\r\n * @extends {React.Component}\r\n */\r\nclass CheckoutGuidedCard extends React.PureComponent {\r\n private readonly editButtonRef: React.RefObject = React.createRef();\r\n\r\n private readonly formCardRef: React.RefObject = React.createRef();\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n constructor(props: ICheckoutGuidedCardProps) {\r\n super(props);\r\n this.payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n }\r\n\r\n public componentDidUpdate(prevProps: ICheckoutGuidedCardProps): void {\r\n /**\r\n * Move to next step when current step is ready.\r\n */\r\n const { isActive, isReady, onNext, isVisted, onEdit, shouldFocus, children, moduleState, actionContext } = this.props;\r\n\r\n // Move to next step after completing the current step\r\n if (isActive && isReady) {\r\n onNext();\r\n }\r\n\r\n // Set the focus to Edit button once edit button appear\r\n // (It happens when current step switch to isReady status)\r\n const prevCanEdit = prevProps.isReady && prevProps.isVisted && !!prevProps.onEdit;\r\n const canEdit = isReady && isVisted && !!onEdit;\r\n if (!prevCanEdit && canEdit) {\r\n this.focusOnEditButton();\r\n this.scrollToTitle();\r\n }\r\n\r\n // Set the focus to the first focusable element\r\n // (It happens when current step switch to isUpdating status)\r\n if (prevProps.isReady && !isReady) {\r\n this.focusOnFirstFocusableElement();\r\n }\r\n\r\n // Set the focus for the checkout error\r\n if (shouldFocus && actionContext) {\r\n const childrenModules = this._getModules(children);\r\n\r\n // Set the focus for the module within the checkout section container\r\n if (childrenModules.length > 0) {\r\n for (const childModule of childrenModules) {\r\n const childId = this._getId(childModule);\r\n const childState = moduleState?.getModule(childId);\r\n\r\n if (childState?.hasError) {\r\n void setCheckoutErrorFocus(childId, actionContext);\r\n return;\r\n }\r\n }\r\n } else {\r\n void focusOnCheckoutError(this.formCardRef, actionContext);\r\n }\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n title,\r\n disabled,\r\n isExpanded,\r\n isActive,\r\n isVisted,\r\n children,\r\n isReady,\r\n isPending,\r\n isUpdating,\r\n hasInitialized,\r\n hasControlGroup,\r\n onEdit,\r\n resource\r\n } = this.props;\r\n const { changeBtnLabel } = resource;\r\n\r\n this.payLoad.contentAction.etext = TelemetryConstant.CheckoutChange;\r\n const changeBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n const canEdit = hasControlGroup && isReady && isVisted && onEdit;\r\n\r\n return (\r\n \r\n
\r\n {this.getTitle()}\r\n\r\n {canEdit && (\r\n \r\n {changeBtnLabel}\r\n \r\n )}\r\n
\r\n\r\n \r\n
{children}
\r\n\r\n {this.renderFooder()}\r\n \r\n \r\n );\r\n }\r\n\r\n private readonly renderFooder = (): JSX.Element | null => {\r\n const { cartReady, isVisted, isReady, isSubmitting, isCancelAllowed, hasControlGroup, onCancel, onSubmit, resource } = this.props;\r\n const { saveBtnLabel, cancelBtnLabel, saveAndContinueBtnLabel } = resource;\r\n\r\n const canSubmit = !isReady && onSubmit;\r\n const canCancel = !isReady && isVisted && isCancelAllowed && onCancel;\r\n\r\n if (!hasControlGroup || (!canSubmit && !canCancel)) {\r\n return null;\r\n }\r\n\r\n this.payLoad.contentAction.etext = isVisted ? TelemetryConstant.Save : TelemetryConstant.SaveContinue;\r\n const saveBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.Cancel;\r\n const cancelBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n\r\n return (\r\n
\r\n {canSubmit && (\r\n \r\n {isVisted && isCancelAllowed ? saveBtnLabel : saveAndContinueBtnLabel}\r\n \r\n )}\r\n {canCancel && (\r\n \r\n {cancelBtnLabel}\r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n private readonly focusOnFirstFocusableElement = (): void => {\r\n const node = this.formCardRef.current as HTMLElement;\r\n const focussableElements = `\r\n a:not([disabled]),\r\n button:not([disabled]),\r\n input[type=submit]:not([disabled]),\r\n input[type=checkbox]:not([disabled]),\r\n input[type=text]:not([disabled]),\r\n input[type=radio]:not([disabled]),\r\n input[type=password]:not([disabled]),\r\n select:not([disabled]),\r\n textarea:not([disabled]),\r\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\r\n `;\r\n\r\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\r\n child && child.focus && child.focus();\r\n };\r\n\r\n private readonly focusOnEditButton = (): void => {\r\n // Focus on edit button\r\n const editButton =\r\n this.editButtonRef &&\r\n this.editButtonRef.current &&\r\n this.editButtonRef.current.focus &&\r\n (this.editButtonRef.current as HTMLElement);\r\n editButton && editButton.focus();\r\n };\r\n\r\n private readonly scrollToTitle = (): void => {\r\n // Scroll window to the title of the step that was just completed only in mobile viewport\r\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\r\n formCard && formCard.scrollIntoView();\r\n };\r\n\r\n private readonly getTitle = (): JSX.Element => {\r\n const { step, title } = this.props;\r\n const { headingTag: Tag = 'h2', text = '' } = title || {};\r\n return (\r\n \r\n \r\n {step + 1}. {` `}\r\n \r\n {text && {text}}\r\n \r\n );\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private readonly _getModules = (item: React.ReactNode): any[] => {\r\n return get(item, 'props.modules.primary') || [];\r\n };\r\n\r\n private readonly _getId = (item: React.ReactNode): string => {\r\n return get(item, 'id') || '';\r\n };\r\n}\r\n\r\nexport default CheckoutGuidedCard;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport get from 'lodash/get';\r\nimport { computed } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport GuidedCard from './guided-card';\r\n\r\nexport interface ICheckoutGuidedFormProps {\r\n items: React.ReactNode[];\r\n moduleState: IModuleStateManager;\r\n cartReady: boolean;\r\n disableGuidedCheckoutFlow?: boolean;\r\n isMobile?: boolean;\r\n isEditor?: boolean;\r\n resource: {\r\n checkoutStepTitleFormat: string;\r\n saveBtnLabel: string;\r\n changeBtnLabel: string;\r\n cancelBtnLabel: string;\r\n saveAndContinueBtnLabel: string;\r\n };\r\n requestContext?: ICoreContext;\r\n telemetryContent?: ITelemetryContent;\r\n isPaymentVerificationRedirection?: boolean;\r\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\r\n hasError?: boolean;\r\n hasShippingAddress?: boolean | undefined;\r\n hasCartDeliveryMode?: boolean | undefined;\r\n hasGuestCheckoutEmail?: boolean | undefined;\r\n isTermsAndConditionAccepted?: boolean | undefined;\r\n shouldEnableCheckoutErrorDisplayMessaging?: boolean;\r\n shouldFocusOnCheckoutError?: boolean | undefined;\r\n onSubmit?: (step: number, key: string, title: string) => void;\r\n}\r\n\r\ninterface ICheckoutGuidedFormState {\r\n currentStep: number;\r\n}\r\n\r\nconst paymentInstrumentModuleId = 'payment-instrument';\r\n\r\n/**\r\n *\r\n * CheckoutGuidedForm component.\r\n * @extends {React.Component}\r\n */\r\n@observer\r\nclass CheckoutGuidedForm extends React.PureComponent {\r\n @computed public get hasMissingInfo(): boolean {\r\n if (\r\n this.props.hasShippingAddress === false ||\r\n this.props.hasCartDeliveryMode === false ||\r\n this.props.hasGuestCheckoutEmail === false ||\r\n this.props.isTermsAndConditionAccepted === false\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n @computed public get hasOrderError(): boolean {\r\n for (const item of this.props.items) {\r\n const childId = this.getId(item);\r\n const state = this.props.moduleState.getModule(childId);\r\n\r\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n state.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\r\n );\r\n\r\n if (!isPaymentSectionContainer && !state.isDisabled && state.hasError) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public state: ICheckoutGuidedFormState = {\r\n currentStep: 0\r\n };\r\n\r\n public componentDidMount(): void {\r\n /**\r\n * Append child modules.\r\n */\r\n const childIds = this.props.items.map((item: React.ReactNode) => get(item, 'props.id'));\r\n this.props.moduleState.init({ childIds });\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { moduleState, items, resource } = this.props;\r\n if (!items || !moduleState) {\r\n return null;\r\n }\r\n\r\n const shouldCollapseAfterRedirect =\r\n this.props.isPaymentVerificationRedirection &&\r\n this.props.shouldEnableSinglePaymentAuthorizationCheckout &&\r\n !this.props.hasError &&\r\n !this.hasMissingInfo &&\r\n !this.hasOrderError;\r\n\r\n let previousModuleHasError = false;\r\n const childModule = this._enableAfterModule();\r\n\r\n return (\r\n
\r\n {items.map((item: React.ReactNode) => {\r\n const childId = this.getId(item);\r\n const step = this.getStep(childId);\r\n const title = this.getHeading(item);\r\n const state = this.props.moduleState.getModule(childId);\r\n const {\r\n isReady,\r\n isPending,\r\n isUpdating,\r\n isDisabled,\r\n isCancelAllowed,\r\n onEdit,\r\n onCancel,\r\n onSubmit,\r\n hasModuleState,\r\n hasInitialized,\r\n hasError\r\n } = state || ({} as IModuleStateManager);\r\n\r\n const shouldFocus =\r\n !!this.props.shouldEnableCheckoutErrorDisplayMessaging &&\r\n !!this.props.shouldFocusOnCheckoutError &&\r\n !previousModuleHasError &&\r\n hasError;\r\n previousModuleHasError = previousModuleHasError || shouldFocus;\r\n\r\n return (\r\n {\r\n onSubmit?.();\r\n this.props.onSubmit?.(step, childId, title.text);\r\n }}\r\n onCancel={onCancel}\r\n onEdit={onEdit}\r\n onNext={this.onNext}\r\n hasControlGroup={!this.props.disableGuidedCheckoutFlow && hasInitialized}\r\n telemetryContent={this.props.telemetryContent}\r\n moduleState={moduleState}\r\n actionContext={this.props.requestContext?.actionContext}\r\n shouldFocus={shouldFocus}\r\n >\r\n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\r\n\r\n private readonly getEnabledModules = (): string[] => {\r\n const {\r\n moduleState: { childIds, getModule }\r\n } = this.props;\r\n return childIds.filter((childId: string) => {\r\n const state = getModule(childId);\r\n return !!state && !state.isDisabled;\r\n });\r\n };\r\n\r\n /**\r\n * Check if it is a section container with payment module.\r\n * @param moduleId -- The id of the module.\r\n * @returns If it is a section container with payment module.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private readonly _enableAfterModule = (): string => {\r\n const childIds: string[] = this.props.items.map((item: React.ReactNode) => get(item, 'props.id')).filter(Boolean);\r\n let id: string = '';\r\n for (let i = 0; i < childIds.length - 1; i++) {\r\n const childId = childIds[i];\r\n const nextChildId = childIds[i + 1];\r\n if (this._isPaymentSectionContainer(childId) && nextChildId) {\r\n id = nextChildId;\r\n }\r\n }\r\n return id;\r\n };\r\n\r\n /**\r\n * Check if it is a section container with payment module.\r\n * @param moduleId -- The id of the module.\r\n * @returns If it is a section container with payment module.\r\n */\r\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\r\n const sectionState = this.props.moduleState.getModule(moduleId);\r\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n sectionState.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\r\n );\r\n\r\n if (isPaymentSectionContainer) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n private readonly getStep = (id: string): number => {\r\n return this.getEnabledModules().indexOf(id);\r\n };\r\n\r\n private readonly getId = (item: React.ReactNode): string => {\r\n return get(item, 'props.id') || '';\r\n };\r\n\r\n private readonly getHeading = (item: React.ReactNode): Heading => {\r\n return get(item, 'props.config.heading') || '';\r\n };\r\n\r\n private readonly isExpanded = (step: number, moduleChildId: string, childId: string): boolean => {\r\n if (this.props.isEditor) {\r\n // Editorial mode: Expand all the drawers\r\n return true;\r\n }\r\n if (this.props.shouldEnableSinglePaymentAuthorizationCheckout && moduleChildId === childId) {\r\n return true;\r\n }\r\n return step > -1 && step <= this.state.currentStep;\r\n };\r\n\r\n private readonly isActive = (step: number): boolean => {\r\n return step === this.state.currentStep;\r\n };\r\n\r\n private readonly isVisted = (step: number): boolean => {\r\n return step > -1 && step < this.state.currentStep;\r\n };\r\n\r\n private readonly onNext = (): void => {\r\n this.setState({\r\n currentStep: this.state.currentStep + 1\r\n });\r\n };\r\n}\r\n\r\nexport default CheckoutGuidedForm;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React, { useState } from 'react';\r\n\r\ninterface ICheckoutPlaceOrderButtonProps {\r\n canPlaceOrder: boolean;\r\n checkoutBtnText: string;\r\n telemetryContent?: ITelemetryContent;\r\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\r\n isPlaceOrderLoading?: boolean;\r\n isExpressCheckoutApplied?: boolean;\r\n isPaymentVerificationRedirection?: boolean;\r\n placeOrder(): Promise;\r\n}\r\n\r\nconst buttonsStates: React.Dispatch>[] = [];\r\n\r\n/**\r\n * On place order function.\r\n * @param isBusy -Check is busy.\r\n * @param canPlaceOrder -Check can place order.\r\n * @param placeOrder -Place order function.\r\n * @returns Set state of button.\r\n */\r\nconst onPlaceOrderHandler = (isBusy: boolean, setIsBusy: React.Dispatch>, canPlaceOrder: boolean, placeOrder: () => Promise) => async () => {\r\n if (isBusy || !canPlaceOrder) {\r\n return;\r\n }\r\n buttonsStates.map(buttonSetState => {\r\n buttonSetState(true);\r\n return true;\r\n });\r\n await placeOrder();\r\n setIsBusy(false);\r\n};\r\n\r\nconst CheckoutPlaceOrderButton: React.FC = ({\r\n checkoutBtnText,\r\n canPlaceOrder,\r\n placeOrder,\r\n telemetryContent,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n isPlaceOrderLoading,\r\n isExpressCheckoutApplied,\r\n isPaymentVerificationRedirection\r\n}) => {\r\n const [isBusy, setIsBusy] = useState(false);\r\n buttonsStates.push(setIsBusy);\r\n const payload = getPayloadObject(TelemetryEvent.Purchase, telemetryContent!, checkoutBtnText, '');\r\n const attributes = getTelemetryAttributes(telemetryContent!, payload);\r\n\r\n if (shouldEnableSinglePaymentAuthorizationCheckout && (!isExpressCheckoutApplied || isPaymentVerificationRedirection)) {\r\n return (\r\n \r\n {checkoutBtnText}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {checkoutBtnText}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutPlaceOrderButton;\r\n","import { IActionContext } from \"@msdyn365-commerce/core\";\r\nimport { callActionOrExecute, DataServiceQuery, SalesOrder, IDataServiceRequest } from \"@msdyn365-commerce/retail-proxy\";\r\n//import * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\n\r\nfunction updateTransactionCustomerQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n}\r\n\r\nexport function createUpdateTransactionCustomerInput(salesOrder: SalesOrder): IDataServiceRequest {\r\n const query = updateTransactionCustomerQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'UpdateTransactionCustomer',\r\n true,\r\n '',\r\n 'false',\r\n { bypassCache: 'get', returnEntity: '' },\r\n {\r\n salesOrder: salesOrder\r\n }\r\n );\r\n}\r\n\r\nexport async function updateTransactionCustomerAsync(context: IActionContext, salesOrder: SalesOrder): Promise {\r\n const request = createUpdateTransactionCustomerInput(salesOrder);\r\n return callActionOrExecute(request, context);\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { SalesOrder, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartCheckout } from '@msdyn365-commerce-modules/checkout';\r\nimport { EmptyActiveCart } from './empty-active-cart';\r\nimport { updateTransactionCustomerAsync } from '../../../actions/update-transaction-customer';\r\n\r\nexport const PlaceOrder = async (\r\n ctx: IActionContext,\r\n checkoutState: ICheckoutState | undefined,\r\n orderedProducts: SimpleProduct[] | undefined,\r\n redirect: boolean,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean\r\n) => {\r\n return new Promise(async (resolve: (value?: unknown) => void, reject: (reason?: any) => void) => {\r\n ctx.telemetry.information('Checkout place-order method is triggered.');\r\n\r\n let salesOrder: SalesOrder;\r\n\r\n // Proceed checkout\r\n try {\r\n salesOrder = await CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n // Update the customer on the cart now.\r\n await updateTransactionCustomerAsync(ctx, salesOrder);\r\n\r\n // Remove purchased items from the active cart\r\n try {\r\n ctx.telemetry.information('Checkout emptyActiveCart is called.');\r\n await EmptyActiveCart(ctx);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n if (redirect) {\r\n ctx.telemetry.information('Redirect to order confirmation page.');\r\n\r\n // Redirect to the order confirmation page\r\n const orderConfirmationUrl = getUrlSync('orderConfirmation', ctx) || '';\r\n if (!orderConfirmationUrl) {\r\n reject(new Error('Error: No orderConfirmationUrl'));\r\n return;\r\n }\r\n\r\n const separator = orderConfirmationUrl.includes('?') ? '&' : '?';\r\n const url = `${orderConfirmationUrl}${separator}transactionId=${salesOrder.Id}`;\r\n window.location.assign(url);\r\n } else {\r\n ctx.telemetry.information('Not redirect to order confirmation page.');\r\n\r\n if (checkoutState) {\r\n const result = await checkoutState.updateSalesOrder({\r\n newSalesOrder: salesOrder,\r\n newOrderedProducts: orderedProducts || []\r\n });\r\n\r\n if (result.status === 'FAILED') {\r\n reject(new Error('Error: Updating error state failed'));\r\n return;\r\n }\r\n } else {\r\n reject(new Error('Error: No checkout state'));\r\n return;\r\n }\r\n resolve();\r\n }\r\n });\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartState, getCheckoutState } from '@msdyn365-commerce/global-state';\r\n\r\nexport const EmptyActiveCart = async (ctx: IActionContext): Promise => {\r\n let cartState;\r\n let checkoutState;\r\n const lineItemIdsToRemove = [];\r\n\r\n try {\r\n cartState = await getCartState(ctx);\r\n checkoutState = await getCheckoutState(ctx);\r\n } catch (error) {\r\n throw error;\r\n }\r\n\r\n if (!cartState || !cartState.cart) {\r\n throw new Error('Fail to fetch active cart');\r\n }\r\n\r\n if (!checkoutState || !checkoutState.checkoutCart) {\r\n throw new Error('Fail to fetch checkoutCart cart');\r\n }\r\n\r\n const activeCart = cartState.cart;\r\n const checkoutCart = checkoutState.checkoutCart.cart;\r\n\r\n for (const activeCartLine of activeCart.CartLines || []) {\r\n for (const checkoutCartLine of checkoutCart.CartLines || []) {\r\n if (activeCartLine.LineId && activeCartLine.LineId === checkoutCartLine.LineId) {\r\n lineItemIdsToRemove.push(activeCartLine.LineId);\r\n }\r\n }\r\n }\r\n\r\n try {\r\n await cartState.removeCartLines({ cartLineIds: lineItemIdsToRemove });\r\n await cartState.removeAllPromoCodes({});\r\n await checkoutState.removeCheckoutCartId({});\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport * as React from 'react';\n\nimport { IDlvryCheckoutV2Data } from '../dlvry-checkout-v2.data';\nimport { IDlvryCheckoutV2Props } from '../dlvry-checkout-v2.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: IDlvryCheckoutV2Props, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\n const emailDeliveryModeCode = get(input, 'context.request.channel.EmailDeliveryModeCode');\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const _getDeliveryLocation = (cartLine: CartLine): string => {\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\n return '';\n }\n\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\n return location.OrgUnitNumber === cartLine.FulfillmentStoreId;\n });\n\n return locationMatch && locationMatch.OrgUnitName;\n };\n\n const _getProduct = (productId: number): SimpleProduct | undefined => {\n const products = get(input, 'data.products.result') || [];\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n };\n\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\n const {\n id,\n typeName,\n context,\n config: { imageSettings, showShippingChargesForLineItems },\n resources: {\n quantityDisplayString,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n productDimensionTypeAmount,\n configString,\n inputQuantityAriaLabel,\n discountStringText,\n shippingCharges\n },\n context: {\n request: { gridSettings }\n }\n } = input;\n const catalogs = input.data.catalogs?.result;\n if (!product) {\n return;\n }\n\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return (\n \n );\n };\n\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\n const {\n resources: { pickUpAtStoreWithLocationText }\n } = input;\n\n return {\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\n label: {pickUpAtStoreWithLocationText},\n location:
{pickupDeliveryLocation}
\n };\n };\n\n const _getEmailDeliveryComponents = (): IEmailDelivery => {\n const {\n resources: { emailDeliveryText }\n } = input;\n\n return {\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\n label: {emailDeliveryText}\n };\n };\n\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\n return items.map(cartLine => {\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const isPickUp = _getCartPickDeliveryMode(cartLine);\n const isEmailDelivery =\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\n return {\n LineId: cartLine.LineId || '',\n LineItem: { className: 'ms-checkout__line-item' },\n item: _getLineItemComponent(cartLine),\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined,\n emailDelivery: isEmailDelivery ? _getEmailDeliveryComponents() : undefined\n };\n });\n };\n\n const _getCartPickDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode ===\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode === pickupDeliveryModeCode\n : false;\n };\n\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode !==\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode !== pickupDeliveryModeCode\n : false;\n };\n\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\n const {\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? shippingCountCheckoutLineItem\n : type === 'pickup'\n ? inStorePickUpLabel\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _countItems = (items: CartLine[]): number => {\n return items.reduce((count, item) => {\n return count + (item.Quantity || 0);\n }, 0);\n };\n\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n if (type === 'ship') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? _getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n } else if (type === 'pickup') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? _getCartPickDeliveryMode(cartLine) : null\n );\n }\n return cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === emailDeliveryModeCode);\n };\n\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\n if ((pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) && (type === 'pickup' || type === 'email')) {\n return;\n }\n\n const items = _filterItemsByDiliveryType(type);\n\n if (items.length === 0) {\n return undefined;\n }\n\n const count = _countItems(items);\n const title = _getGroupTitleComponent(count, type);\n\n return {\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n heading:
{title}
,\n lineItems: _getLineItemsComponents(items)\n };\n };\n\n const _getLineItems = (): ILineItems | undefined => {\n const {\n context,\n config: { lineItemsHeading },\n data: { products },\n resources: { editCartText }\n } = input;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.EditCart);\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const groupClass = retailMultiplePickUpOptionEnabled ? ' multiple-pickup-enabled' : '';\n if (!cart || !cart.CartLines || cart.CartLines.length === 0 || !products) {\n return undefined;\n }\n\n return {\n LineItems: { className: `ms-checkout__line-items${groupClass}` },\n Header: { className: 'ms-checkout__line-items-header' },\n heading: lineItemsHeading && lineItemsHeading.text && (\n \n ),\n editLink: (\n \n {editCartText}\n \n ),\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\n itemsForShip: _getLineItemsByDeliveryType('ship'),\n itemsForEmail: _getLineItemsByDeliveryType('email'),\n itemsGroupWithMulitplePickupMode: retailMultiplePickUpOptionEnabled\n ? _getLineItemsByDeliveryTypeWithMulitplePickupMode()\n : undefined\n };\n };\n\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { lineItemsHeading }\n } = input;\n if (lineItemsHeading) {\n lineItemsHeading.text = event.target.value;\n }\n };\n\n const _getGroupTitleComponentWithMultiplePickUp = (\n count: number,\n type: deliveryType,\n deliveryMode?: string,\n fulFillmentStoreId?: string\n ): string => {\n const {\n resources: { itemLabel, itemsLabel }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n let pickupDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n pickupDeliveryModeDesc = pickupDeliveryModeDesc\n ? pickupDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === deliveryMode)?.Description!;\n });\n\n const pickupTitle: string = `${pickupDeliveryModeDesc}, ${fulFillmentStoreId}`;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? `(${count} ${suffix})`\n : type === 'pickup'\n ? `${pickupTitle} (${count} ${suffix})`\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _filterItemsByMultiplePickupMode = (): CartLine[][] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cart.CartLines);\n const cartLinesGroup: CartLine[] = [];\n const cartLinesGrp: CartLine[][] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryMode, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryMode] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n cartLinesGrp.push(cartLine);\n });\n });\n\n return cartLinesGrp;\n };\n\n const _getLineItemsByDeliveryTypeWithMulitplePickupMode = (): ILineItemDeliveryGroup[] | undefined => {\n if (pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) {\n return;\n }\n\n const {\n resources: { multiplePickUpLabel, shippingLable }\n } = input;\n\n const items = _filterItemsByMultiplePickupMode();\n\n if (items.length === 0) {\n return undefined;\n }\n\n const lineItemDeliveryGroup: ILineItemDeliveryGroup[] = [];\n items.map(item => {\n const count = _countItems(item);\n const cartLine = item[0];\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const type: deliveryType =\n cartLine.FulfillmentStoreId && cartLine.DeliveryMode\n ? 'pickup'\n : cartLine.FulfillmentStoreId === '' &&\n cartLine.DeliveryMode === emailDeliveryModeCode &&\n !StringExtensions.isNullOrEmpty(emailDeliveryModeCode)\n ? 'email'\n : 'ship';\n const title = _getGroupTitleComponentWithMultiplePickUp(count, type, cartLine.DeliveryMode, pickupDeliveryLocation);\n const groupTitle = type === 'pickup' ? multiplePickUpLabel : type === 'ship' ? shippingLable : 'email';\n const iconClass = `ms-checkout__line-items-group-title-multiple-pickup-${type}icon`;\n lineItemDeliveryGroup.push({\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group multiple-pickup', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n lineItemWraperIcon:
,\n lineItemWraper:
{groupTitle}
,\n heading:
{title}
,\n lineItems: _getLineItemsComponents(item)\n });\n });\n\n return lineItemDeliveryGroup;\n };\n\n return _getLineItems();\n};\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\r\nimport { AsyncResultStatus, Cart, CartLineValidationResults } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n updateLineDeliverySpecificationsAsync,\r\n validateForCheckoutAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport {\r\n Address,\r\n CartLine,\r\n CustomerBalances,\r\n DeliveryPreferenceType,\r\n LineDeliverySpecification,\r\n SimpleProduct,\r\n TokenizedPaymentCard\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport {\r\n ArrayExtensions,\r\n getAvailabilitiesForCartLineItems,\r\n IProductInventoryInformation,\r\n ProductAvailabilitiesForCartLineItems,\r\n validateCartLinesInventory\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IModuleProps,\r\n INodeProps,\r\n ITelemetryContent,\r\n TelemetryConstant,\r\n Waiting,\r\n Modal,\r\n ModalBody,\r\n ModalHeader\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { ErrorCode, ErrorLocation } from '@msdyn365-commerce/global-state';\r\nimport classnames from 'classnames';\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport { action, computed, get, reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IDlvryCheckoutV2Data } from './dlvry-checkout-v2.data';\r\nimport { ICheckoutHeadingData, IDlvryCheckoutV2Props } from './dlvry-checkout-v2.props.autogenerated';\r\nimport AlertComponent from './components/alert';\r\nimport { getInvoicePaymentSummary, IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\r\nimport { ILineItems } from './components/get-line-items';\r\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\r\nimport GuidedFormComponent from './components/guided-form';\r\nimport PlaceOrderButtonComponent from './components/place-order-button';\r\nimport placeOrder from './methods/place-order';\r\nimport { focusOnCheckoutError } from '@msdyn365-commerce-modules/checkout';\r\nimport { AsyncResultStatusCode, IExpressPaymentDetails } from '@msdyn365-commerce-modules/checkout';\r\nimport { getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\nexport * from './components/get-line-items';\r\nexport * from './components/get-order-summary';\r\n\r\n/**\r\n * Device type.\r\n */\r\ntype DeviceType = 'Mobile';\r\n\r\n/**\r\n * The Checkout state.\r\n */\r\nexport interface ICheckoutState {\r\n errorMessage: string;\r\n errorDetails: string;\r\n errorCorrelationId: string;\r\n errorTimeout: boolean;\r\n isValidationPassed: boolean;\r\n isPlaceOrderLoading?: boolean;\r\n isPlaceOrderClicked?: boolean;\r\n hasCalculatedTotal?: boolean;\r\n isCalculatingTotal?: boolean;\r\n productNames: { [key: number]: string };\r\n showSplitUpDeliveryModal: boolean;\r\n retrievingProductNames: boolean;\r\n}\r\n\r\n/**\r\n * The Checkout view props.\r\n * @extends IDlvryCheckoutV2Props\r\n */\r\nexport interface ICheckoutViewProps extends IDlvryCheckoutV2Props {\r\n className: string;\r\n canShow?: boolean;\r\n isCalculatingTotal?: boolean;\r\n isEmptyCart?: boolean;\r\n isConsentGiven?: boolean;\r\n hasError?: boolean;\r\n isPaymentVerificationRedirection?: boolean;\r\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\r\n cartStatus?: string;\r\n isMobile?: boolean;\r\n isEditorialMode?: boolean;\r\n backToShoppingUrl?: string;\r\n editCartLink?: string;\r\n hasSalesOrder: boolean;\r\n hasInvoiceLine?: boolean;\r\n\r\n checkoutProps: IModuleProps;\r\n headerProps: INodeProps;\r\n bodyProps: INodeProps;\r\n mainProps: INodeProps;\r\n mainControlProps: INodeProps;\r\n sideProps: INodeProps;\r\n sideControlFirstProps: INodeProps;\r\n sideControlSecondProps: INodeProps;\r\n sideControlThirdProps: INodeProps;\r\n termsAndConditionsProps: INodeProps;\r\n\r\n guidedForm?: React.ReactNode;\r\n title?: React.ReactNode;\r\n loading?: React.ReactNode;\r\n alert?: React.ReactNode;\r\n orderSummary?: IOrderSummary;\r\n invoicePaymentSummary?: IInvoicePaymentSummary;\r\n lineItems?: ILineItems;\r\n calculateTotalButton?: React.ReactNode;\r\n placeOrderButton?: React.ReactNode;\r\n termsAndConditions?: React.ReactNode;\r\n keepShoppingButton?: React.ReactNode;\r\n orderConfirmation?: React.ReactNode;\r\n\r\n checkoutExpressPaymentContainer?: React.ReactNode;\r\n checkoutErrorRef?: React.RefObject;\r\n\r\n splitDeliveryModal?: ICheckoutSplitDeliveryModalProps;\r\n}\r\n\r\n/**\r\n * The checkout module props interface.\r\n */\r\nexport interface ICheckoutModuleProps extends IDlvryCheckoutV2Props, IModuleStateProps {}\r\n\r\nexport interface ICheckoutSplitDeliveryModalProps {\r\n Container: INodeProps | null;\r\n header: React.ReactNode;\r\n message: React.ReactNode;\r\n button: React.ReactNode;\r\n modal: React.ReactNode;\r\n}\r\n\r\nconst expressPaymentSectionClassName = 'msc-express-payment-container';\r\n\r\n/**\r\n *\r\n * CheckoutContainer component.\r\n * @extends {React.Component}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass Checkout extends React.PureComponent {\r\n @computed get cartStatus(): Msdyn365.AsyncResultStatus {\r\n // Since data.checkout is supposed to be deferred but it will report it's status a 'SUCCESS' immediately,\r\n // we need to fake the status a bit.\r\n return this.props.data.checkout?.status === 'SUCCESS'\r\n ? this.props.data.checkout.result?.timedOut\r\n ? 'FAILED'\r\n : this.props.data.checkout.result?.status === 'UPDATING' ? 'LOADING' : this.props.data.checkout?.status\r\n : this.props.data.checkout?.status;\r\n }\r\n\r\n @computed get isEmptyCart(): boolean {\r\n if (this.isEditorialMode) {\r\n // Editorial mode: Ignore empty cart\r\n return false;\r\n }\r\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\r\n return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\r\n }\r\n\r\n @computed get hasError(): boolean {\r\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\r\n return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\r\n }\r\n\r\n @computed get isEditorialMode(): boolean {\r\n return this.props.context.request.params.isEditor;\r\n }\r\n\r\n @computed get canPlaceOrder(): boolean {\r\n const isTermsAndConditionAccepted = this.props.data.checkout.result && this.props.data.checkout.result?.isTermsAndConditionAccepted;\r\n\r\n const shouldEnableSinglePaymentAuthorizationCheckout =\r\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\r\n\r\n const disableForOBO = Msdyn365.isOboRequest(this.props.context.request) && !this.isPaidOffByCustomerAccount;\r\n\r\n // If isTermsAndConditionAccepted is undefined means TermsAndCondition module is not added to page and we should able to place order.\r\n return (\r\n this.props.data.checkout.result?.checkoutCart.status === 'READY' &&\r\n this.props.moduleState.isReady &&\r\n (isTermsAndConditionAccepted === undefined || isTermsAndConditionAccepted || shouldEnableSinglePaymentAuthorizationCheckout) &&\r\n (this.state.errorMessage === '' ||\r\n shouldEnableSinglePaymentAuthorizationCheckout ||\r\n (this.props.data.checkout.result?.isPaymentVerificationRedirection ?? false)) &&\r\n !(shouldEnableSinglePaymentAuthorizationCheckout && disableForOBO)\r\n );\r\n }\r\n\r\n @computed get isPaidOffByCustomerAccount(): boolean {\r\n const amountDue = this.props.data.checkout.result?.checkoutCart.cart.TotalAmount ?? 0;\r\n const customerAccountAmount = this.props.data.checkout.result?.customerAccountAmount ?? 0;\r\n\r\n return customerAccountAmount === amountDue;\r\n }\r\n\r\n @computed get isCartReady(): boolean {\r\n return (\r\n !this.props.data.checkout.result?.deferred &&\r\n !!this.props.data.checkout.result?.checkoutCart?.cart &&\r\n this.props.data.customerInformation.status !== 'LOADING' &&\r\n this.props.data.featureState.status !== 'LOADING'\r\n );\r\n }\r\n\r\n @computed get getLoyaltyAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n if (!checkoutState || !checkoutState.loyaltyAmount) {\r\n return 0;\r\n }\r\n return checkoutState.loyaltyAmount;\r\n }\r\n\r\n @computed get maxPaymentAmount(): number {\r\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\r\n if (!cart) {\r\n return 0;\r\n }\r\n\r\n // Use customer account after loyalty.\r\n const amountDue = Math.max(0, (cart.TotalAmount || 0) - this.getLoyaltyAmount);\r\n\r\n // If the user has a mandatory credit limit, then the max amount must not be more than that\r\n if (this.props.data.customerInformation?.result?.MandatoryCreditLimit) {\r\n return Math.min(this.getAvailableCredit(this.props.data.creditBalances?.result), amountDue);\r\n }\r\n return amountDue;\r\n }\r\n\r\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\r\n const properties =\r\n this.props.data.checkout?.result?.checkoutCart?.cart?.ExtensionProperties?.find(\r\n property => property.Key === 'expressPaymentDetails'\r\n )?.Value?.StringValue ?? '';\r\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\r\n }\r\n\r\n public state: ICheckoutState = {\r\n errorMessage: '',\r\n errorDetails: '',\r\n errorCorrelationId: '',\r\n errorTimeout: false,\r\n isValidationPassed: false,\r\n isPlaceOrderLoading: false,\r\n isPlaceOrderClicked: false,\r\n hasCalculatedTotal: false,\r\n isCalculatingTotal: false,\r\n productNames: {},\r\n showSplitUpDeliveryModal: false,\r\n retrievingProductNames: false\r\n };\r\n\r\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n\r\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\r\n\r\n private readonly showCalculateButton: boolean = false;\r\n\r\n public componentDidMount(): void {\r\n const {\r\n resources: { genericErrorMessage }\r\n } = this.props;\r\n\r\n void this.props.data.checkout.result?.initialize(false)\r\n .catch((error) => {\r\n // There should be other handlers for other types of errors, this only needs to handle timeout\r\n if (error.name === 'ActionError' && error.status === 'Timeout') {\r\n this.props.data.checkout.result?.setTimedOut(true);\r\n // Show timeout error message\r\n this.setState({ errorTimeout: true });\r\n }\r\n });\r\n\r\n when(\r\n () => this.asyncResultStatus !== AsyncResultStatusCode.LOADING,\r\n async () => {\r\n if (this.expressPaymentDetailsFromCartPage) {\r\n const {\r\n email,\r\n tenderLine,\r\n tokenizedPaymentCard,\r\n paymentTenderType: paymentTenderTypeFromCartPage,\r\n isExpressCheckoutAppliedInCartPage,\r\n isExpressAddressAppliedInCartPage,\r\n cardPaymentAcceptResult,\r\n address\r\n } = this.expressPaymentDetailsFromCartPage;\r\n\r\n this.props.data.checkout.result?.updateExpressCheckoutDetails({\r\n newEmailAddressFromExpressCheckout: email ?? '',\r\n newTenderLine: tenderLine,\r\n newTokenizedPaymentCard: tokenizedPaymentCard,\r\n newPaymentTenderType: paymentTenderTypeFromCartPage,\r\n newIsExpressCheckoutApplied: isExpressCheckoutAppliedInCartPage,\r\n newIsExpressAddressApplied: isExpressAddressAppliedInCartPage,\r\n newCardPaymentAcceptResult: cardPaymentAcceptResult\r\n });\r\n\r\n if (isExpressAddressAppliedInCartPage && address) {\r\n this.props.data.checkout.result?.updateBillingAddressFromExpressCheckout({\r\n newBillingAddressFromExpressCheckout: address\r\n });\r\n this.props.data.checkout.result?.updateShippingAddressFromExpressCheckout({\r\n newShippingAddressFromExpressCheckout: address\r\n });\r\n } else {\r\n void this._saveShippingAndBillingAddress(tokenizedPaymentCard);\r\n }\r\n\r\n this.props.data.checkout.result?.checkoutCart.updateExtensionProperties({\r\n newExtensionProperties: [\r\n {\r\n Key: 'expressPaymentDetails',\r\n Value: { StringValue: '' }\r\n }\r\n ]\r\n });\r\n }\r\n }\r\n );\r\n\r\n when(\r\n () => this.hasError,\r\n () => {\r\n this.setState({\r\n errorMessage: genericErrorMessage,\r\n errorDetails: '',\r\n errorCorrelationId: ''\r\n });\r\n this.props.context.telemetry.error('Failed to get cart');\r\n }\r\n );\r\n\r\n when(\r\n () => {\r\n return this.isEmptyCart;\r\n },\r\n () => {\r\n this.redirectToCartPage('Cart is empty, but no editCartLink found');\r\n }\r\n );\r\n\r\n when(\r\n () => this.isCartReady,\r\n async () => {\r\n await this.validateForCheckout();\r\n\r\n /* if (this.props.config.autoApplyMaxAvailableCredit) {\r\n await this.addPaymentMax();\r\n } */\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkoutAppliedState.result,\r\n () => {\r\n this.setState({ hasCalculatedTotal: false });\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkoutAppliedState.result,\r\n () => {\r\n if (this.state.errorMessage === this.props.resources.invalidRequestedDeliveryDate) {\r\n this.props.moduleState.setHasError(false);\r\n this.props.moduleState.onUpdating();\r\n this.setState({ errorMessage: '', errorDetails: '', errorCorrelationId: '' });\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.moduleState.isReady,\r\n () => {\r\n this.onContainerReady();\r\n }\r\n );\r\n\r\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.\r\n reaction(\r\n () =>\r\n this.props.data.checkout.result &&\r\n this.props.data.checkout.result.checkoutCart.cart &&\r\n this.props.data.checkout.result.checkoutCart.cart.TotalAmount,\r\n async totalAmount => {\r\n if (this.props.config.autoApplyMaxAvailableCredit && this.state.hasCalculatedTotal) {\r\n await this.addPaymentMax();\r\n }\r\n }\r\n );\r\n\r\n // Reaction to call place order when isPaymentSectionContainerReady is true for new checkout flow.\r\n reaction(\r\n () => this.props.data.checkout.result?.isPaymentSectionContainerReady,\r\n async isReady => {\r\n if (\r\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\r\n isReady &&\r\n !this.props.data.checkout.result?.redirectAdditionalContext &&\r\n (!this.props.data.checkout.result?.isExpressCheckoutApplied ||\r\n this.props.data.checkout.result?.isPaymentVerificationRedirection)\r\n ) {\r\n if (!this.state.isPlaceOrderLoading) {\r\n this.setState({ isPlaceOrderLoading: true });\r\n }\r\n\r\n this.props.telemetry.information(\r\n 'Call onPlaceOrder as reaction when isPaymentSectionContainerReady is updated for single auth payment.'\r\n );\r\n\r\n await this.onPlaceOrder();\r\n\r\n // If 3D authentication redirection, don't update isPlaceOrderLoading\r\n if (!this.props.data.checkout.result.isPaymentVerificationRequired) {\r\n this.setState({ isPlaceOrderLoading: false });\r\n }\r\n }\r\n }\r\n );\r\n\r\n // Reaction to enable place order button when isPaymentSectionContainerHasError is true for new checkout flow.\r\n reaction(\r\n () => this.props.data.checkout.result?.isPaymentSectionContainerHasError,\r\n hasError => {\r\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\r\n this.setState({ isPlaceOrderLoading: false });\r\n\r\n this.props.telemetry.information(\r\n 'Enable place order button as reaction when isPaymentSectionContainerHasError is updated to true for single auth payment.'\r\n );\r\n } else {\r\n this.props.telemetry.information(\r\n 'No reaction when isPaymentSectionContainerHasError is updated to false or not single auth payment.'\r\n );\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkout.result?.isBillingAddressHasError,\r\n hasError => {\r\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\r\n this.setState({ isPlaceOrderLoading: false });\r\n\r\n this.props.data.checkout.result?.updateIsBillingAddressHasError({ newIsBillingAddressHasError: false });\r\n\r\n this.props.telemetry.information(\r\n 'Enable place order button as reaction when isBillingAddressHasError is updated to true for single auth payment.'\r\n );\r\n } else {\r\n this.props.telemetry.information(\r\n 'No reaction when isBillingAddressHasError is updated to false or not single auth payment.'\r\n );\r\n }\r\n }\r\n );\r\n\r\n // Reaction to enable place order button when redirection is true for new checkout flow.\r\n reaction(\r\n () => this.canPlaceOrder,\r\n async () => {\r\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && this.canPlaceOrder) {\r\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\r\n await this.props.data.checkout.result.updateIsPlaceOrderEnabledInRedirection({\r\n newIsPlaceOrderEnabledInRedirection: true\r\n });\r\n\r\n this.props.telemetry.information(\r\n 'Set isPaymentVerificationRedirection to true as reaction when canPlaceOrder is updated to true for single auth payment.'\r\n );\r\n } else {\r\n this.props.telemetry.information(\r\n 'No reaction when canPlaceOrder is updated to true but isPaymentVerificationRedirection is false for single auth payment.'\r\n );\r\n this.props.telemetry.information(\r\n `isOBORequest is ${Msdyn365.isOboRequest(this.props.context.request)} and canPlaceOrder is ${\r\n this.canPlaceOrder\r\n }.`\r\n );\r\n }\r\n } else {\r\n this.props.telemetry.information('No reaction when canPlaceOrder is updated to false or not single auth payment.');\r\n }\r\n }\r\n );\r\n\r\n // Reaction to update the error message when there is a checkout error.\r\n reaction(\r\n () => this.props.data.checkout.result?.checkoutError,\r\n checkoutError => {\r\n const checkoutErrorLocation: boolean = checkoutError?.errorLocation === ErrorLocation.Checkout;\r\n // If there is an Error in CheckoutPaymentInstrument module, checkout error location will be updated.\r\n const checkoutPaymentErrorLocation: boolean =\r\n checkoutError?.errorCode === ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment\r\n ? checkoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument\r\n : checkoutErrorLocation;\r\n if (\r\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\r\n checkoutError &&\r\n checkoutError.errorMessage &&\r\n (checkoutErrorLocation ? checkoutErrorLocation : checkoutPaymentErrorLocation)\r\n ) {\r\n this._setErrorMessage(checkoutError.errorMessage);\r\n }\r\n }\r\n );\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (\r\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\r\n this.props.data.checkout.result?.shouldFocusOnCheckoutError &&\r\n this.state.errorMessage\r\n ) {\r\n void focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line complexity -- ignore the complexity.\r\n public render(): JSX.Element {\r\n const {\r\n moduleState,\r\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\r\n resources\r\n } = this.props;\r\n const {\r\n errorMessage,\r\n errorDetails,\r\n errorCorrelationId\r\n } = this.state;\r\n const { calculateTotalText, backToShopping, placeOrderText, confirmPaymentText, genericErrorMessage } = resources;\r\n const checkoutClass = classnames('ms-checkout', className);\r\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\r\n\r\n // @ts-expect-error - check the key of slot\r\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\r\n\r\n // @ts-expect-error - check the key of slot\r\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\r\n\r\n const isConsentGiven =\r\n this.props.context.request &&\r\n this.props.context.request.cookies &&\r\n this.props.context.request.cookies.isConsentGiven &&\r\n this.props.context.request.cookies.isConsentGiven();\r\n\r\n const isMobile =\r\n this.props.context.request &&\r\n this.props.context.request.device &&\r\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\r\n\r\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\r\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\r\n\r\n const termsAndConditions =\r\n this.props.slots.termsAndConditions && this.props.slots.termsAndConditions.length > 0 && this.props.slots.termsAndConditions[0];\r\n\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\r\n const backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n\r\n const hasInvoiceLine = this.props.data.checkout && this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\r\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderText;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const shouldEnableSinglePaymentAuthorizationCheckout =\r\n this.props.data.checkout?.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const isExpressCheckoutApplied = this.props.data.checkout?.result?.isExpressCheckoutApplied ?? false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const hasCartDeliveryMode = this.props.data.checkout?.result?.hasCartDeliveryMode;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const hasGuestCheckoutEmail = this.props.data.checkout?.result?.hasGuestCheckoutEmail;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const isTermsAndConditionAccepted = this.props.data.checkout?.result?.isTermsAndConditionAccepted;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const isPaymentVerificationRedirection = this.props.data.checkout?.result?.isPaymentVerificationRedirection ?? false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const shouldEnableCheckoutErrorDisplayMessaging =\r\n this.props.data.checkout?.result?.shouldEnableCheckoutErrorDisplayMessaging ?? false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const shouldFocusOnCheckoutError = this.props.data.checkout?.result?.shouldFocusOnCheckoutError;\r\n\r\n let hasExpressPaymentContainer = false;\r\n\r\n if (\r\n typeof window !== 'undefined' &&\r\n (document?.getElementsByClassName(expressPaymentSectionClassName) as HTMLCollectionOf)[0]?.style.display === ''\r\n ) {\r\n hasExpressPaymentContainer = true;\r\n }\r\n\r\n let viewProps: ICheckoutViewProps = {\r\n ...this.props,\r\n className: checkoutClass,\r\n checkoutErrorRef: this.checkoutErrorRef,\r\n isEmptyCart: this.isEmptyCart,\r\n isConsentGiven,\r\n hasError: this.hasError,\r\n isPaymentVerificationRedirection: this.props.data.checkout?.result?.isPaymentVerificationRedirection,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n hasSalesOrder:\r\n this.props.data.checkout &&\r\n this.props.data.checkout.result !== undefined &&\r\n this.props.data.checkout.result.salesOrder !== undefined,\r\n hasInvoiceLine,\r\n cartStatus: this.cartStatus,\r\n isMobile,\r\n backToShoppingUrl,\r\n editCartLink,\r\n isEditorialMode: this.isEditorialMode,\r\n orderConfirmation:\r\n this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\r\n ? this.props.slots.orderConfirmation[0]\r\n : undefined,\r\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\r\n headerProps: { className: 'ms-checkout__head' },\r\n bodyProps: { className: 'ms-checkout__body' },\r\n mainProps: { className: 'ms-checkout__main' },\r\n mainControlProps: { className: 'ms-checkout__main-control' },\r\n sideProps: { className: hasExpressPaymentContainer ? 'ms-checkout__has-express-side' : 'ms-checkout__side' },\r\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\r\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\r\n sideControlThirdProps: { className: 'ms-checkout__side-control-third' },\r\n termsAndConditionsProps: { className: 'ms-checkout__terms-and-conditions' },\r\n title: checkoutHeading && this.renderMsdyn365Text(checkoutHeading),\r\n checkoutExpressPaymentContainer,\r\n splitDeliveryModal: this.getSplitUpDeliveryMessage()\r\n };\r\n\r\n if (this.isLoading()) {\r\n viewProps = {\r\n ...viewProps,\r\n loading: (\r\n
\r\n \r\n
{this.props.resources.checkoutLoadingText}
\r\n
\r\n )\r\n };\r\n } else if (this.state.errorTimeout) {\r\n viewProps = {\r\n ...viewProps,\r\n alert: \r\n };\r\n } else if (this.hasError) {\r\n viewProps = {\r\n ...viewProps,\r\n alert: \r\n };\r\n } else {\r\n viewProps = {\r\n ...viewProps,\r\n alert: errorMessage &&\r\n ,\r\n canShow: true,\r\n isCalculatingTotal: this.state.isCalculatingTotal,\r\n guidedForm: checkoutInformation ? (\r\n {\r\n const checkout = await this.props.data.checkoutAppliedState;\r\n const applied = checkout.applied;\r\n\r\n // Wait for state to update, will take a little bit\r\n when(\r\n // Calculate total if all information is applied\r\n () => applied.customerInformation && applied.deliveryOptions && applied.shippingInformation && this.props.moduleState.isReady,\r\n async () => {\r\n // Check if calculate should be available, for example if a calculation is already in progress etc\r\n if (!this.state.isCalculatingTotal && !this.state.hasCalculatedTotal && this.canPlaceOrder) {\r\n await this.calculateTotal();\r\n }\r\n },\r\n { timeout: 2000 }\r\n );\r\n }\r\n }}\r\n />\r\n ) : (\r\n undefined\r\n ),\r\n orderSummary: getOrderSummary(this.props, this.state),\r\n invoicePaymentSummary: getInvoicePaymentSummary(this.props),\r\n lineItems: this.renderEmptyLineItems(),\r\n calculateTotalButton: this.showCalculateButton && (\r\n \r\n {calculateTotalText}\r\n \r\n ),\r\n placeOrderButton: (\r\n \r\n ),\r\n termsAndConditions,\r\n keepShoppingButton: backToShoppingUrl && (\r\n \r\n {backToShopping}\r\n \r\n )\r\n };\r\n }\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n @computed public get asyncResultStatus(): AsyncResultStatus | undefined {\r\n const isLoading = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.LOADING);\r\n if (isLoading) {\r\n return AsyncResultStatusCode.LOADING;\r\n }\r\n\r\n const isSuccess = Object.values(this.props.data).every(data => get(data, 'status') === AsyncResultStatusCode.SUCCESS);\r\n if (isSuccess) {\r\n return AsyncResultStatusCode.SUCCESS;\r\n }\r\n\r\n const isFailed = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.FAILED);\r\n if (isFailed) {\r\n return AsyncResultStatusCode.FAILED;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Renders heading.\r\n * @param checkoutHeading - The checkout heading.\r\n * @returns React node.\r\n */\r\n public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\r\n return (\r\n \r\n );\r\n }\r\n\r\n private readonly renderEmptyLineItems = (): ILineItems => {\r\n const {\r\n context,\r\n config: { lineItemsHeading },\r\n resources: { editCartText }\r\n } = this.props;\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.EditCart);\r\n const attribute = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n\r\n return {\r\n editLink: (\r\n \r\n {editCartText}\r\n \r\n ),\r\n Header: { className: 'ms-checkout__line-items-header empty' },\r\n heading: lineItemsHeading && lineItemsHeading.text && (\r\n {\r\n if (lineItemsHeading) {\r\n lineItemsHeading.text = event.target.value;\r\n }\r\n }, requestContext: context.request }}\r\n />),\r\n LineItems: { className: `ms-checkout__line-items multiple-pickup-enabled` }\r\n };\r\n };\r\n\r\n /**\r\n * Event handler for heading change event.\r\n * @param event - The content change event in heading element.\r\n * @returns The new heading value.\r\n */\r\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\r\n (this.props.config.checkoutHeading!.text = event.target.value);\r\n\r\n /**\r\n * Checks if cart is loading.\r\n * @returns True if is loading, false otherwise.\r\n */\r\n private readonly isLoading = (): boolean => {\r\n return !this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart || !this.state.isValidationPassed;\r\n };\r\n\r\n private readonly isRequestedDeliveryDateInPast = (): boolean => {\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n const requestedDeliveryDate = this.props.data.checkout.result?.checkoutCart.cart.RequestedDeliveryDate;\r\n if (!requestedDeliveryDate) {\r\n return false;\r\n }\r\n requestedDeliveryDate.setHours(0, 0, 0, 0);\r\n return requestedDeliveryDate < today;\r\n };\r\n\r\n private readonly addPaymentMax = async (): Promise => {\r\n const checkoutState = this.props.data.checkout.result;\r\n\r\n if (!checkoutState) {\r\n this.props.context.telemetry.error('checkout state not found');\r\n return;\r\n }\r\n\r\n await checkoutState.updateCustomerAccountAmount({ newAmount: this.maxPaymentAmount });\r\n this.props.context.telemetry.information('customer account payment amount updated');\r\n };\r\n\r\n private readonly getAvailableCredit = (creditBalances: CustomerBalances | undefined) => {\r\n let availableCredit = 0;\r\n\r\n if (!creditBalances) {\r\n return 0;\r\n }\r\n\r\n if (creditBalances.InvoiceAccountCreditLimit === 0) {\r\n availableCredit = creditBalances.CreditLimit - creditBalances.Balance - creditBalances.PendingBalance;\r\n } else {\r\n availableCredit =\r\n creditBalances.InvoiceAccountCreditLimit -\r\n creditBalances.InvoiceAccountBalance -\r\n creditBalances.InvoiceAccountPendingBalance;\r\n }\r\n\r\n return availableCredit;\r\n };\r\n\r\n /**\r\n * Get slot items.\r\n * @param key - The slot key.\r\n * @returns React node or undefined.\r\n */\r\n private readonly getSlotItems = (key: string): React.ReactNode[] | undefined => {\r\n const { slots } = this.props;\r\n return slots && slots[key] && slots[key].length > 0 ? slots[key] : undefined;\r\n };\r\n\r\n /**\r\n * Trigger the payment section container submit when placing order.\r\n */\r\n private readonly triggerPaymentWithPlaceOrder = async (): Promise => {\r\n this.setState({ isPlaceOrderLoading: true });\r\n\r\n await this.props.data.checkout.result?.updateShouldTriggerPaymentWithPlaceOrder({\r\n newShouldTriggerPaymentWithPlaceOrder: !this.props.data.checkout.result.shouldTriggerPaymentWithPlaceOrder\r\n });\r\n };\r\n\r\n /**\r\n * On place order.\r\n * @returns Void promise.\r\n */\r\n private readonly onPlaceOrder = async (): Promise => {\r\n const {\r\n resources,\r\n context,\r\n context: {\r\n actionContext,\r\n app: {\r\n // @ts-ignore\r\n config: { enableStockCheck = false }\r\n }\r\n },\r\n slots: { orderConfirmation },\r\n data: { checkout, products }\r\n } = this.props;\r\n const checkoutState = checkout.result;\r\n\r\n if (!checkoutState) {\r\n // Shouldn't ever be undefined here\r\n return;\r\n }\r\n\r\n this.props.telemetry.information('Checkout onPlaceOrder is called.');\r\n\r\n // Check for credit errors\r\n if (\r\n Msdyn365.isOboRequest(context.request) &&\r\n checkoutState?.customerAccountAmount !== checkoutState?.checkoutCart.cart.TotalAmount\r\n ) {\r\n this._setErrorMessage(resources.invalidAmountForOBOMessage);\r\n return;\r\n } else if (checkoutState.customerAccountAmount > this.maxPaymentAmount) {\r\n this._setErrorMessage(\"Too much credit applied.\");\r\n return;\r\n } else if (this.isRequestedDeliveryDateInPast()) {\r\n this._setErrorMessage(resources.invalidRequestedDeliveryDate);\r\n return;\r\n }\r\n\r\n this.setState({ isPlaceOrderClicked: true });\r\n\r\n /* // If hasInvoiceLine is true, no inventory check\r\n if (\r\n !checkout.result?.checkoutCart.hasInvoiceLine &&\r\n enableStockCheck &&\r\n (await this.isOverMaxQuantity((await checkout).checkoutCart.cart, await products))\r\n ) {\r\n this.setState({\r\n errorMessage: resources.checkoutOutOfStockErrorMessage\r\n });\r\n context.telemetry.error(resources.checkoutOutOfStockErrorMessage);\r\n } else {\r\n // Below code block was here\r\n } */\r\n\r\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\r\n const updatedCartVersion = await this.updateCartLineEmailAddress(checkout.result?.guestCheckoutEmail || '');\r\n\r\n await placeOrder(\r\n actionContext,\r\n checkout.result,\r\n products.result,\r\n !hasOrderConfirmation,\r\n updatedCartVersion,\r\n checkout.result?.isPaymentVerificationRedirection\r\n ).catch(error => {\r\n this.handleCheckoutError(error);\r\n });\r\n\r\n await checkout.result?.updateIsPaymentSectionContainerReady({ newIsPaymentSectionContainerReady: false });\r\n };\r\n\r\n /**\r\n * Update receipt email address for electronic cart line.\r\n * @param newGuestCheckoutEmail - The guest checkout email.\r\n * @returns The updated cart version.\r\n */\r\n private readonly updateCartLineEmailAddress = async (newGuestCheckoutEmail: string): Promise => {\r\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\r\n\r\n const emailDeliveryCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(\r\n cartLine => cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && cartLine.DeliveryMode === emailDeliveryModeCode\r\n );\r\n\r\n let updatedCartVersion: number | undefined;\r\n if (emailDeliveryCartLines && emailDeliveryCartLines.length > 0) {\r\n const lineDeliverySpecifications: LineDeliverySpecification[] = emailDeliveryCartLines.map(line => {\r\n return {\r\n LineId: line.LineId,\r\n DeliverySpecification: {\r\n DeliveryModeId: emailDeliveryModeCode,\r\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\r\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail\r\n }\r\n };\r\n });\r\n\r\n await updateLineDeliverySpecificationsAsync(\r\n { callerContext: this.props.context.actionContext },\r\n (await this.props.data.checkout).checkoutCart.cart.Id,\r\n lineDeliverySpecifications\r\n )\r\n .then(updatedCart => {\r\n updatedCartVersion = updatedCart.Version;\r\n })\r\n .catch(error => {\r\n this.props.context.actionContext.telemetry.exception(error);\r\n throw new Error('[updateLineDeliverySpecificationsAsync] Unable to update electronic delivery email address in cart');\r\n });\r\n }\r\n\r\n return updatedCartVersion;\r\n };\r\n\r\n /**\r\n * Return true if any product in the cart is over its max quantity.\r\n * @param cart -- The checkout cart.\r\n * @param products -- The checkout products.\r\n * @returns - Is any product in the cart is over max quantity.\r\n */\r\n // @ts-ignore\r\n private readonly isOverMaxQuantity = async (cart: Cart, products: SimpleProduct[]): Promise => {\r\n let isOverMaxQuantity = false;\r\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\r\n\r\n await getAvailabilitiesForCartLineItems(\r\n new ProductAvailabilitiesForCartLineItems(this.props.context.actionContext.requestContext.apiSettings),\r\n this.props.context.actionContext\r\n )\r\n .then(productInventoryInformation => {\r\n const productsThatShouldValidateInventory: IProductInventoryInformation[] = [];\r\n\r\n cart.CartLines?.map(cartline => {\r\n const cartlineProduct = products.find(product => product.RecordId === cartline.ProductId);\r\n\r\n // If product is non-stocked or cartline is electronic delivery, then no inventory check\r\n const isStockedItem = cartlineProduct?.Behavior?.IsStockedProduct;\r\n const isEmailDelivery =\r\n cartline.DeliveryMode && cartline.DeliveryMode !== '' ? cartline.DeliveryMode === emailDeliveryModeCode : false;\r\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\r\n if (!shouldSkipInventoryCheck && ArrayExtensions.hasElements(productInventoryInformation)) {\r\n const foundProductAvailability = productInventoryInformation.find(productInventory => {\r\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\r\n });\r\n if (foundProductAvailability) {\r\n productsThatShouldValidateInventory.push(foundProductAvailability);\r\n }\r\n }\r\n });\r\n\r\n const cartLinesInventoryValidation = validateCartLinesInventory(\r\n cart.CartLines ?? [],\r\n productsThatShouldValidateInventory,\r\n this.props.context.actionContext,\r\n products,\r\n emailDeliveryModeCode\r\n );\r\n\r\n // If is invalid then exceeds the available quantity\r\n isOverMaxQuantity = !cartLinesInventoryValidation.isValid;\r\n return isOverMaxQuantity;\r\n })\r\n .catch(error => {\r\n this.props.context.actionContext.telemetry.exception(error);\r\n throw new Error('[getAvailabilitiesForCartLineItems] Unable to get availabilities for products in checkout cart');\r\n });\r\n\r\n return isOverMaxQuantity;\r\n };\r\n\r\n /**\r\n * Gets active child in module state.\r\n * @returns - The module state manager collection.\r\n */\r\n private readonly getActiveChildModuleStates = (): IModuleStateManager[] => {\r\n const { childIds, getModule } = this.props.moduleState;\r\n return childIds\r\n .map(getModule)\r\n .filter((state): state is IModuleStateManager => !!state && !state.isDisabled && state.hasModuleState);\r\n };\r\n\r\n /**\r\n * On container ready.\r\n */\r\n private readonly onContainerReady = (): void => {\r\n this.props.telemetry.information('Checkout onContainerReady is called.');\r\n\r\n this.getActiveChildModuleStates().forEach(state => {\r\n state.isReady && state.onContainerReady && state.onContainerReady();\r\n });\r\n };\r\n\r\n /**\r\n * Redirects to cart page.\r\n * @param notFoundEditCartLinkMessage - Not found edit cart link message.\r\n */\r\n private readonly redirectToCartPage = (notFoundEditCartLinkMessage: string): void => {\r\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\r\n if (window && editCartLink) {\r\n window.location.assign(editCartLink);\r\n } else {\r\n this.setState({\r\n errorMessage: this.props.resources.genericErrorMessage,\r\n errorDetails: '',\r\n errorCorrelationId: ''\r\n });\r\n this.props.context.telemetry.error(notFoundEditCartLinkMessage);\r\n }\r\n };\r\n\r\n /**\r\n * Validates for checkout.\r\n * @param retry - Retry flag.\r\n */\r\n private readonly validateForCheckout = async (retry: boolean = true): Promise => {\r\n const notFoundEditCartLinkMessage = \"Cart doesn't pass validation, but no editCartLink found\";\r\n const cart = (await this.props.data.checkout).checkoutCart.cart;\r\n const { Id, Version } = cart;\r\n const isOrderQuantityLimitsFeatureEnabledInHq =\r\n this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n const customerInfo = this.props.data.customerInformation.result;\r\n const isB2BSite = isChannelTypeB2B(this.props.context.actionContext.requestContext);\r\n\r\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings =\r\n defaultOrderQuantityLimitsFeatureConfig === 'all' ||\r\n (customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && isB2BSite) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !isB2BSite)));\r\n if (isOrderQuantityLimitsFeatureEnabledInHq && isOrderQuantityLimitsFeatureEnabledInSiteSettings) {\r\n if (Version && Id) {\r\n validateForCheckoutAsync({ callerContext: this.props.context.actionContext, bypassCache: 'none' }, Id, Version)\r\n .then((result: CartLineValidationResults) => {\r\n if (result.ValidationFailuresByCartLines?.length !== 0) {\r\n this.redirectToCartPage(notFoundEditCartLinkMessage);\r\n } else {\r\n this.setState({ isValidationPassed: true });\r\n }\r\n })\r\n .catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n if (retry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\r\n const cartState = this.props.data.checkout.result?.checkoutCart;\r\n cartState\r\n ?.refreshCart({})\r\n .then(async () => {\r\n await this.validateForCheckout(false);\r\n })\r\n .catch((refreshError: Error) => {\r\n this.props.telemetry.warning(refreshError.message);\r\n this.props.telemetry.debug('Unable to refresh Cart');\r\n });\r\n } else {\r\n this.redirectToCartPage(notFoundEditCartLinkMessage);\r\n }\r\n });\r\n } else {\r\n this.redirectToCartPage(notFoundEditCartLinkMessage);\r\n }\r\n } else {\r\n this.setState({ isValidationPassed: true });\r\n }\r\n };\r\n\r\n @action\r\n private readonly _setErrorMessage = (errorMessage: string): void => {\r\n this.props.telemetry.error(errorMessage);\r\n this.props.moduleState.setHasError(true);\r\n this.props.moduleState.onUpdating();\r\n this.setState({\r\n errorMessage,\r\n errorDetails: '',\r\n errorCorrelationId: ''\r\n });\r\n };\r\n\r\n /**\r\n * Save the address as Shipping and Billing address.\r\n * @param tokenizedPaymentCard - Tokenized payment card.\r\n */\r\n private readonly _saveShippingAndBillingAddress = async (tokenizedPaymentCard?: TokenizedPaymentCard): Promise => {\r\n const checkoutState = this.props.data.checkout.result;\r\n\r\n // For Paypal, the address returned in TokenizedPaymentCard will be used as both shipping and billing address.\r\n if (checkoutState && tokenizedPaymentCard && tokenizedPaymentCard.Zip) {\r\n const address: Address = this._getAddressFromTokenizedPaymentCard(tokenizedPaymentCard);\r\n\r\n await checkoutState.updateBillingAddressFromExpressCheckout({ newBillingAddressFromExpressCheckout: address });\r\n await checkoutState.updateShippingAddressFromExpressCheckout({ newShippingAddressFromExpressCheckout: address });\r\n }\r\n };\r\n\r\n /**\r\n * Get address from tokenizedPaymentCard.\r\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\r\n * @returns The address.\r\n */\r\n private readonly _getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\r\n const address: Address = {\r\n TwoLetterISORegionName: tokenizedPaymentCard.Country,\r\n Name: tokenizedPaymentCard.NameOnCard,\r\n Street: tokenizedPaymentCard.Address1,\r\n StreetNumber: tokenizedPaymentCard.Address2,\r\n City: tokenizedPaymentCard.City,\r\n State: tokenizedPaymentCard.State,\r\n ZipCode: tokenizedPaymentCard.Zip,\r\n Phone: tokenizedPaymentCard.Phone\r\n };\r\n\r\n return address;\r\n };\r\n\r\n /**\r\n * Handle checkout errors.\r\n * @param error -- The error on checkout api failure.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private readonly handleCheckoutError = (error: any) => {\r\n // Here checkout failure message will be shown if there is any error in checkout api except data validation.\r\n const {\r\n resources: { genericErrorMessage, invalidCartVersionErrorMessage, missingRequiredCartTenderLinesErrorMessage }\r\n // context: { actionContext }\r\n } = this.props;\r\n const checkoutResult = this.props.data.checkout.result;\r\n const apiError = error && error.message;\r\n if (checkoutResult && checkoutResult.shouldEnableCheckoutErrorDisplayMessaging) {\r\n // const errorCode = error && error.name ? error.name : '';\r\n // apiError message will be used if errorcode resource/enums is unavailable\r\n // void setCheckoutErrors(errorCode, this.props.resources, !!checkoutResult.isExpressCheckoutApplied, actionContext, apiError);\r\n\r\n this.setState({\r\n errorMessage: genericErrorMessage,\r\n errorDetails: error?.data?.LocalizedMessage,\r\n errorCorrelationId: error?.data?.CorrelationId\r\n } as ICheckoutState);\r\n this.props.telemetry.exception(error);\r\n } else {\r\n let errorMessage = genericErrorMessage;\r\n this.setState({ isPlaceOrderClicked: false });\r\n\r\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\r\n errorMessage = invalidCartVersionErrorMessage;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\r\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\r\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\r\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ExclusiveCouponCannotBeAppliedWithOtherCoupons') {\r\n // If api error is not available show generic message\r\n errorMessage = apiError || genericErrorMessage;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\r\n if (\r\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\r\n error.data?.AdditionalContext &&\r\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\r\n ) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n errorMessage,\r\n errorDetails: error?.data?.LocalizedMessage,\r\n errorCorrelationId: error?.data?.CorrelationId\r\n } as ICheckoutState);\r\n this.props.telemetry.exception(error);\r\n }\r\n };\r\n\r\n private readonly calculateTotal = async (): Promise => {\r\n const cartState = this.props.data.checkout.result!.checkoutCart;\r\n const checkoutAppliedState = this.props.data.checkoutAppliedState.result!;\r\n\r\n this.setState({ isCalculatingTotal: true, showSplitUpDeliveryModal: false });\r\n\r\n await (await this.props.data.checkout).updateGuestCheckoutEmail({\r\n newGuestCheckoutEmail: checkoutAppliedState.newCartObject.ReceiptEmail!\r\n });\r\n\r\n await cartState.updateCart({ newCartObject: checkoutAppliedState.newCartObject as Cart });\r\n\r\n // Redo cart lines because of prices now being calculated\r\n const appliedCheckoutState = { ...checkoutAppliedState };\r\n appliedCheckoutState.newCartLinesObject = appliedCheckoutState.newCartLinesObject.map(x => {\r\n return {\r\n ...this.props.data.checkout.result!.checkoutCart.cart.CartLines!.find(y => y.LineId === x.LineId),\r\n DeliveryMode: x.DeliveryMode,\r\n ShippingAddress: x.ShippingAddress,\r\n RequestedDeliveryDate: checkoutAppliedState.newCartObject.RequestedDeliveryDate\r\n };\r\n });\r\n await cartState.updateCartLines({ updatedCartLinesObject: appliedCheckoutState.newCartLinesObject });\r\n\r\n await this.addPaymentMax();\r\n\r\n this.setState({ hasCalculatedTotal: true, isCalculatingTotal: false });\r\n };\r\n\r\n private readonly getSplitUpDeliveryMessage = (): ICheckoutSplitDeliveryModalProps => {\r\n const { context, resources } = this.props;\r\n const { isCalculatingTotal, isPlaceOrderClicked, isPlaceOrderLoading } = this.state;\r\n const checkout = this.props.data.checkout?.result;\r\n const checkoutCart = checkout?.checkoutCart.cart;\r\n const Container: INodeProps = {\r\n className: 'ms-checkout__split-delivery'\r\n };\r\n\r\n // If there are any lines with missing delivery dates, assume the user hasn't filled in all information yet\r\n const anyMissingDeliveryDates = checkoutCart?.CartLines?.some(x => !x.RequestedDeliveryDate);\r\n const allLinesHaveSameDeliveryDateAsCart = checkoutCart?.CartLines?.every(x => x.RequestedDeliveryDate?.getTime() === checkoutCart.RequestedDeliveryDate?.getTime());\r\n\r\n if (isCalculatingTotal || isPlaceOrderClicked || isPlaceOrderLoading || anyMissingDeliveryDates || allLinesHaveSameDeliveryDateAsCart || !checkoutCart || !checkoutCart.CartLines) {\r\n // All lines have the same delivery date as the cart or there are no lines\r\n return { Container: null, header: null, button: null, message: null, modal: null };\r\n }\r\n\r\n const cartLines = [ ...checkoutCart.CartLines ];\r\n cartLines.sort((a, b) => {\r\n if (!a.RequestedDeliveryDate || !b.RequestedDeliveryDate) {\r\n return 0;\r\n }\r\n return b.RequestedDeliveryDate.getTime() - a.RequestedDeliveryDate.getTime();\r\n });\r\n\r\n const groupedLines: { [key: string]: CartLine[] } = {};\r\n for (const line of cartLines) {\r\n const key = line.RequestedDeliveryDate\r\n ? context.cultureFormatter.formatDate(line.RequestedDeliveryDate, {\r\n day: 'numeric',\r\n month: 'long'\r\n })\r\n : resources.splitDeliveryNoDeliveryDateErrorText;\r\n\r\n if (!groupedLines[key]) {\r\n groupedLines[key] = [];\r\n }\r\n groupedLines[key].push(line);\r\n }\r\n\r\n const header = (\r\n

\r\n {resources.splitDeliveryHeading}\r\n

\r\n );\r\n const message = (\r\n
\r\n {resources.splitDeliveryDescription}\r\n
\r\n );\r\n const button = (\r\n {\r\n this.setState({ showSplitUpDeliveryModal: true, retrievingProductNames: true });\r\n\r\n const productNames = this.state.productNames;\r\n const productIds = cartLines.map(x => x.ProductId!).filter(Boolean) || [];\r\n\r\n // Missing names\r\n if (productIds.some(x => !productNames[x])) {\r\n const products = await getByIdsAsync(\r\n { callerContext: context.actionContext },\r\n context.request.apiSettings.channelId,\r\n productIds,\r\n null,\r\n context.request.apiSettings.catalogId);\r\n const newProductNames = { ...productNames };\r\n\r\n products.forEach(x => {\r\n if (!x.RecordId || !x.Name) {\r\n return;\r\n }\r\n newProductNames[x.RecordId] = x.Name;\r\n });\r\n\r\n this.setState({ productNames: newProductNames });\r\n }\r\n\r\n this.setState({ retrievingProductNames: false });\r\n }}\r\n >\r\n {resources.splitDeliveryShowButtonText}\r\n \r\n );\r\n\r\n const modal = (\r\n this.setState({ showSplitUpDeliveryModal: !this.state.showSplitUpDeliveryModal })}\r\n >\r\n this.setState({ showSplitUpDeliveryModal: !this.state.showSplitUpDeliveryModal })}>\r\n {resources.splitDeliveryHeading}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {Object.keys(groupedLines).map(group => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n {groupedLines[group].map(x => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n );\r\n })}\r\n \r\n
{resources.splitDeliveryColumnItemIdText}{resources.splitDeliveryColumnNameText}
{resources.splitDeliveryGroupDateText}: {group}
{x.ItemId}{this.state.productNames[x.ProductId!]}
\r\n
\r\n \r\n );\r\n\r\n return {\r\n Container,\r\n header,\r\n message,\r\n button,\r\n modal\r\n };\r\n };\r\n}\r\n\r\nexport default Checkout;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { PlaceOrder } from '../common/place-order';\n\nexport default async (\n ctx: IActionContext,\n checkoutState: ICheckoutState | undefined,\n orderedProducts: SimpleProduct[] | undefined,\n redirect: boolean,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n) => {\n return PlaceOrder(ctx, checkoutState, orderedProducts, redirect, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from './dlvry-checkout-v2';\r\nimport { IEmailDelivery } from './components';\r\nimport { IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n {emailDelivery && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC = ({\r\n LineItemDeliveryGroup,\r\n LineItemList,\r\n heading,\r\n lineItems,\r\n lineItemWraper,\r\n lineItemWraperIcon\r\n}) => (\r\n \r\n {lineItemWraperIcon}\r\n {lineItemWraper}\r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemComponentWithMultiplePickUp: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n \r\n {item}\r\n {emailDelivery && }\r\n \r\n);\r\n\r\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({\r\n LineItems,\r\n Header,\r\n heading,\r\n editLink,\r\n itemsForPickup,\r\n itemsForShip,\r\n itemsForEmail,\r\n itemsGroupWithMulitplePickupMode\r\n}) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\r\n {itemsGroupWithMulitplePickupMode !== undefined\r\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\r\n return ;\r\n })\r\n : null}\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines, resources, isCalculatingTotal }) => {\r\n const shipping = lines?.shipping\r\n ? React.cloneElement(lines.shipping as React.ReactElement, {\r\n price: 0\r\n })\r\n : null;\r\n const totalDiscounts = lines?.totalDiscounts\r\n ? React.cloneElement(lines.totalDiscounts as React.ReactElement, {\r\n price: Math.abs((lines.totalDiscounts as React.ReactElement).props.price)\r\n })\r\n : null;\r\n\r\n return (\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {shipping}\r\n {lines.otherCharge}\r\n {lines.tax}\r\n {totalDiscounts}\r\n {lines.loyalty}\r\n {lines.customerAccount}\r\n {lines.giftCard}\r\n {!isCalculatingTotal && lines.orderTotal}\r\n {isCalculatingTotal && (\r\n

\r\n {}\r\n {resources.amountToPayText}\r\n \r\n {resources.calculatingText}...\r\n \r\n

\r\n )}\r\n

\r\n * {resources.containerDepositText}\r\n

\r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst PaymentSummaryComponent: React.FC = ({ heading, lines, isCalculatingTotal }) => (\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.invoices}\r\n {lines.giftCard}\r\n {lines.loyalty}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n isPaymentVerificationRedirection,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n canShow,\r\n isCalculatingTotal,\r\n checkoutProps,\r\n headerProps,\r\n hasSalesOrder,\r\n hasInvoiceLine,\r\n bodyProps,\r\n mainProps,\r\n // @ts-ignore\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n sideControlThirdProps,\r\n termsAndConditionsProps,\r\n orderConfirmation,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n invoicePaymentSummary,\r\n lineItems,\r\n calculateTotalButton,\r\n placeOrderButton,\r\n termsAndConditions,\r\n keepShoppingButton,\r\n checkoutExpressPaymentContainer,\r\n checkoutErrorRef,\r\n splitDeliveryModal\r\n } = props;\r\n\r\n return (\r\n \r\n {!hasSalesOrder && !checkoutExpressPaymentContainer && {title}}\r\n {!hasSalesOrder && isPaymentVerificationRedirection && shouldEnableSinglePaymentAuthorizationCheckout && !alert && !loading && (\r\n \r\n )}\r\n {!hasSalesOrder && (\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {checkoutExpressPaymentContainer}\r\n {checkoutExpressPaymentContainer && {title}}\r\n {guidedForm}\r\n {termsAndConditions}\r\n {/* \r\n {calculateTotalButton}\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n */}\r\n \r\n \r\n {!hasInvoiceLine\r\n ? orderSummary && \r\n : invoicePaymentSummary && }\r\n \r\n {termsAndConditions}\r\n {calculateTotalButton}\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n {splitDeliveryModal?.Container && (\r\n \r\n {splitDeliveryModal && (\r\n \r\n {splitDeliveryModal.header}\r\n {splitDeliveryModal.message}\r\n {splitDeliveryModal.button}\r\n {splitDeliveryModal.modal}\r\n \r\n )}\r\n \r\n )}\r\n {lineItems && }\r\n \r\n {termsAndConditions}\r\n {calculateTotalButton}\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n {hasSalesOrder && orderConfirmation}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['dlvry-checkout-v2'] = {\n c: () => require('partner/modules/dlvry-checkout-v2/dlvry-checkout-v2.tsx'),\n $type: 'containerModule',\n da: [{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'checkout', path:'modules/dlvry-checkout-v2/checkout-state/deferred-checkout-state-data-action', runOn: 1},{name:'checkoutAppliedState', path:'modules/dlvry-checkout-v2/actions/checkout-applied-state', runOn: 0},{name:'creditBalances', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines', runOn: 1},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 1},{name:'products', path:'modules/dlvry-checkout-v2/actions/get-products-in-active-dlvry-checkout-v2-cart', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'dlvry-checkout-v2',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dlvry-checkout-v2'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dlvry-checkout-v2/actions/checkout-applied-state';\n let dataAction = require('partner/modules/dlvry-checkout-v2/actions/checkout-applied-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dlvry-checkout-v2/actions/get-products-in-active-dlvry-checkout-v2-cart';\n let dataAction = require('partner/modules/dlvry-checkout-v2/actions/get-products-in-active-dlvry-checkout-v2-cart');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dlvry-checkout-v2/checkout-state/deferred-checkout-state-data-action';\n let dataAction = require('partner/modules/dlvry-checkout-v2/checkout-state/deferred-checkout-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|dlvry-checkout-v2|dlvry-checkout-v2'] = {\n c: () => require('partner/modules/dlvry-checkout-v2/dlvry-checkout-v2.view.tsx'),\n cn: '__local__-__local__-dlvry-checkout-v2'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IAny,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { searchOrgUnitLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\n\n/**\n * Input for search-org-unit-locations data action.\n */\nexport class SearchOrgUnitLocationsInput implements IActionInput {\n public getCacheKey = () => 'SearchOrgUnitLocations';\n\n public getCacheObjectType = () => 'SearchOrgUnitLocations';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData -- Input data.\n * @returns -- IActionInput.\n */\nexport const createSearchOrgUnitLocationsInputFunc = (inputData: ICreateActionContext>): IActionInput => {\n return new SearchOrgUnitLocationsInput();\n};\n\n/**\n * Calls the Retail API and returns all the orgUnitLocations as array.\n * @param input - Input.\n * @param ctx - Context.\n * @returns - orgUnitLocations.\n */\nexport async function getSearchOrgUnitLocationsAction(\n input: SearchOrgUnitLocationsInput,\n context: IActionContext\n): Promise {\n const OrgUnitLocations = await searchOrgUnitLocationsAsync(\n {\n callerContext: context\n },\n {}\n );\n\n return OrgUnitLocations;\n}\n\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-org-unit-locations',\n action: >getSearchOrgUnitLocationsAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n\nexport default retailActionDataAction;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["CheckoutAppliedStateInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","async","checkoutAppliedStateAction","input","ctx","applied","customerInformation","shippingInformation","deliveryOptions","newCartObject","newCartLinesObject","createObservableDataAction","action","inputData","ActiveCheckoutCartProductsInput","createInput","getActiveCheckoutCartProductsAction","telemetry","exception","Error","checkoutState","getCheckoutState","cart","checkoutCart","hasInvoiceLine","CartLines","length","getSimpleProducts","map","cartLine","ProductId","ProductInput","requestContext","apiSettings","undefined","CatalogId","filter","Boolean","then","products","catch","error","getActiveCheckoutCartProductsActionDataAction","id","CheckoutStorageKey","DeferredBaseCheckoutState","GlobalState","actionContext","super","_deferred","_timedOut","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_customerAccountAmount","_emailAddressFromExpressCheckout","_checkoutGenericData","this","_checkoutCart","BaseCheckoutCartState","_attributeValues","_extensionProperties","_shouldEnableSinglePaymentAuthorizationCheckout","app","config","shouldEnableSinglePaymentAuthorizationCheckout","_shouldEnableCheckoutErrorDisplayMessaging","shouldEnableCheckoutErrorDisplayMessaging","_salesOrder","_orderedProducts","_tokenizedPaymentCard","_tenderLine","_billingAddress","_isBillingAddressSameAsShippingAddress","_shippingAddress","_cartLinesWithShippingAddress","_hasShippingAddress","_hasCartDeliveryMode","_cardPrefix","_paymentTenderType","giftCardExtends","_loyaltyCardNumber","_hasGuestCheckoutEmail","_isTermsAndConditionAccepted","_isTermsAndConditionChecked","_shouldCollapsePaymentSection","_shouldTriggerPaymentWithPlaceOrder","_isPaymentSectionContainerReady","_cardPaymentAcceptResult","_isPaymentSectionContainerHasError","_redirectAdditionalContext","_redirectPaymentConnectorId","_checkoutErrorPaymentConnectorId","_isPlaceOrderEnabledInRedirection","_isPaymentVerificationRequired","_isCheckoutCallFailed","_shouldEnableExpressCheckoutInCheckout","_shouldEnableExpressCheckoutInCart","_shippingAddressFromExpressCheckout","_billingAddressFromExpressCheckout","_isExpressCheckoutApplied","_isExpressAddressApplied","_isExpressCheckoutAppliedInCartPage","_isExpressPaymentModulesReady","requestFormData","query","pv","redirectResult","_checkoutError","_isBillingAddressHasError","_checkoutErrorFocus","_shouldFocusOnCheckoutError","updateSalesOrder","newSalesOrder","newOrderedProducts","AttributeValues","ExtensionProperties","Promise","resolve","status","newAttributeValues","newExtensionProperties","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","newShippingAddress","newCartLinesWithShippingAddress","newHasShippingAddress","newHasCartDeliveryMode","newIsTermsAndConditionAccepted","newIsTermsAndConditionChecked","newShouldCollapsePaymentSection","newShouldTriggerPaymentWithPlaceOrder","newIsPaymentSectionContainerReady","newCardPaymentAcceptResult","newIsPaymentSectionContainerHasError","newRedirectAdditionalContext","newRedirectPaymentConnectorId","newCheckoutErrorPaymentConnectorId","newIsCheckoutCallFailed","newIsPlaceOrderEnabledInRedirection","newIsPaymentVerificationRequired","updateBillingAddress","_input$additionalProp","newBillingAddress","additionalProperties","isBillingAddressSameAsShippingAddress","removeBillingAddress","updatePaymentTenderType","newPaymentTenderType","updateCardPrefix","newCardPrefix","removeGiftCard","giftCard","Id","giftCardNumber","removeGiftCardExtend","addGiftCard","Pin","ExpirationDate","TenderTypeId","gitCardExtend","_objectSpread","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","Number","newAmount","toFixed","newGuestCheckoutEmail","ReceiptEmail","updateReceiptEmail","newEmail","updateCartLines","updatedCartLinesObject","newHasGuestCheckoutEmail","removeCheckoutCartId","cookies","removeCheckoutCartCookie","saveDataInStorage","sessionStorage","billingAddress","setCheckoutCartData","BillingAddress","GiftCard","loyaltyCardNumber","LoyaltyCardNumber","loyaltyAmount","LoyaltyAmount","isTermsAndConditionAccepted","TermsAndCondition","paymentTenderType","window","setItem","PaymentTenderType","redirectPaymentConnectorId","RedirectPaymentConnectorId","isExpressCheckoutApplied","IsExpressCheckoutApplied","toString","filtered","Object","keys","reduce","filteredData","key","SaveDataBeforeRedirect","CheckoutGenericData","checkoutGenericData","updateCustomerAccountAmount","newBillingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","newEmailAddressFromExpressCheckout","newShouldEnableExpressCheckoutInCheckout","newShouldEnableExpressCheckoutInCart","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newIsExpressCheckoutAppliedInCartPage","newIsBillingAddressHasError","newIsExpressPaymentModulesReady","newCheckoutError","setCheckoutGenericData","getCheckoutGenericData","newCheckoutErrorFocus","newShouldFocusOnCheckoutError","setTimedOut","value","deferred","arguments","isInitialized","_status","initialize","setInitialData","cleanCheckoutData","removeCheckoutCartData","isPaymentVerificationRedirection","_window$sessionStorag","getCheckoutCartData","get","Array","isArray","getItem","__decorate","observable","computed","stateConstructor","getState","args","GlobalStateInput","_ref","message","details","correlationId","React","className","role","getInvoicePaymentSummary","data","checkout","resources","totalAmountLabel","invoiceLabel","invoiceSummaryTitle","context","typeName","heading","lines","InvoiceSummary","orderTotalLabel","result","getOrderSummary","state","_cart","_cart2","_featureState$result","_cart3","orderSummaryHeading","subTotalLabel","shippingLabel","taxLabel","loyaltyLabel","giftcardLabel","totalDiscountsLabel","freeText","toBeCalculatedText","otherCharges","customerAccountLabel","showLineItems","channelConfiguration","request","channel","channelDeliveryOptionConfig","featureState","retailMultiplePickUpOptionEnabled","find","feature","Name","IsEnabled","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","hasCalculatedTotal","_cart4","sumPrice","x","NetAmountWithoutTax","Price","Quantity","sum","price","DiscountAmount","DiscountAmountWithoutTax","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TotalAmount","orderSummaryProps","text","Msdyn365","assign","tag","editProps","onEdit","event","target","OrderSummary","otherChargeLabel","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","CheckoutGuidedCard","props","editButtonRef","formCardRef","renderFooder","_this$props$moduleSta","cartReady","isVisted","isReady","isSubmitting","isCancelAllowed","hasControlGroup","onCancel","onSubmit","resource","saveBtnLabel","cancelBtnLabel","saveAndContinueBtnLabel","canSubmit","canCancel","payLoad","contentAction","etext","TelemetryConstant","Save","SaveContinue","saveBtnAttributes","getTelemetryAttributes","telemetryContent","Cancel","cancelBtnAttributes","Button","classname","title","color","disabled","moduleState","hasError","onClick","focusOnFirstFocusableElement","node","current","child","querySelector","focus","focusOnEditButton","editButton","scrollToTitle","formCard","isMobile","scrollIntoView","getTitle","step","headingTag","Tag","_getModules","item","_getId","getPayloadObject","componentDidUpdate","prevProps","isActive","onNext","shouldFocus","children","childrenModules","childModule","childId","childState","getModule","setCheckoutErrorFocus","focusOnCheckoutError","render","isExpanded","isPending","isUpdating","hasInitialized","changeBtnLabel","CheckoutChange","changeBtnAttributes","canEdit","active","expanded","closed","visted","hidden","initialized","ready","pending","updating","ref","innerRef","paymentInstrumentModuleId","CheckoutGuidedForm","currentStep","getEnabledModules","childIds","isDisabled","_enableAfterModule","items","i","nextChildId","_isPaymentSectionContainer","moduleId","_sectionState$childId","sectionState","ArrayExtensions","hasElements","currentId","includes","getStep","indexOf","getId","getHeading","moduleChildId","isEditor","setState","hasShippingAddress","hasCartDeliveryMode","hasGuestCheckoutEmail","_state$childIds","componentDidMount","init","shouldCollapseAfterRedirect","hasMissingInfo","hasOrderError","previousModuleHasError","_this$props$requestCo","hasModuleState","shouldFocusOnCheckoutError","GuidedCard","_this$props$onSubmit","_this$props","call","disableGuidedCheckoutFlow","enableControl","observer","buttonsStates","onPlaceOrderHandler","isBusy","setIsBusy","canPlaceOrder","placeOrder","buttonSetState","checkoutBtnText","isPlaceOrderLoading","useState","push","payload","TelemetryEvent","Purchase","attributes","classnames","createUpdateTransactionCustomerInput","salesOrder","DataServiceQuery","createDataServiceRequestForOperation","bypassCache","returnEntity","PlaceOrder","orderedProducts","redirect","updatedCartVersion","reject","information","CartCheckout","callActionOrExecute","updateTransactionCustomerAsync","cartState","lineItemIdsToRemove","getCartState","activeCart","activeCartLine","checkoutCartLine","LineId","removeCartLines","cartLineIds","removeAllPromoCodes","EmptyActiveCart","orderConfirmationUrl","getUrlSync","separator","url","location","getLineItems","pickupDeliveryModeCode","emailDeliveryModeCode","_getDeliveryLocation","orgUnitLocations","FulfillmentStoreId","locationMatch","OrgUnitNumber","OrgUnitName","_getLineItemComponent","_input$data$catalogs","product","productId","_product","RecordId","imageSettings","showShippingChargesForLineItems","quantityDisplayString","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","productDimensionTypeAmount","configString","inputQuantityAriaLabel","discountStringText","shippingCharges","gridSettings","catalogs","productUrl","getProductUrlSync","MsDyn365","isBrowser","isChannelTypeB2B","_cartLine$CatalogId","fullUrl","URL","href","searchParams","set","CartLineItemComponent","sizeString","colorString","styleString","amountString","originalPriceText","currentPriceText","shippingChargesText","salesAgreementPricePrompt","isQuantityEditable","primaryImageUrl","PrimaryImageUrl","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","PickUpAtStore","label","_getEmailDeliveryComponents","emailDeliveryText","EmailDelivery","_getLineItemsComponents","isPickUp","_getCartPickDeliveryMode","isEmailDelivery","DeliveryMode","LineItem","pickUpAtStore","emailDelivery","cartLineItem","_channelDeliveryOptio","StringExtensions","isNullOrWhitespace","PickupDeliveryModeCodes","deliveryMode","_countItems","count","_filterItemsByDiliveryType","type","_channelDeliveryOptio2","_getLineItemsByDeliveryType","_getGroupTitleComponent","_input$data$deliveryO","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","productDeliveryOptions","_productDeliveryOptio","DeliveryOptions","deliveryOption","Code","Description","suffix","replace","LineItemDeliveryGroup","LineItemList","lineItems","handleLineItemHeadingChange","lineItemsHeading","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","cartLinesGrp","entries","forEach","groupByDeliveryType","cartLines","index","lineItemDeliveryGroup","isNullOrEmpty","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","groupTitle","iconClass","lineItemWraperIcon","lineItemWraper","_getLineItems","editCartText","EditCart","attribute","groupClass","LineItems","Header","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","Checkout","_this","errorMessage","errorDetails","errorCorrelationId","errorTimeout","isValidationPassed","isPlaceOrderClicked","isCalculatingTotal","productNames","showSplitUpDeliveryModal","retrievingProductNames","getTelemetryObject","telemetryPageName","friendlyName","checkoutErrorRef","showCalculateButton","renderEmptyLineItems","handleCheckoutHeadingChange","checkoutHeading","isLoading","cartStatus","isEmptyCart","isRequestedDeliveryDateInPast","_this$props$data$chec","today","Date","setHours","requestedDeliveryDate","RequestedDeliveryDate","addPaymentMax","maxPaymentAmount","getAvailableCredit","creditBalances","availableCredit","InvoiceAccountCreditLimit","CreditLimit","Balance","PendingBalance","InvoiceAccountBalance","InvoiceAccountPendingBalance","getSlotItems","slots","triggerPaymentWithPlaceOrder","_this$props$data$chec2","updateShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","onPlaceOrder","_checkout$result","_checkout$result2","_checkout$result3","enableStockCheck","orderConfirmation","customerAccountAmount","_setErrorMessage","invalidAmountForOBOMessage","invalidRequestedDeliveryDate","hasOrderConfirmation","updateCartLineEmailAddress","guestCheckoutEmail","handleCheckoutError","updateIsPaymentSectionContainerReady","_this$props$context$r","_this$props$data$chec3","EmailDeliveryModeCode","emailDeliveryCartLines","lineDeliverySpecifications","line","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ElectronicDelivery","ElectronicDeliveryEmailAddress","updateLineDeliverySpecificationsAsync","callerContext","updatedCart","Version","isOverMaxQuantity","_this$props$context$r2","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","cartline","_cartlineProduct$Beha","cartlineProduct","isStockedItem","Behavior","IsStockedProduct","foundProductAvailability","productInventory","_productInventory$Pro","ProductAvailableQuantity","cartLinesInventoryValidation","validateCartLinesInventory","isValid","getActiveChildModuleStates","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","genericErrorMessage","validateForCheckout","_this$props$data$feat","_this$props$context","retry","isOrderQuantityLimitsFeatureEnabledInHq","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","isB2BSite","isOrderQuantityLimitsFeatureEnabledInSiteSettings","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","warning","debug","name","_this$props$data$chec4","refreshCart","refreshError","setHasError","onUpdating","_saveShippingAndBillingAddress","tokenizedPaymentCard","Zip","address","_getAddressFromTokenizedPaymentCard","updateBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","TwoLetterISORegionName","Country","NameOnCard","Street","Address1","StreetNumber","Address2","City","State","ZipCode","Phone","invalidCartVersionErrorMessage","missingRequiredCartTenderLinesErrorMessage","checkoutResult","apiError","_error$data","_error$data2","LocalizedMessage","CorrelationId","_this$props$data$chec5","_error$data3","_this$props$data$chec6","_error$data4","_error$data5","AdditionalContext","calculateTotal","checkoutAppliedState","updateGuestCheckoutEmail","updateCart","appliedCheckoutState","y","ShippingAddress","getSplitUpDeliveryMessage","_this$props$data$chec7","_checkoutCart$CartLin","_checkoutCart$CartLin2","anyMissingDeliveryDates","some","allLinesHaveSameDeliveryDateAsCart","every","_x$RequestedDeliveryD","_checkoutCart$Request","getTime","Container","header","button","modal","sort","a","b","groupedLines","cultureFormatter","formatDate","day","month","splitDeliveryNoDeliveryDateErrorText","splitDeliveryHeading","splitDeliveryDescription","productIds","getByIdsAsync","channelId","catalogId","newProductNames","splitDeliveryShowButtonText","Modal","isOpen","toggle","ModalHeader","closeAriaLabel","ModalBody","align","splitDeliveryColumnItemIdText","splitDeliveryColumnNameText","group","colSpan","splitDeliveryGroupDateText","ItemId","_this$props$data$chec8","_this$props$data$chec9","_this$props$data$chec10","_this$props$data$chec11","_this$props$data$chec12","timedOut","_this$props$data$chec13","isEditorialMode","isEmpty","_this$props$data$chec14","params","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","_this$props$data$chec18","_this$props$data$chec19","_this$props$data$chec20","disableForOBO","isPaidOffByCustomerAccount","_this$props$data$chec21","_this$props$data$chec22","_this$props$data$chec23","_this$props$data$chec24","amountDue","_this$props$data$chec25","_this$props$data$chec26","_this$props$data$cust","Math","max","getLoyaltyAmount","_this$props$data$cred","MandatoryCreditLimit","min","_this$props$data$chec27","_this$props$data$chec28","properties","property","Key","Value","StringValue","JSON","parse","_this$props$data$chec29","_this$props$data$chec30","when","asyncResultStatus","AsyncResultStatusCode","LOADING","expressPaymentDetailsFromCartPage","_this$props$data$chec31","_this$props$data$chec34","email","tenderLine","paymentTenderTypeFromCartPage","isExpressCheckoutAppliedInCartPage","isExpressAddressAppliedInCartPage","cardPaymentAcceptResult","_this$props$data$chec32","_this$props$data$chec33","updateExpressCheckoutDetails","updateExtensionProperties","isCartReady","reaction","autoApplyMaxAvailableCredit","_this$props$data$chec35","isPaymentSectionContainerReady","_this$props$data$chec36","_this$props$data$chec37","_this$props$data$chec38","_this$props$data$chec39","redirectAdditionalContext","isPaymentVerificationRequired","_this$props$data$chec40","isPaymentSectionContainerHasError","_this$props$data$chec41","_this$props$data$chec42","isBillingAddressHasError","_this$props$data$chec43","_this$props$data$chec44","updateIsBillingAddressHasError","_this$props$data$chec45","_this$props$data$chec46","updateIsPlaceOrderEnabledInRedirection","_this$props$data$chec47","checkoutError","_this$props$data$chec48","checkoutErrorLocation","errorLocation","ErrorLocation","checkoutPaymentErrorLocation","errorCode","ErrorCode","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment","CheckoutPaymentInstrument","_this$props$data$chec49","_this$props$data$chec50","_this$props$data$chec51","_this$props$data$chec52","_this$props$data$chec53","_this$props$data$chec54","_this$props$data$chec55","_this$props$data$chec56","_this$props$data$chec57","_this$props$data$chec58","_this$props$data$chec59","_this$props$data$chec60","_this$props$data$chec61","_this$props$data$chec62","_this$props$data$chec63","_this$props$data$chec64","_document","_this$props$data$chec65","calculateTotalText","backToShopping","placeOrderText","confirmPaymentText","checkoutClass","allCheckoutInformation","checkoutInformation","info","checkoutExpressPaymentContainer","isConsentGiven","device","Type","backToShoppingUrl","termsAndConditions","BackToShopping","backToShoppingAttributes","hasExpressPaymentContainer","document","getElementsByClassName","style","display","viewProps","hasSalesOrder","checkoutProps","moduleProps","headerProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","sideControlThirdProps","termsAndConditionsProps","renderMsdyn365Text","splitDeliveryModal","loading","Waiting","checkoutLoadingText","alert","AlertComponent","checkoutCopyTimeoutErrorMessage","_this$props$data$chec66","_this$props$data$chec67","_this$props$data$chec68","canShow","guidedForm","GuidedFormComponent","timeout","orderSummary","invoicePaymentSummary","calculateTotalButton","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","renderView","values","SUCCESS","FAILED","withModuleState","PickUpAtStoreComponent","Node","EmailDeliveryComponent","_ref2","LineItemComponent","_ref3","LineItemGroupComponent","_ref4","lineItem","LineItemGroupComponentWithMultiplePickUp","_ref5","LineItemComponentWithMultiplePickUp","_ref6","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","OrderSummaryComponent","_ref9","shipping","totalDiscounts","abs","subtotal","otherCharge","tax","loyalty","customerAccount","orderTotal","amountToPayText","float","calculatingText","containerDepositText","PaymentSummaryComponent","_ref10","invoices","Module","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","SearchOrgUnitLocationsInput","createSearchOrgUnitLocationsInputFunc","getSearchOrgUnitLocationsAction","searchOrgUnitLocationsAsync","retailActionDataAction","module","exports","ReactDOM"],"sourceRoot":""}