{"version":3,"file":"static/js/9d6309f5d5fa6aa50368.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 _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 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\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): 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 ((cart?.SubtotalAmount || cart?.SubtotalAmountWithoutTax || 0) < 1 && cart?.CartLines) {\r\n const sumPrice = cart?.CartLines\r\n .map((x: CartLine) => (x.Price! * (x.Quantity || 1)))\r\n .reduce((sum: number, price: number) => sum + price, 0);\r\n\r\n cart = {\r\n ...cart,\r\n SubtotalAmount: sumPrice,\r\n SubtotalAmountWithoutTax: sumPrice\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\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\ninterface 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) {\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),\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 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 cartState.updateCart({ newCartObject: checkoutAppliedState.newCartObject as Cart });\r\n\r\n await (await this.props.data.checkout).updateGuestCheckoutEmail({\r\n newGuestCheckoutEmail: checkoutAppliedState.newCartObject.ReceiptEmail!\r\n });\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 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 )}\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","_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","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","_cart","_cart2","_featureState$result","_cart3","_cart4","_cart5","orderSummaryHeading","subTotalLabel","shippingLabel","taxLabel","loyaltyLabel","giftcardLabel","totalDiscountsLabel","freeText","toBeCalculatedText","otherCharges","customerAccountLabel","showLineItems","channelConfiguration","request","channel","channelDeliveryOptionConfig","featureState","retailMultiplePickUpOptionEnabled","find","feature","Name","IsEnabled","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","SubtotalAmount","SubtotalAmountWithoutTax","_cart6","sumPrice","x","Price","Quantity","sum","price","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","state","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","hasCalculatedTotal","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","TotalAmount","_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","updateCart","updateGuestCheckoutEmail","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","autoApplyMaxAvailableCredit","reaction","_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","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":""}