{"version":3,"file":"static/js/638f472e8b87be1943f6.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/components/signinbutton.component.tsx?619b","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/actions/get-products-in-active-moe-checkout-cart.ts?2a58","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/components/alert.tsx?53bc","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/components/get-invoice-payment-summary.tsx?83ad","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/components/get-line-items.tsx?1aba","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/components/get-order-summary.tsx?7c59","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/components/guided-card.tsx?d88d","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/components/guided-form.tsx?f179","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/components/place-order-button.tsx?540c","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/methods/moe-checkout.ts?2ef9","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/methods/empty-active-cart.ts?4b83","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/methods/place-order.ts?2fbe","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/moe-checkout.tsx?e812","webpack://Msdyn365.Commerce.Online/./src/modules/moe-checkout/moe-checkout.view.tsx?c89e","webpack://Msdyn365.Commerce.Online/./src/utilities/language-change.ts?a435","webpack://Msdyn365.Commerce.Online/./lib/moe-checkout/module-registration.js?d66e","webpack://Msdyn365.Commerce.Online/../../src/checkout-state-data-action.ts?8344","webpack://Msdyn365.Commerce.Online/../../src/checkout-state.ts?acd8","webpack://Msdyn365.Commerce.Online/../../../src/module-state-manager/module-state.ts?7579","webpack://Msdyn365.Commerce.Online/../../../src/module-state-manager/with-module-state.tsx?61ca","webpack://Msdyn365.Commerce.Online/./src/invoice-summary-lineitem.tsx?5f61","webpack://Msdyn365.Commerce.Online/./src/order-summary-lineitem.tsx?8a98","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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nexport const SignInButton: React.FC<{\r\n text: string;\r\n href: string;\r\n ariaLabel: string;\r\n telemetryContent?: ITelemetryContent;\r\n imageURL: string;\r\n}> = (props: { text: string; href: string; ariaLabel: string; telemetryContent?: ITelemetryContent; imageURL: string }) => {\r\n const { text, href, ariaLabel, telemetryContent, imageURL } = props;\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.SignIn);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n \r\n \r\n {text}\r\n \r\n \r\n ESL\r\n \r\n \r\n \r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\r\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { getSimpleProducts, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Input class for ActiveCheckoutCartWithProducts data action.\r\n */\r\nexport class ActiveCheckoutCartProductsInput implements IActionInput {\r\n public getCacheKey = () => 'ActiveCheckoutCartProducts';\r\n\r\n public getCacheObjectType = () => 'ActiveCheckoutCartProducts';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nexport const createInput = () => {\r\n return new ActiveCheckoutCartProductsInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a cart object based on the passed GetCartInput.\r\n * @param input\r\n * @param ctx\r\n */\r\nexport async function getActiveCheckoutCartProductsAction(\r\n input: ActiveCheckoutCartProductsInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // If no cart ID is provided in input, we need to create a cart object\r\n if (!input) {\r\n ctx.telemetry.exception(new Error('[getActiveCheckoutCartWithProducts]No valid Input was provided, failing'));\r\n throw new Error('[getActiveCheckoutCartWithProducts]No valid Input was provided, failing');\r\n }\r\n\r\n const checkoutState = await getCheckoutState(ctx);\r\n const cart = checkoutState.checkoutCart.cart;\r\n\r\n // If there are cart lines, make call to get products\r\n if (!checkoutState.checkoutCart.hasInvoiceLine && cart && cart.CartLines && cart.CartLines.length > 0) {\r\n return getSimpleProducts(\r\n cart.CartLines.map(cartLine => {\r\n if (cartLine.ProductId) {\r\n return new ProductInput(cartLine.ProductId, ctx.requestContext.apiSettings);\r\n }\r\n return undefined;\r\n }).filter(Boolean),\r\n ctx\r\n )\r\n .then(products => {\r\n if (products) {\r\n return products;\r\n }\r\n return [];\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCheckoutCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n }\r\n\r\n return [];\r\n}\r\n\r\nexport const getActiveCheckoutCartProductsActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/checkout/get-products-in-active-checkout-cart',\r\n action: >getActiveCheckoutCartProductsAction,\r\n input: createInput\r\n});\r\n\r\nexport default getActiveCheckoutCartProductsActionDataAction;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt 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}\r\n\r\nconst CheckoutAlert: React.FC = ({ message }) => (\r\n

\r\n {message}\r\n

\r\n);\r\n\r\nexport default CheckoutAlert;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt 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 { IMoeCheckoutData } from '../moe-checkout.data';\r\nimport { IMoeCheckoutProps } from '../moe-checkout.props.autogenerated';\r\n\r\nexport interface IInvoicePaymentSummary {\r\n heading?: React.ReactNode;\r\n lines?: IInvoiceSummaryLines;\r\n}\r\nexport const getInvoicePaymentSummary = (input: IMoeCheckoutProps): 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","/* eslint-disable security/detect-object-injection */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { getProductUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport groupBy from 'lodash/groupBy';\r\nimport * as React from 'react';\r\n\r\nimport { IMoeCheckoutData } from '../moe-checkout.data';\r\nimport { IMoeCheckoutProps } from '../moe-checkout.props.autogenerated';\r\n\r\ntype deliveryType = 'pickup' | 'ship' | 'email';\r\n\r\nexport interface IPickUpAtStore {\r\n PickUpAtStore: INodeProps;\r\n label: React.ReactNode;\r\n location: React.ReactNode;\r\n}\r\n\r\nexport interface IEmailDelivery {\r\n EmailDelivery: INodeProps;\r\n label: React.ReactNode;\r\n}\r\n\r\nexport interface ILineItem {\r\n LineId: string;\r\n LineItem: INodeProps;\r\n item?: React.ReactNode;\r\n pickUpAtStore?: IPickUpAtStore;\r\n emailDelivery?: IEmailDelivery;\r\n}\r\n\r\nexport interface ILineItemDeliveryGroup {\r\n LineItemDeliveryGroup: INodeProps;\r\n LineItemList: INodeProps;\r\n heading: React.ReactNode;\r\n lineItemWraper?: React.ReactNode;\r\n lineItemWraperIcon?: React.ReactNode;\r\n lineItems: ILineItem[];\r\n}\r\n\r\nexport interface ILineItems {\r\n LineItems: INodeProps;\r\n Header: INodeProps;\r\n heading: React.ReactNode;\r\n editLink: React.ReactNode;\r\n itemsForPickup?: ILineItemDeliveryGroup;\r\n itemsForShip?: ILineItemDeliveryGroup;\r\n itemsForEmail?: ILineItemDeliveryGroup;\r\n itemsGroupWithMulitplePickupMode?: ILineItemDeliveryGroup[];\r\n}\r\n\r\nexport const getLineItems = (input: IMoeCheckoutProps, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\r\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode') || 'DEF';\r\n const emailDeliveryModeCode = get(input, 'context.request.channel.EmailDeliveryModeCode');\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\r\n const _getDeliveryLocation = (cartLine: CartLine): string => {\r\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\r\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\r\n return '';\r\n }\r\n\r\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\r\n return location.OrgUnitNumber === cartLine.FulfillmentStoreId;\r\n });\r\n\r\n return locationMatch && locationMatch.OrgUnitName;\r\n };\r\n\r\n const _getProduct = (productId: number): SimpleProduct | undefined => {\r\n const products = get(input, 'data.products.result') || [];\r\n return products.find((_product: SimpleProduct) => {\r\n return productId === _product.RecordId;\r\n });\r\n };\r\n\r\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\r\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n config: { imageSettings, showShippingChargesForLineItems },\r\n resources: {\r\n quantityDisplayString,\r\n productDimensionTypeColor,\r\n productDimensionTypeSize,\r\n productDimensionTypeStyle,\r\n productDimensionTypeAmount,\r\n configString,\r\n inputQuantityAriaLabel,\r\n discountStringText,\r\n shippingCharges\r\n },\r\n context: {\r\n request: { gridSettings }\r\n }\r\n } = input;\r\n\r\n if (!product) {\r\n return;\r\n }\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\r\n const {\r\n resources: { pickUpAtStoreWithLocationText }\r\n } = input;\r\n\r\n return {\r\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\r\n label: {pickUpAtStoreWithLocationText},\r\n location:
{pickupDeliveryLocation}
\r\n };\r\n };\r\n\r\n const _getEmailDeliveryComponents = (): IEmailDelivery => {\r\n const {\r\n resources: { emailDeliveryTextInMaori }\r\n } = input;\r\n\r\n return {\r\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\r\n label: {emailDeliveryTextInMaori}\r\n };\r\n };\r\n\r\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\r\n return items.map(cartLine => {\r\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\r\n const isPickUp = _getCartPickDeliveryMode(cartLine);\r\n const isEmailDelivery =\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\r\n return {\r\n LineId: cartLine.LineId || '',\r\n LineItem: { className: 'ms-checkout__line-item' },\r\n item: _getLineItemComponent(cartLine),\r\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined,\r\n emailDelivery: isEmailDelivery ? _getEmailDeliveryComponents() : undefined\r\n };\r\n });\r\n };\r\n\r\n const _getCartPickDeliveryMode = (cartLineItem: CartLine): boolean => {\r\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\r\n ? retailMultiplePickUpOptionEnabled\r\n ? cartLineItem.DeliveryMode ===\r\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\r\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\r\n )\r\n : cartLineItem.DeliveryMode === pickupDeliveryModeCode\r\n : false;\r\n };\r\n\r\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\r\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\r\n ? retailMultiplePickUpOptionEnabled\r\n ? cartLineItem.DeliveryMode !==\r\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\r\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\r\n )\r\n : cartLineItem.DeliveryMode !== pickupDeliveryModeCode\r\n : false;\r\n };\r\n\r\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\r\n const {\r\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\r\n } = input;\r\n\r\n let emailDeliveryModeDesc: string = '';\r\n\r\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\r\n emailDeliveryModeDesc = emailDeliveryModeDesc\r\n ? emailDeliveryModeDesc\r\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\r\n ?.Description!;\r\n });\r\n\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n const title =\r\n type === 'ship'\r\n ? shippingCountCheckoutLineItem\r\n : type === 'pickup'\r\n ? inStorePickUpLabel\r\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\r\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\r\n };\r\n\r\n const _countItems = (items: CartLine[]): number => {\r\n return items.reduce((count, item) => {\r\n return count + (item.Quantity || 0);\r\n }, 0);\r\n };\r\n\r\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n if (type === 'ship') {\r\n return cart.CartLines.filter((cartLine: CartLine) =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? _getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n );\r\n } else if (type === 'pickup') {\r\n return cart.CartLines.filter((cartLine: CartLine) =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? _getCartPickDeliveryMode(cartLine) : null\r\n );\r\n }\r\n return cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === emailDeliveryModeCode);\r\n };\r\n\r\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\r\n if ((pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) && (type === 'pickup' || type === 'email')) {\r\n return;\r\n }\r\n\r\n const items = _filterItemsByDiliveryType(type);\r\n\r\n if (items.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const count = _countItems(items);\r\n const title = _getGroupTitleComponent(count, type);\r\n\r\n return {\r\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\r\n LineItemList: { className: 'ms-checkout__line-items-list' },\r\n heading:
{title}
,\r\n lineItems: _getLineItemsComponents(items)\r\n };\r\n };\r\n\r\n const _getLineItems = (): ILineItems | undefined => {\r\n const {\r\n context,\r\n config: { lineItemsHeading },\r\n data: { products },\r\n resources: { editCartText }\r\n } = input;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.EditCart);\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n const groupClass = retailMultiplePickUpOptionEnabled ? ' multiple-pickup-enabled' : '';\r\n if (!cart || !cart.CartLines || cart.CartLines.length === 0 || !products) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n LineItems: { className: `ms-checkout__line-items${groupClass}` },\r\n Header: { className: 'ms-checkout__line-items-header' },\r\n heading: lineItemsHeading && lineItemsHeading.text && (\r\n \r\n ),\r\n editLink: (\r\n \r\n {editCartText}\r\n \r\n ),\r\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\r\n itemsForShip: _getLineItemsByDeliveryType('ship'),\r\n itemsForEmail: _getLineItemsByDeliveryType('email'),\r\n itemsGroupWithMulitplePickupMode: retailMultiplePickUpOptionEnabled\r\n ? _getLineItemsByDeliveryTypeWithMulitplePickupMode()\r\n : undefined\r\n };\r\n };\r\n\r\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\r\n const {\r\n config: { lineItemsHeading }\r\n } = input;\r\n lineItemsHeading!.text = event.target.value;\r\n };\r\n\r\n const _getGroupTitleComponentWithMultiplePickUp = (\r\n count: number,\r\n type: deliveryType,\r\n deliveryMode?: string,\r\n fulFillmentStoreId?: string\r\n ): string => {\r\n const {\r\n resources: { itemLabel, itemsLabel }\r\n } = input;\r\n\r\n let emailDeliveryModeDesc: string = '';\r\n let pickupDeliveryModeDesc: string = '';\r\n\r\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\r\n emailDeliveryModeDesc = emailDeliveryModeDesc\r\n ? emailDeliveryModeDesc\r\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\r\n ?.Description!;\r\n });\r\n\r\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\r\n pickupDeliveryModeDesc = pickupDeliveryModeDesc\r\n ? pickupDeliveryModeDesc\r\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === deliveryMode)?.Description!;\r\n });\r\n\r\n const pickupTitle: string = `${pickupDeliveryModeDesc}, ${fulFillmentStoreId}`;\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n const title =\r\n type === 'ship'\r\n ? `(${count} ${suffix})`\r\n : type === 'pickup'\r\n ? `${pickupTitle} (${count} ${suffix})`\r\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\r\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\r\n };\r\n\r\n const _filterItemsByMultiplePickupMode = (): CartLine[][] => {\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\r\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\r\n const groupDelivery = getGroupByDelivery(cart.CartLines);\r\n const cartLinesGroup: CartLine[] = [];\r\n const cartLinesGrp: CartLine[][] = [];\r\n\r\n // 1) Group by store and pick up mode\r\n Object.entries(groupDelivery).forEach(([deliveryMode, groupByDeliveryType]) => {\r\n // @ts-expect-error\r\n groupDelivery[deliveryMode] = getGroupByStorePickup(groupByDeliveryType);\r\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\r\n });\r\n\r\n Object.keys(cartLinesGroup).forEach(key => {\r\n const cartLines = cartLinesGroup[key];\r\n Object.keys(cartLines).forEach(index => {\r\n const cartLine = cartLines[index];\r\n cartLinesGrp.push(cartLine);\r\n });\r\n });\r\n\r\n return cartLinesGrp;\r\n };\r\n\r\n const _getLineItemsByDeliveryTypeWithMulitplePickupMode = (): ILineItemDeliveryGroup[] | undefined => {\r\n if (pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) {\r\n return;\r\n }\r\n\r\n const {\r\n resources: { multiplePickUpLabel, shippingLable }\r\n } = input;\r\n\r\n const items = _filterItemsByMultiplePickupMode();\r\n\r\n if (items.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const lineItemDeliveryGroup: ILineItemDeliveryGroup[] = [];\r\n items.map(item => {\r\n const count = _countItems(item);\r\n const cartLine = item[0];\r\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\r\n const type: deliveryType =\r\n cartLine.FulfillmentStoreId && cartLine.DeliveryMode\r\n ? 'pickup'\r\n : cartLine.FulfillmentStoreId === '' && cartLine.DeliveryMode === emailDeliveryModeCode\r\n ? 'email'\r\n : 'ship';\r\n const title = _getGroupTitleComponentWithMultiplePickUp(count, type, cartLine.DeliveryMode, pickupDeliveryLocation);\r\n const groupTitle = type === 'pickup' ? multiplePickUpLabel : type === 'ship' ? shippingLable : 'email';\r\n const iconClass = `ms-checkout__line-items-group-title-multiple-pickup-${type}icon`;\r\n lineItemDeliveryGroup.push({\r\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group multiple-pickup', type) },\r\n LineItemList: { className: 'ms-checkout__line-items-list' },\r\n lineItemWraperIcon:
,\r\n lineItemWraper:
{groupTitle}
,\r\n heading:
{title}
,\r\n lineItems: _getLineItemsComponents(item)\r\n });\r\n });\r\n\r\n return lineItemDeliveryGroup;\r\n };\r\n\r\n return _getLineItems();\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt 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 { IMoeCheckoutData } from '../moe-checkout.data';\r\nimport { IMoeCheckoutProps } from '../moe-checkout.props.autogenerated';\r\n\r\nexport interface IOrderSummary {\r\n orderSummaryProps: INodeProps;\r\n heading?: React.ReactNode;\r\n lines?: IOrderSummaryLines;\r\n}\r\nexport const getOrderSummary = (input: IMoeCheckoutProps): 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 },\r\n context,\r\n typeName,\r\n id,\r\n telemetry\r\n } = input;\r\n\r\n const checkoutState = get(checkout, 'result');\r\n const cart = get(checkout, 'result.checkoutCart.cart');\r\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\r\n const channelConfiguration = context.request.channel!;\r\n 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\r\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\r\n const {\r\n config: { orderSummaryHeading }\r\n } = input;\r\n orderSummaryHeading!.text = event.target.value;\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 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 })\r\n : undefined\r\n };\r\n};\r\n","/* eslint-disable react/no-find-dom-node */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\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 classname from 'classnames';\r\nimport * as React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nexport interface ICheckoutGuidedCardProps {\r\n step: number;\r\n title?: HeadingType;\r\n disabled?: boolean; // Module is not available\r\n isActive?: boolean; // Step === currentStep\r\n isVisted?: boolean; // Step < currentStep\r\n isExpanded?: boolean;\r\n isReady?: boolean;\r\n isPending?: boolean;\r\n isUpdating?: boolean;\r\n isSubmitting?: boolean;\r\n isCancelAllowed?: boolean;\r\n isMobile?: boolean;\r\n hasInitialized?: boolean;\r\n hasControlGroup?: boolean;\r\n children: React.ReactNode;\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 } = 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\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 { 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 = ReactDOM.findDOMNode(this) as HTMLElement;\r\n const focussableElements = `\r\n a:not([disabled]),\r\n button:not([disabled]),\r\n input[type=submit]:not([disabled]),\r\n input[type=checkbox]:not([disabled]),\r\n input[type=text]:not([disabled]),\r\n input[type=radio]:not([disabled]),\r\n input[type=password]:not([disabled]),\r\n select:not([disabled]),\r\n textarea:not([disabled]),\r\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\r\n `;\r\n\r\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\r\n child && child.focus && child.focus();\r\n };\r\n\r\n private 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 {step + 1}. \r\n {text && {text}}\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default CheckoutGuidedCard;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt 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 { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport get from 'lodash/get';\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 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 telemetryContent?: ITelemetryContent;\r\n}\r\n\r\ninterface ICheckoutGuidedFormState {\r\n currentStep: number;\r\n}\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 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 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 } = state || ({} as IModuleStateManager);\r\n return (\r\n \r\n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\r\n\r\n 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 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): boolean => {\r\n if (this.props.isEditor) {\r\n // Editorial mode: Expand all the drawers\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. All rights reserved.\r\n * See License.txt 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 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, 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 buttonsStates.map(buttonSetState => {\r\n buttonSetState(false);\r\n return true;\r\n });\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}) => {\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) {\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","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { checkoutAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { getTenderTypesAsync, resolveCardTypesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport {\r\n Address,\r\n CardPaymentAcceptResult,\r\n CardType,\r\n CartTenderLine,\r\n RetailOperation,\r\n SalesOrder,\r\n TenderType,\r\n TokenizedPaymentCard\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nexport const OPERATIONS = {\r\n PayCard: 201,\r\n PayGiftCertificate: 214,\r\n PayLoyalty: 207,\r\n PayCustomerAccount: 202\r\n};\r\n\r\nconst getCardTypeId = async (ctx: IActionContext, cardPrefix: string = ''): Promise => {\r\n try {\r\n const response = await resolveCardTypesAsync({ callerContext: ctx }, cardPrefix, CardType.Unknown);\r\n if (response && response.length > 0) {\r\n return response[0].TypeId;\r\n }\r\n } catch (error) {\r\n ctx.telemetry.error('Call to resolveCardTypesAsync failed.', error);\r\n }\r\n return undefined;\r\n};\r\n\r\nconst findTenderIdTypeByOperationId = (tenderTypes: TenderType[], operationId: RetailOperation): string | undefined => {\r\n const matchedTenderType = tenderTypes.find(tenderType => tenderType.OperationId === operationId);\r\n if (matchedTenderType) {\r\n return matchedTenderType.TenderTypeId;\r\n }\r\n return;\r\n};\r\n\r\nconst roundNumber = (value: number) => Number(value.toFixed(2));\r\n\r\nasync function getLoyaltyTenderLine(\r\n ctx: IActionContext,\r\n LoyaltyCardId: string,\r\n Amount: number = 0,\r\n Currency: string = 'USD'\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayLoyalty);\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n LoyaltyCardId\r\n };\r\n}\r\n\r\nasync function getGiftCardTenderLine(\r\n ctx: IActionContext,\r\n GiftCardId: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n tenderTypeId?: string,\r\n giftCardPin?: string,\r\n giftCardExpirationYear?: number,\r\n giftCardExpirationMonth?: number\r\n): Promise {\r\n let TenderTypeId = tenderTypeId;\r\n\r\n if (!TenderTypeId) {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayGiftCertificate);\r\n }\r\n\r\n const GiftCardPin = giftCardPin;\r\n const GiftCardExpirationYear = giftCardExpirationYear;\r\n const GiftCardExpirationMonth = giftCardExpirationMonth;\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n GiftCardId,\r\n GiftCardPin,\r\n GiftCardExpirationYear,\r\n GiftCardExpirationMonth\r\n };\r\n}\r\n\r\nasync function getCreditCardTenderLine(\r\n ctx: IActionContext,\r\n tokenizedPaymentCard: TokenizedPaymentCard,\r\n cardPrefix: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n billingAddress?: Address\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n let cartTypeId = tokenizedPaymentCard.CardTypeId;\r\n\r\n if (!cartTypeId) {\r\n cartTypeId = await getCardTypeId(ctx, cardPrefix);\r\n }\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get card tender type');\r\n }\r\n\r\n if (!cartTypeId) {\r\n throw new Error('Fail to get card type id');\r\n }\r\n\r\n const TenderTypeId = tokenizedPaymentCard.TenderType ?? findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n Amount,\r\n TenderTypeId,\r\n CardTypeId: cartTypeId\r\n };\r\n cardTenderLine.TokenizedPaymentCard = {\r\n ...tokenizedPaymentCard,\r\n CardTypeId: cartTypeId,\r\n\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: tokenizedPaymentCard.House || 'N/A',\r\n ...(tokenizedPaymentCard.CardTokenInfo && {\r\n CardTokenInfo: {\r\n ...tokenizedPaymentCard.CardTokenInfo,\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardTokenInfo'\r\n }\r\n }),\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\n/**\r\n * Get credit card tender line.\r\n * @param context - Action context.\r\n * @param amount - Due amount for credit card.\r\n * @param currency - Currency.\r\n * @param cardPaymentAcceptResult - CardPaymentAcceptResult.\r\n * @returns - The credit card tender line.\r\n */\r\nasync function getCreditCardTenderLineForSinglePaymentAuth(\r\n context: IActionContext,\r\n amount: number = 0,\r\n currency: string = 'USD',\r\n cardPaymentAcceptResult?: CardPaymentAcceptResult\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: context, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n const tenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error -- existing data.\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency: currency,\r\n Amount: amount,\r\n TenderTypeId: tenderTypeId,\r\n CardPaymentAcceptResult: cardPaymentAcceptResult\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\nasync function createCustomerAccountTenderLine(ctx: IActionContext, Amount: number, Currency: string = 'USD'): Promise {\r\n const CustomerId = null;\r\n if (!ctx.requestContext.user.isAuthenticated) {\r\n ctx.telemetry.error('A customer id is required to pay with customer account');\r\n }\r\n\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n ctx.telemetry.error('No tender types found for this channel');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCustomerAccount);\r\n if (!TenderTypeId) {\r\n ctx.telemetry.error('No customer account tender type');\r\n }\r\n return {\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n\r\n // @ts-expect-error\r\n CustomerId\r\n };\r\n}\r\n\r\nexport default async (\r\n ctx: IActionContext,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean\r\n): Promise => {\r\n const checkoutState = await getCheckoutState(ctx).catch(error => {\r\n throw error;\r\n });\r\n\r\n const cartState = checkoutState.checkoutCart;\r\n\r\n const channelConfiguration = ctx.requestContext.channel;\r\n\r\n if (!cartState || Object.keys(cartState).length === 0 || !channelConfiguration) {\r\n throw new Error('Fail to placeOrder');\r\n }\r\n\r\n const {\r\n giftCardExtends,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n guestCheckoutEmail,\r\n billingAddress,\r\n loyaltyAmount,\r\n cardPaymentAcceptResult,\r\n shouldEnableSinglePaymentAuthorizationCheckout\r\n } = checkoutState;\r\n const { Currency } = channelConfiguration;\r\n\r\n let amountDue = cartState.cart.AmountDue || 0;\r\n let cartTenderLines;\r\n const getTenderLinePromises = [];\r\n const loyaltyCardNumber = cartState.cart.LoyaltyCardId;\r\n\r\n // Pay by loyalty first\r\n if (loyaltyAmount && loyaltyCardNumber) {\r\n const chargedAmount = roundNumber(Math.min(loyaltyAmount, amountDue));\r\n const loyaltyTenderLinePromise = getLoyaltyTenderLine(ctx, loyaltyCardNumber, chargedAmount, Currency);\r\n getTenderLinePromises.push(loyaltyTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n }\r\n\r\n // Then by gift card\r\n if (giftCardExtends && giftCardExtends.length > 0) {\r\n giftCardExtends.some(giftCardExtend => {\r\n if (giftCardExtend.Balance && amountDue > 0) {\r\n const chargedAmount = roundNumber(Math.min(giftCardExtend.Balance, amountDue));\r\n const tenderTypeId = giftCardExtend.TenderTypeId;\r\n const giftCardPin = giftCardExtend.Pin;\r\n const giftCardExpirationYear = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[1], 10)\r\n : undefined;\r\n const giftCardExpirationMonth = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[0], 10)\r\n : undefined;\r\n const creditCardTenderLinePromise = getGiftCardTenderLine(\r\n ctx,\r\n giftCardExtend.Id,\r\n chargedAmount,\r\n Currency,\r\n tenderTypeId,\r\n giftCardPin,\r\n giftCardExpirationYear,\r\n giftCardExpirationMonth\r\n );\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n }\r\n return amountDue === 0;\r\n });\r\n }\r\n\r\n // Then by customer account\r\n if (checkoutState.customerAccountAmount > 0) {\r\n const chargedAmount = roundNumber(Math.min(checkoutState.customerAccountAmount, amountDue));\r\n const customerAccountTenderLinePromise = createCustomerAccountTenderLine(ctx, chargedAmount, Currency);\r\n getTenderLinePromises.push(customerAccountTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n }\r\n\r\n // Pay the rest by credit card\r\n if (amountDue > 0) {\r\n let creditCardTenderLinePromise: Promise;\r\n\r\n if (shouldEnableSinglePaymentAuthorizationCheckout) {\r\n creditCardTenderLinePromise = getCreditCardTenderLineForSinglePaymentAuth(ctx, amountDue, Currency, cardPaymentAcceptResult);\r\n } else {\r\n if (!tokenizedPaymentCard) {\r\n throw new Error('Fail to placeOrder: no token found');\r\n }\r\n creditCardTenderLinePromise = getCreditCardTenderLine(\r\n ctx,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n amountDue,\r\n Currency,\r\n billingAddress\r\n );\r\n }\r\n\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n }\r\n\r\n if (getTenderLinePromises.length > 0) {\r\n // When payment methods is required\r\n cartTenderLines = await Promise.all(getTenderLinePromises).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!cartTenderLines || cartTenderLines.length === 0) {\r\n throw new Error('Fail to placeOrder: fail to get cart tender lines');\r\n }\r\n }\r\n\r\n const cartVersion = updatedCartVersion || cartState.cart.Version;\r\n\r\n // Proceed checkout\r\n const salesOrder = await checkoutAsync(\r\n { callerContext: ctx, bypassCache: 'get' },\r\n cartState.cart.Id,\r\n guestCheckoutEmail,\r\n undefined,\r\n undefined,\r\n cartTenderLines || null,\r\n cartVersion\r\n ).catch(async error => {\r\n if (checkoutState.shouldEnableSinglePaymentAuthorizationCheckout) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n if (error.data?.AdditionalContext) {\r\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n await checkoutState.updateRedirectAdditionalContext({\r\n newRedirectAdditionalContext: error?.data?.AdditionalContext as string\r\n });\r\n } else {\r\n await checkoutState.updateIsCheckoutCallFailed({ newIsCheckoutCallFailed: true });\r\n\r\n if (isPaymentVerificationRedirection) {\r\n await checkoutState.checkoutCart.refreshCart({});\r\n }\r\n }\r\n }\r\n\r\n throw error;\r\n });\r\n\r\n if (!salesOrder) {\r\n throw new Error('Fail to placeOrder: fail to checkout');\r\n }\r\n\r\n return salesOrder;\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartState, getCheckoutState } from '@msdyn365-commerce/global-state';\r\n\r\nasync function emptyActiveCart(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\r\nexport default emptyActiveCart;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\n/* eslint-disable */\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\n\r\nimport checkout from './moe-checkout';\r\nimport emptyActiveCart from './empty-active-cart';\r\n\r\nexport default async (\r\n ctx: IActionContext,\r\n checkoutState: ICheckoutState | undefined,\r\n orderedProducts: SimpleProduct[] | undefined,\r\n redirect: boolean,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean,\r\n artifactsData?: any,\r\n htmlResourceURLsNew?: any,\r\n isEmailDownloadLink?: any\r\n) => {\r\n // @ts-ignore\r\n return new Promise(async (resolve: () => void, reject: (reason?: Error) => void) => {\r\n let salesOrder: SalesOrder;\r\n\r\n // Proceed checkout\r\n try {\r\n salesOrder = await checkout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n // Remove purchased items from the active cart\r\n try {\r\n await emptyActiveCart(ctx);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n if (redirect) {\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 console.log('artifactsData', artifactsData);\r\n console.log(url);\r\n // window.location.assign(url);\r\n\r\n try {\r\n const urls = artifactsData.map((x: { MediaUrl: any; MediaName: any }) => {\r\n return { url: x.MediaUrl, mediaName: x.MediaName };\r\n });\r\n if (isEmailDownloadLink === false) {\r\n await downloadHTML(htmlResourceURLsNew);\r\n await download(urls).then(x => {\r\n window.location.assign(url);\r\n });\r\n } else {\r\n window.location.assign(url);\r\n }\r\n } catch (error) {\r\n console.log('download error', error);\r\n }\r\n } else {\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 function saveFile(mediaItem: any) {\r\n const url = mediaItem.url;\r\n const mediaName = mediaItem.mediaName;\r\n\r\n return new Promise(function(resolve, reject) {\r\n // Get file name from url.\r\n var xhr = new XMLHttpRequest();\r\n xhr.responseType = 'blob';\r\n xhr.onload = function() {\r\n resolve(xhr);\r\n };\r\n xhr.onerror = reject;\r\n xhr.open('GET', url);\r\n xhr.send();\r\n }).then(function(xhr: any) {\r\n // var filename = url.substring(url.lastIndexOf('/') + 1).split('?')[0];\r\n var a = document.createElement('a');\r\n a.href = window.URL.createObjectURL(xhr.response); // xhr.response is a blob\r\n a.download = mediaName; // Set the file name.\r\n a.style.display = 'none';\r\n document.body.appendChild(a);\r\n a.click();\r\n return xhr;\r\n });\r\n }\r\n\r\n function download(urls: any) {\r\n var cur = Promise.resolve();\r\n urls.forEach(function(url: string) {\r\n cur = cur.then(function() {\r\n return saveFile(url);\r\n });\r\n });\r\n return cur;\r\n }\r\n\r\n function downloadHTML(urls: any) {\r\n var cur = Promise.resolve();\r\n urls.forEach(function(url: string) {\r\n if (url) {\r\n cur = cur.then(function() {\r\n return saveHTML(url, 'Resource Page');\r\n });\r\n }\r\n });\r\n return cur;\r\n }\r\n\r\n async function saveHTML(url: string, filename: string) {\r\n await fetch(url)\r\n .then(response => response.blob())\r\n .then(blob => {\r\n const link = document.createElement('a');\r\n link.href = URL.createObjectURL(blob);\r\n link.download = filename;\r\n link.click();\r\n })\r\n .catch(console.error);\r\n }\r\n};\r\n","/* eslint-disable security/detect-object-injection */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt 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 { 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 DeliveryPreferenceType,\r\n LineDeliverySpecification,\r\n ReleasedProductType,\r\n SimpleProduct\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 ProductAvailabilitiesForCartLineItems\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} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport { computed, reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IMoeCheckoutData } from './moe-checkout.data';\r\nimport { ICheckoutHeadingData, IMoeCheckoutProps } from './moe-checkout.props.autogenerated';\r\nimport AlertComponent from './components/alert';\r\nimport { getInvoicePaymentSummary, IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\r\nimport { getLineItems, ILineItems } from './components/get-line-items';\r\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\r\nimport GuidedFormComponent from './components/guided-form';\r\nimport PlaceOrderButtonComponent from './components/place-order-button';\r\nimport placeOrder from './methods/place-order';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { ACTION_BUTTONS } from '../../utilities/constants';\r\nimport { getToggleLang, getUserPrefLang, getUserPreferredLanguage } from '../../utilities/language-change';\r\n\r\nexport * from './components/get-line-items';\r\nexport * from './components/get-order-summary';\r\n\r\ntype DeviceType = 'Mobile';\r\n\r\ninterface ICheckoutState {\r\n errorMessage: string;\r\n isValidationPassed: boolean;\r\n isPlaceOrderLoading?: boolean;\r\n}\r\n\r\nexport interface ICheckoutViewProps extends IMoeCheckoutProps {\r\n className: string;\r\n canShow?: boolean;\r\n isEmptyCart?: boolean;\r\n isConsentGiven?: boolean;\r\n hasError?: boolean;\r\n cartStatus?: string;\r\n isMobile?: boolean;\r\n isEditorialMode?: boolean;\r\n backToShoppingUrl?: string;\r\n editCartLink?: string;\r\n hasSalesOrder: boolean;\r\n 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 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 placeOrderButton?: React.ReactNode;\r\n termsAndConditions?: React.ReactNode;\r\n keepShoppingButton?: React.ReactNode;\r\n orderConfirmation?: React.ReactNode;\r\n}\r\n\r\nexport interface ICheckoutModuleProps extends IMoeCheckoutProps, IModuleStateProps {}\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 return 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 public get isPaymentVerificationRedirection(): boolean {\r\n const { requestFormData, query } = this.props.context.request;\r\n return !!(requestFormData || (query && query.pv === '1'));\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 // 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.moduleState.isReady &&\r\n (isTermsAndConditionAccepted === undefined || isTermsAndConditionAccepted || shouldEnableSinglePaymentAuthorizationCheckout) &&\r\n (this.state.errorMessage === '' || shouldEnableSinglePaymentAuthorizationCheckout || this.isPaymentVerificationRedirection)\r\n );\r\n }\r\n\r\n @computed get isCartReady(): boolean {\r\n return (\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 public state: ICheckoutState = {\r\n errorMessage: '',\r\n isValidationPassed: false,\r\n isPlaceOrderLoading: 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 public componentDidMount(): void {\r\n const {\r\n resources: { genericErrorMessage }\r\n } = this.props;\r\n\r\n when(\r\n () => this.hasError,\r\n () => {\r\n this.setState({\r\n errorMessage: genericErrorMessage\r\n });\r\n this.props.context.telemetry.error('Failed to get cart');\r\n }\r\n );\r\n\r\n 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 () => {\r\n this.validateForCheckout();\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 // 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 ) {\r\n if (!this.state.isPlaceOrderLoading) {\r\n this.setState({ isPlaceOrderLoading: true });\r\n }\r\n\r\n await this.onPlaceOrder();\r\n this.setState({ isPlaceOrderLoading: false });\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 }\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 const { requestFormData, query } = this.props.context.request;\r\n const isRedirection = !!(requestFormData && query && query.pv === '1');\r\n if (isRedirection) {\r\n await this.props.data.checkout.result.updateIsPlaceOrderEnabledInRedirection({\r\n newIsPlaceOrderEnabledInRedirection: true\r\n });\r\n }\r\n }\r\n }\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, siteName },\r\n resources,\r\n context\r\n } = this.props;\r\n const { errorMessage } = this.state;\r\n const {\r\n backToShopping,\r\n placeOrderText,\r\n placeOrderTextInMaori,\r\n confirmPaymentText,\r\n cookieConsentRequiredMessage,\r\n genericErrorMessage\r\n } = resources;\r\n const checkoutClass = classnames('ms-checkout', className);\r\n const checkoutInformation = this.getSlotItems('checkoutInformation');\r\n\r\n // Identifying Language\r\n const toggleLang = getToggleLang(context);\r\n const userPrefLang = getUserPrefLang(context.request.user.customerAccountNumber as any, context);\r\n const preferredLanguageActBtns: any = getUserPreferredLanguage(siteName as any, ACTION_BUTTONS, userPrefLang, toggleLang, context);\r\n\r\n const canDownload = () => {\r\n // const isEmailDownloadLink = this.props.data.cart.result?.extensionProperties[0].Value?.BooleanValue;\r\n // await this.props.data.checkout.result?.checkoutCart.extensionProperties\r\n // const isEmailDownloadLink =\r\n // this.props.data &&\r\n // this.props.data?.cart &&\r\n // this.props.data?.cart?.result &&\r\n // this.props.data?.cart?.result?.extensionProperties.length > 0\r\n // ? this.props.data.cart.result?.extensionProperties[0].Value?.BooleanValue\r\n // : false;\r\n\r\n const isEmailDownloadLink =\r\n this.props.data &&\r\n this.props.data?.checkout.result &&\r\n this.props.data?.checkout?.result?.checkoutCart &&\r\n this.props.data?.checkout?.result?.checkoutCart.extensionProperties.length > 0\r\n ? this.props.data?.checkout?.result?.checkoutCart.extensionProperties[0].Value?.BooleanValue\r\n : false;\r\n\r\n if (!isEmailDownloadLink) {\r\n return true;\r\n } else {\r\n return this.props.data?.checkout?.result?.checkoutCart?.cart?.ReceiptEmail ||\r\n this.props.context?.request?.user?.emailAddress\r\n ? true\r\n : false;\r\n }\r\n };\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 placeOrderBtnText = preferredLanguageActBtns === 'maori' ? placeOrderTextInMaori : placeOrderText;\r\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderBtnText;\r\n\r\n let viewProps: ICheckoutViewProps = {\r\n ...this.props,\r\n className: checkoutClass,\r\n isEmptyCart: this.isEmptyCart,\r\n isConsentGiven,\r\n hasError: this.hasError,\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: 'ms-checkout__side' },\r\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\r\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\r\n termsAndConditionsProps: { className: 'ms-checkout__terms-and-conditions' },\r\n title: checkoutHeading && this.renderMsdyn365Text(checkoutHeading)\r\n };\r\n\r\n if (!isConsentGiven) {\r\n viewProps = {\r\n ...viewProps,\r\n alert: \r\n };\r\n } else if (this.isLoading()) {\r\n viewProps = {\r\n ...viewProps,\r\n loading: \r\n };\r\n } else if (this.hasError) {\r\n viewProps = {\r\n ...viewProps,\r\n alert: \r\n };\r\n } else {\r\n const shouldEnableSinglePaymentAuthorizationCheckout: boolean =\r\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\r\n\r\n viewProps = {\r\n ...viewProps,\r\n alert: errorMessage && ,\r\n canShow: true,\r\n guidedForm: checkoutInformation ? (\r\n \r\n ) : (\r\n undefined\r\n ),\r\n orderSummary: getOrderSummary(this.props),\r\n invoicePaymentSummary: getInvoicePaymentSummary(this.props),\r\n lineItems: hasInvoiceLine ? undefined : getLineItems(this.props, this.telemetryContent),\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 public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\r\n return (\r\n \r\n );\r\n }\r\n\r\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\r\n (this.props.config.checkoutHeading!.text = event.target.value);\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 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 private checkIsEmptyCart = async () => {\r\n const cartState = await getCartState(this.props.context.actionContext);\r\n return cartState.isEmpty;\r\n };\r\n\r\n private readonly onPlaceOrder = async (): Promise => {\r\n if (await this.checkIsEmptyCart()) {\r\n const notFoundEditCartLinkMessage = 'Cart is empty, but no editCartLink found';\r\n this.redirectToCartPage(notFoundEditCartLinkMessage);\r\n return;\r\n }\r\n const {\r\n resources: { checkoutOutOfStockErrorMessage, genericErrorMessage, invalidCartVersionErrorMessage },\r\n context: {\r\n actionContext,\r\n app: {\r\n config: { enableStockCheck = false }\r\n }\r\n },\r\n slots: { orderConfirmation },\r\n data: { checkout, products }\r\n } = this.props;\r\n\r\n const artifacts = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.map(x => {\r\n return {\r\n artifacts:\r\n x &&\r\n x.ExtensionProperties &&\r\n x.ExtensionProperties.length > 0 &&\r\n x.ExtensionProperties[0].Value &&\r\n x.ExtensionProperties[0].Value.StringValue\r\n ? JSON.parse(x.ExtensionProperties[0].Value.StringValue)\r\n : null,\r\n htmlResourceURLs:\r\n x &&\r\n x.ExtensionProperties &&\r\n x.ExtensionProperties.length > 1 &&\r\n x.ExtensionProperties[1].Value &&\r\n x.ExtensionProperties[1].Value.StringValue\r\n ? x.ExtensionProperties[1].Value.StringValue\r\n : null\r\n };\r\n });\r\n // const isEmailDownloadLink =\r\n // this.props.data &&\r\n // this.props.data?.cart &&\r\n // this.props.data?.cart?.result &&\r\n // this.props.data?.cart?.result?.extensionProperties.length > 0\r\n // ? this.props.data.cart.result?.extensionProperties[0].Value?.BooleanValue\r\n // : false;\r\n\r\n const isEmailDownloadLink =\r\n this.props.data &&\r\n this.props.data?.checkout.result &&\r\n this.props.data?.checkout?.result?.checkoutCart &&\r\n this.props.data?.checkout?.result?.checkoutCart.extensionProperties.length > 0\r\n ? this.props.data?.checkout?.result?.checkoutCart.extensionProperties[0].Value?.BooleanValue\r\n : false;\r\n\r\n const artifactsNew: any = [];\r\n const htmlResourceURLsNew: string[] = [];\r\n try {\r\n artifacts?.forEach(x => {\r\n x.artifacts.forEach((element: any) => {\r\n artifactsNew.push(element);\r\n });\r\n\r\n htmlResourceURLsNew.push(x.htmlResourceURLs as string);\r\n });\r\n\r\n console.log('isEmailDownloadLink', isEmailDownloadLink);\r\n console.log('artifactsNew', artifactsNew);\r\n console.log('htmlResourceURLsNew', htmlResourceURLsNew);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n // If hasInvoiceLine is true, no inventory check\r\n if (\r\n !this.props.data.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: checkoutOutOfStockErrorMessage\r\n });\r\n this.props.context.telemetry.error(checkoutOutOfStockErrorMessage);\r\n } else {\r\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\r\n\r\n const updatedCartVersion = await this.updateCartLineEmailAddress(this.props.data.checkout.result?.guestCheckoutEmail || '');\r\n console.log('this.props.data.checkout.result?.checkoutCart.cart', this.props.data.checkout.result?.checkoutCart.cart);\r\n console.log('this.props.data.cart', this.props.data.cart);\r\n await placeOrder(\r\n actionContext,\r\n this.props.data.checkout.result,\r\n this.props.data.products.result,\r\n !hasOrderConfirmation,\r\n updatedCartVersion,\r\n this.isPaymentVerificationRedirection,\r\n artifactsNew,\r\n htmlResourceURLsNew,\r\n isEmailDownloadLink\r\n )\r\n .then(res => {\r\n console.log(res);\r\n console.log(\r\n '2 - this.props.data.checkout.result?.checkoutCart.cart.ExtensionProperties',\r\n this.props.data.checkout.result?.checkoutCart.cart.ExtensionProperties\r\n );\r\n })\r\n .catch(error => {\r\n let errorMessage = genericErrorMessage;\r\n\r\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\r\n errorMessage = invalidCartVersionErrorMessage;\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.isPaymentVerificationRedirection\r\n ) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n errorMessage\r\n });\r\n this.props.telemetry.exception(error);\r\n });\r\n\r\n await checkout.result?.updateIsPaymentSectionContainerReady({ newIsPaymentSectionContainerReady: false });\r\n }\r\n };\r\n\r\n // private download_files = (files: any) => {\r\n // function download_next(i: number) {\r\n // if (i >= files.length) {\r\n // return;\r\n // }\r\n // var a = document.createElement('a');\r\n // a.href = files[i].MediaUrl;\r\n // a.target = '_parent';\r\n // // Use a.download if available, it prevents plugins from opening.\r\n // if ('download' in a) {\r\n // a.download = files[i].MediaName;\r\n // }\r\n // // Add a to the doc for click to work.\r\n // (document.body || document.documentElement).appendChild(a);\r\n // if (a.click) {\r\n // a.click(); // The click method is supported by most browsers.\r\n // }\r\n // // } else {\r\n // // $(a).click(); // Backup using jquery\r\n // // }\r\n // // Delete the temporary link.\r\n // a.parentNode!.removeChild(a);\r\n // // Download the next file with a small timeout. The timeout is necessary\r\n // // for IE, which will otherwise only download the first file.\r\n // setTimeout(function() {\r\n // download_next(i + 1);\r\n // }, 500);\r\n // }\r\n // // Initiate the first download.\r\n // download_next(0);\r\n // };\r\n\r\n // Update receipt email address for electronic cart line\r\n // return 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 ? '99' : 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 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 cart.CartLines?.map(cartline => {\r\n const cartlineProduct = products.find(product => product.RecordId === cartline.ProductId);\r\n const isServiceItem = cartlineProduct?.ItemTypeValue === ReleasedProductType.Service;\r\n\r\n // If product is service item or cartline is electronic delivery, then no inventory check\r\n if (\r\n !isServiceItem &&\r\n cartline.DeliveryMode !== emailDeliveryModeCode &&\r\n ArrayExtensions.hasElements(productInventoryInformation)\r\n ) {\r\n const foundProductAvailability = productInventoryInformation.find(productInventory => {\r\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\r\n });\r\n\r\n if (\r\n !(\r\n foundProductAvailability?.IsProductAvailable &&\r\n foundProductAvailability.ProductAvailableQuantity.AvailableQuantity !== undefined &&\r\n cartline.Quantity &&\r\n cartline.Quantity <= foundProductAvailability.ProductAvailableQuantity.AvailableQuantity\r\n )\r\n ) {\r\n isOverMaxQuantity = true;\r\n }\r\n }\r\n });\r\n\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 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 private readonly onContainerReady = (): void => {\r\n this.getActiveChildModuleStates().forEach(state => {\r\n state.isReady && state.onContainerReady && state.onContainerReady();\r\n });\r\n };\r\n\r\n private readonly redirectToCartPage = (notFoundEditCartLinkMessage: string): void => {\r\n const editCartLink = Msdyn365.getUrlSync('home', 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 });\r\n this.props.context.telemetry.error(notFoundEditCartLinkMessage);\r\n }\r\n };\r\n\r\n private readonly validateForCheckout = (retry: boolean = true): void => {\r\n const notFoundEditCartLinkMessage = \"Cart doesn't pass validation, but no editCartLink found\";\r\n const cart = this.props.data.checkout.result!.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\r\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings =\r\n defaultOrderQuantityLimitsFeatureConfig === 'all' ||\r\n (customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b)));\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(() => {\r\n 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\r\nexport default Checkout;\r\n","/* eslint-disable security/detect-unsafe-regex */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\n/* eslint-disable react/no-unknown-property */\r\nimport { Module, Node, getTelemetryObject } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IPickUpAtStore } from './moe-checkout';\r\nimport { IEmailDelivery } from './components';\r\n// import { IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\r\nimport { SignInButton } from '../../components/signinbutton.component';\r\nimport { Address, CommerceProperty } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { getDefaultCustomerDetailsAsync } from '../../actions/extensions/DataActionExtension.g';\r\nimport { getAsset } from '@msdyn365-commerce/core';\r\nimport { ACTION_BUTTONS, DOWNLOAD_KETE_SITE_LANGUAGE } from '../../utilities/constants';\r\nimport { getToggleLang, getUserPrefLang, getUserPreferredLanguage } from '../../utilities/language-change';\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\n// const OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n//
\r\n// {heading}\r\n//
\r\n// {lines && (\r\n// <>\r\n// {lines.subtotal}\r\n// {lines.shipping}\r\n// {lines.otherCharge}\r\n// {lines.tax}\r\n// {lines.totalDiscounts}\r\n// {lines.loyalty}\r\n// {lines.giftCard}\r\n// {lines.orderTotal}\r\n// \r\n// )}\r\n//
\r\n//
\r\n// );\r\n\r\n// const PaymentSummaryComponent: React.FC = ({ heading, lines }) => (\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 canShow,\r\n checkoutProps,\r\n headerProps,\r\n hasSalesOrder,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n orderConfirmation,\r\n loading,\r\n alert,\r\n title,\r\n // guidedForm,\r\n lineItems,\r\n placeOrderButton,\r\n isEmptyCart,\r\n context,\r\n config,\r\n resources\r\n // keepShoppingButton\r\n } = props;\r\n\r\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n const isAuthenticated = props.context.request.user.isAuthenticated;\r\n const registeredEmail = props.context.request?.user?.emailAddress;\r\n const [emailID, setEmailID] = React.useState('');\r\n const [confirmEmailID, setConfirmEmailID] = React.useState(false);\r\n const [EmailDownloadLink, setEmailDownloadLink] = React.useState(false);\r\n const [inputError, setInputError] = React.useState('');\r\n const [defaultCustomerDetails, setDefaultCustomerDetails] = React.useState();\r\n const [disableEmailInputSection, setDisableEmailInputSection] = React.useState(true);\r\n\r\n // Identifying Language\r\n const toggleLang = getToggleLang(context);\r\n const userPrefLang = getUserPrefLang(context.request.user.customerAccountNumber as any, context);\r\n const preferredLanguage: any = getUserPreferredLanguage(config.siteName as any, ACTION_BUTTONS, userPrefLang, toggleLang, context);\r\n const preferredKeteSiteLanguage: any = getUserPreferredLanguage(\r\n config.siteName,\r\n DOWNLOAD_KETE_SITE_LANGUAGE,\r\n userPrefLang,\r\n toggleLang,\r\n context\r\n );\r\n React.useEffect(() => {\r\n void (async () => {\r\n var customerDetails = await getDefaultCustomerDetails();\r\n if (customerDetails) {\r\n setDefaultCustomerDetails(customerDetails);\r\n await updateShippingAddress(customerDetails);\r\n }\r\n if (isAuthenticated && registeredEmail) {\r\n await updateGuestProfile(registeredEmail);\r\n await (await props.data.cart).updateReceiptEmail({ newEmail: registeredEmail });\r\n setEmailID(registeredEmail);\r\n } else {\r\n if (!EmailDownloadLink && customerDetails && customerDetails.Email) {\r\n await updateGuestProfile(customerDetails.Email);\r\n await (await props.data.cart).updateReceiptEmail({ newEmail: customerDetails.Email });\r\n }\r\n }\r\n })();\r\n }, [props?.data?.checkout?.result]);\r\n\r\n async function getDefaultCustomerDetails() {\r\n try {\r\n const context: any = { callerContext: props.context.actionContext };\r\n var result = await getDefaultCustomerDetailsAsync(context);\r\n console.log('GetDefaultCustomerDetails', result);\r\n return result;\r\n } catch (err) {\r\n console.log(err);\r\n return;\r\n }\r\n }\r\n\r\n async function fnEmailSelectionClick(): Promise {\r\n if (fnValidateEmail(emailID)) {\r\n setInputError('');\r\n await updateGuestProfile(emailID);\r\n setConfirmEmailID(true);\r\n } else {\r\n setInputError(preferredKeteSiteLanguage === 'maori' ? resources.emailErrorMessageTextInMaori : resources.emailErrorMessageText);\r\n }\r\n }\r\n\r\n const updateGuestProfile = async (newGuestCheckoutEmail: string): Promise => {\r\n if (props.data.checkout.result) {\r\n console.log('Email Update:', newGuestCheckoutEmail);\r\n await props.data.checkout.result.updateGuestCheckoutEmail({ newGuestCheckoutEmail });\r\n }\r\n };\r\n\r\n function fnEmailChangeClick(): void {\r\n setConfirmEmailID(false);\r\n }\r\n\r\n const updateShippingAddress = async (customerDetails: any): Promise => {\r\n const newShippingAddress: Address = {\r\n Name: customerDetails.Name ? customerDetails.Name : 'User',\r\n Id: '',\r\n FullAddress: customerDetails.Address,\r\n RecordId: customerDetails.Id,\r\n Street: customerDetails.Street,\r\n StreetNumber: '',\r\n County: '',\r\n CountyName: '',\r\n City: customerDetails.City,\r\n DistrictName: '',\r\n State: customerDetails.State,\r\n StateName: customerDetails.StateName,\r\n ZipCode: customerDetails.ZipCode,\r\n ThreeLetterISORegionName: customerDetails.CountryRegionId,\r\n Phone: '',\r\n PhoneRecordId: 0,\r\n PhoneExt: '',\r\n Email: '',\r\n EmailContent: '',\r\n EmailRecordId: 0,\r\n Url: '',\r\n UrlRecordId: 0,\r\n TwoLetterISORegionName: 'US',\r\n Deactivate: false,\r\n AttentionTo: '',\r\n BuildingCompliment: '',\r\n Postbox: '',\r\n TaxGroup: '',\r\n AddressTypeValue: 6,\r\n IsPrimary: false,\r\n IsPrivate: false,\r\n PartyNumber: '',\r\n IsAsyncAddress: false,\r\n DirectoryPartyTableRecordId: 0,\r\n DirectoryPartyLocationRecordId: 0,\r\n DirectoryPartyLocationRoleRecordId: 0,\r\n LogisticsLocationId: '',\r\n LogisticsLocationRecordId: 0,\r\n LogisticsLocationExtRecordId: 0,\r\n LogisticsLocationRoleRecordId: 0,\r\n PhoneLogisticsLocationRecordId: 0,\r\n PhoneLogisticsLocationId: '',\r\n EmailLogisticsLocationRecordId: 0,\r\n EmailLogisticsLocationId: '',\r\n UrlLogisticsLocationRecordId: 0,\r\n UrlLogisticsLocationId: '',\r\n ExpireRecordId: 0,\r\n SortOrder: 0,\r\n RoleCount: 0,\r\n DataAreaId: '',\r\n ExtensionProperties: []\r\n };\r\n\r\n const updateCartDeliverySpecificationInput = {\r\n deliveryModeId: '99',\r\n shippingAddress: newShippingAddress,\r\n channelDeliveryOptionConfig: undefined\r\n };\r\n\r\n if (props.data.checkout.result) {\r\n console.log('--------updateShippingAddress-------');\r\n await props.data.checkout.result.updateShippingAddress({ newShippingAddress });\r\n await props.data.checkout.result.checkoutCart.updateShippingAddress({ newShippingAddress }).catch(error => {\r\n props.telemetry.error(error);\r\n });\r\n await props.data.checkout.result.checkoutCart.updateCartDeliverySpecification(updateCartDeliverySpecificationInput);\r\n }\r\n };\r\n\r\n function renderEmailInputSection() {\r\n const defaultBtnBackground = getAsset('images/esl_default.png', props.context.request);\r\n\r\n return (\r\n <>\r\n
\r\n

\r\n {preferredKeteSiteLanguage === 'maori'\r\n ? resources.confirmYourSelectionTextInMaori\r\n : resources.confirmYourSelectionText}\r\n

\r\n
\r\n {!isAuthenticated && (\r\n
\r\n

{preferredKeteSiteLanguage === 'maori' ? resources.signInTextInMaori : resources.signInText}

\r\n {\r\n \r\n }\r\n
\r\n )}\r\n
\r\n {!isAuthenticated ? (\r\n <>\r\n

\r\n {preferredKeteSiteLanguage === 'maori' ? resources.eslAccountTextInMaori : resources.eslAccountText}\r\n

\r\n setEmailID(e.target.value)}\r\n // value={emailID}\r\n >\r\n {inputError}\r\n \r\n ) : (\r\n <>\r\n

\r\n {preferredKeteSiteLanguage === 'maori'\r\n ? resources.downloadLinkTextInMaori\r\n : resources.downloadLinkText}\r\n

\r\n {registeredEmail && (\r\n \r\n )}\r\n \r\n )}\r\n
\r\n {!isAuthenticated && (\r\n
\r\n {!confirmEmailID ? (\r\n fnEmailSelectionClick()}\r\n >\r\n {preferredLanguage === 'maori' ? resources.confirmEmailTextInMaori : resources.confirmEmailText}\r\n \r\n ) : (\r\n fnEmailChangeClick()}\r\n >\r\n {preferredLanguage === 'maori' ? resources.changeEmailTextInMaori : resources.changeEmailText}\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n async function fnCheckEmailDownloadLink(checked: boolean) {\r\n setEmailDownloadLink(checked);\r\n setDisableEmailInputSection(!checked);\r\n const extensionProoerites: CommerceProperty[] = [{ Key: 'EmailDownloadLink', Value: { BooleanValue: checked } }];\r\n await props.data.checkout.result?.checkoutCart.updateExtensionProperties({ newExtensionProperties: extensionProoerites });\r\n\r\n if (!checked) {\r\n const email: string = isAuthenticated ? registeredEmail : defaultCustomerDetails.Email;\r\n await updateGuestProfile(email);\r\n await (await props.data.cart).updateReceiptEmail({ newEmail: email });\r\n } else {\r\n const email: string = (isAuthenticated ? registeredEmail : emailID) || '';\r\n await updateGuestProfile(email);\r\n await (await props.data.cart).updateReceiptEmail({ newEmail: email });\r\n }\r\n }\r\n\r\n function fnValidateEmail(mail: string) {\r\n if (/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/.test(mail)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n return (\r\n \r\n {!hasSalesOrder && {title}}\r\n {!hasSalesOrder && !isEmptyCart && (\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n
\r\n {lineItems && }\r\n\r\n \r\n
\r\n {\r\n void fnCheckEmailDownloadLink(e.target.checked);\r\n }}\r\n aria-label='Email Checkbox'\r\n // checked={EmailDownloadLink}\r\n >\r\n \r\n
\r\n {placeOrderButton}\r\n
\r\n
\r\n {renderEmailInputSection()}\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","/* eslint-disable security/detect-object-injection */\r\nimport {\r\n ENGLISH_LANG,\r\n MAORI_LANG,\r\n MAORI_LANG_CODE,\r\n ERROR_OR_NOTIFICATION,\r\n ADD_TO_KETE,\r\n COLLECTIONS,\r\n DOWNLOAD_KETE,\r\n SEARCH,\r\n HEADER_FOOTER,\r\n NAVIGATION,\r\n HOME_PAGE,\r\n LANDING_PAGE,\r\n OCH,\r\n TWK,\r\n KWR,\r\n KOH,\r\n NZC,\r\n METADATA,\r\n SOCIAL_SHARE,\r\n MY_PROFILE,\r\n ACTION_BUTTONS,\r\n COLLECTIONS_SITE_LANGUAGE,\r\n ADD_TO_KETE_SITE_LANGUAGE,\r\n DOWNLOAD_KETE_SITE_LANGUAGE,\r\n SEARCH_SITE_LANGUAGE,\r\n ENGLISH_OTHER_LANG_CODE,\r\n CUST_MAORI_LANG_CODE,\r\n VIDEO_PLAYER,\r\n DEVELOPMENT_LANGUAGE_TOGGLE,\r\n DEVELOPMENT_LANGUAGE_PREFERENCE,\r\n DEVELOPMENT_SITE_NAME\r\n} from './constants';\r\nimport { readAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\r\nimport MsDyn365, { ICoreContext } from '@msdyn365-commerce/core';\r\n\r\n/*\r\n This variable is used to set development mode without localstorage errors\r\n !!!important Please set to false when pushing the code\r\n Use this only for local development\r\n*/\r\nexport const IS_LOCAL_DEVELOPMENT = false;\r\n\r\nexport const getToggleLang = (context: any) => {\r\n console.log('gettogglecontext', context);\r\n if (IS_LOCAL_DEVELOPMENT) {\r\n return DEVELOPMENT_LANGUAGE_TOGGLE;\r\n }\r\n\r\n const siteNameFromCache = getSiteNameFromCache(KWR, context);\r\n if (siteNameFromCache === OCH || siteNameFromCache === KWR) {\r\n return context.request.locale.toLowerCase() === MAORI_LANG_CODE ? MAORI_LANG : ENGLISH_LANG;\r\n } else {\r\n return context.request.locale.toLowerCase() === ENGLISH_OTHER_LANG_CODE ? ENGLISH_LANG : MAORI_LANG;\r\n }\r\n};\r\n\r\nexport const getUserPrefLang = (customerAccountNumber: number, context: any): any => {\r\n console.log('getprefcontext', context);\r\n if (IS_LOCAL_DEVELOPMENT) {\r\n return DEVELOPMENT_LANGUAGE_PREFERENCE;\r\n }\r\n\r\n if (context.request.user.isAuthenticated) {\r\n if (MsDyn365.isBrowser && localStorage !== undefined) {\r\n return localStorage.getItem(`moeUserPrefLang${customerAccountNumber}`);\r\n }\r\n }\r\n\r\n // This piece of code is executed when the user is not logged in\r\n // We will set toggle language as preferred language\r\n const siteNameFromCache = getSiteNameFromCache(KWR, context);\r\n if (siteNameFromCache === OCH || siteNameFromCache === KWR) {\r\n return context.request.locale.toLowerCase() === MAORI_LANG_CODE ? MAORI_LANG : ENGLISH_LANG;\r\n } else {\r\n return context.request.locale.toLowerCase() === ENGLISH_OTHER_LANG_CODE ? ENGLISH_LANG : MAORI_LANG;\r\n }\r\n};\r\n\r\nexport const getUserPreferredLanguage = (\r\n siteName: string,\r\n moduleName: string,\r\n userPrefLang: string,\r\n toggleLang: string,\r\n context: any\r\n): any => {\r\n let siteNameFromCache;\r\n if (IS_LOCAL_DEVELOPMENT) {\r\n siteNameFromCache = DEVELOPMENT_SITE_NAME;\r\n } else {\r\n siteNameFromCache = getSiteNameFromCache(siteName, context);\r\n }\r\n // const siteNameFromCache = siteName;\r\n\r\n // For Online Curriculum Hub site\r\n if (siteNameFromCache === OCH) {\r\n switch (moduleName) {\r\n case ERROR_OR_NOTIFICATION:\r\n return toggleLang;\r\n\r\n case HEADER_FOOTER:\r\n return toggleLang;\r\n\r\n case HOME_PAGE:\r\n return toggleLang;\r\n\r\n case ACTION_BUTTONS:\r\n return toggleLang;\r\n\r\n default:\r\n return ENGLISH_LANG;\r\n }\r\n }\r\n\r\n // For New Zealand Curriculum Online site\r\n if (siteNameFromCache === NZC) {\r\n switch (moduleName) {\r\n case METADATA:\r\n return ENGLISH_LANG;\r\n\r\n case NAVIGATION:\r\n return ENGLISH_LANG;\r\n\r\n case HEADER_FOOTER:\r\n return ENGLISH_LANG;\r\n\r\n case HOME_PAGE:\r\n return ENGLISH_LANG;\r\n\r\n case SOCIAL_SHARE:\r\n return ENGLISH_LANG;\r\n\r\n case ERROR_OR_NOTIFICATION:\r\n return ENGLISH_LANG;\r\n\r\n case MY_PROFILE:\r\n return ENGLISH_LANG;\r\n\r\n case DOWNLOAD_KETE:\r\n return ENGLISH_LANG;\r\n\r\n case DOWNLOAD_KETE_SITE_LANGUAGE:\r\n return ENGLISH_LANG;\r\n\r\n case COLLECTIONS:\r\n return ENGLISH_LANG;\r\n\r\n case ADD_TO_KETE:\r\n return ENGLISH_LANG;\r\n\r\n case ADD_TO_KETE_SITE_LANGUAGE:\r\n return ENGLISH_LANG;\r\n\r\n case SEARCH:\r\n return ENGLISH_LANG;\r\n\r\n case SEARCH_SITE_LANGUAGE:\r\n return ENGLISH_LANG;\r\n\r\n case ACTION_BUTTONS:\r\n return ENGLISH_LANG;\r\n\r\n case COLLECTIONS_SITE_LANGUAGE:\r\n return ENGLISH_LANG;\r\n\r\n case VIDEO_PLAYER:\r\n return ENGLISH_LANG;\r\n\r\n default:\r\n return ENGLISH_LANG;\r\n }\r\n }\r\n\r\n // For Te Whāriki Online site\r\n if (siteNameFromCache === TWK) {\r\n switch (moduleName) {\r\n case METADATA:\r\n return ENGLISH_LANG;\r\n\r\n case NAVIGATION:\r\n return MAORI_LANG;\r\n\r\n case HEADER_FOOTER:\r\n return userPrefLang;\r\n\r\n case HOME_PAGE:\r\n return userPrefLang;\r\n\r\n case LANDING_PAGE:\r\n return userPrefLang;\r\n\r\n case SOCIAL_SHARE:\r\n return userPrefLang;\r\n\r\n case ERROR_OR_NOTIFICATION:\r\n return userPrefLang;\r\n\r\n case MY_PROFILE:\r\n return userPrefLang;\r\n\r\n case DOWNLOAD_KETE:\r\n return MAORI_LANG;\r\n\r\n case DOWNLOAD_KETE_SITE_LANGUAGE:\r\n return userPrefLang;\r\n\r\n case COLLECTIONS:\r\n return MAORI_LANG;\r\n\r\n case COLLECTIONS_SITE_LANGUAGE:\r\n return userPrefLang;\r\n\r\n case ADD_TO_KETE:\r\n return MAORI_LANG;\r\n\r\n case ADD_TO_KETE_SITE_LANGUAGE:\r\n return userPrefLang;\r\n\r\n case SEARCH:\r\n return MAORI_LANG;\r\n\r\n case SEARCH_SITE_LANGUAGE:\r\n return userPrefLang;\r\n\r\n case ACTION_BUTTONS:\r\n return userPrefLang;\r\n\r\n case VIDEO_PLAYER:\r\n return userPrefLang;\r\n\r\n default:\r\n return ENGLISH_LANG;\r\n }\r\n }\r\n\r\n // For Te Kōhanga Reo site\r\n if (siteNameFromCache === KOH) {\r\n switch (moduleName) {\r\n case HOME_PAGE:\r\n return MAORI_LANG;\r\n\r\n case ACTION_BUTTONS:\r\n return MAORI_LANG;\r\n\r\n case VIDEO_PLAYER:\r\n return MAORI_LANG;\r\n\r\n default:\r\n return MAORI_LANG;\r\n }\r\n }\r\n\r\n // For Kauwhata Reo site\r\n if (siteNameFromCache === KWR) {\r\n switch (moduleName) {\r\n case METADATA:\r\n return toggleLang;\r\n\r\n case NAVIGATION:\r\n return toggleLang;\r\n\r\n case HEADER_FOOTER:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case HOME_PAGE:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case SOCIAL_SHARE:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case ERROR_OR_NOTIFICATION:\r\n return toggleLang;\r\n\r\n case MY_PROFILE:\r\n return userPrefLang;\r\n\r\n case DOWNLOAD_KETE:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case DOWNLOAD_KETE_SITE_LANGUAGE:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case COLLECTIONS:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case COLLECTIONS_SITE_LANGUAGE:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case ADD_TO_KETE:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case ADD_TO_KETE_SITE_LANGUAGE:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case SEARCH:\r\n return MAORI_LANG;\r\n\r\n case SEARCH_SITE_LANGUAGE:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case ACTION_BUTTONS:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n case VIDEO_PLAYER:\r\n return userPrefLang === ENGLISH_LANG && toggleLang === ENGLISH_LANG ? ENGLISH_LANG : MAORI_LANG;\r\n\r\n default:\r\n return MAORI_LANG;\r\n }\r\n }\r\n\r\n switch (moduleName) {\r\n case DOWNLOAD_KETE:\r\n return MAORI_LANG;\r\n\r\n case COLLECTIONS:\r\n return MAORI_LANG;\r\n\r\n case ADD_TO_KETE:\r\n return MAORI_LANG;\r\n\r\n case SEARCH:\r\n return MAORI_LANG;\r\n\r\n default:\r\n return toggleLang;\r\n }\r\n};\r\n\r\nexport function setCustomerLangInCache(props: { context: ICoreContext }) {\r\n const { context } = props;\r\n const user = context.request.user;\r\n\r\n if (MsDyn365.isBrowser && !localStorage.getItem(`moeUserPrefLang${user.customerAccountNumber}`)) {\r\n void readAsync({ callerContext: context.actionContext, bypassCache: 'get' }, user.customerAccountNumber as any).then(\r\n customerData => {\r\n const customerLang = customerData.Language;\r\n localStorage.setItem(\r\n `moeUserPrefLang${user.customerAccountNumber}`,\r\n customerLang?.toLowerCase() === CUST_MAORI_LANG_CODE ? MAORI_LANG : ENGLISH_LANG\r\n );\r\n window.location.reload();\r\n }\r\n );\r\n }\r\n}\r\n\r\nexport function setTwksiteLangInCache(props: { context: ICoreContext }, siteName: string) {\r\n if (MsDyn365.isBrowser) {\r\n localStorage.setItem(`moeTwkSiteLang`, siteName);\r\n }\r\n}\r\n\r\nexport function getTwksiteLangInCache() {\r\n return MsDyn365.isBrowser ? localStorage.getItem(`moeTwkSiteLang`) : null;\r\n}\r\n\r\nexport function setOnlineChannelInfoInCache(context: ICoreContext, channelInfo: string) {\r\n const hostname = context.request.url?.requestUrl?.hostname;\r\n if (MsDyn365.isBrowser && localStorage !== undefined) {\r\n localStorage.setItem(`moeOnlineChannelInfo${hostname}`, channelInfo);\r\n localStorage.setItem('moeOnlineChannelInfoTimer', JSON.stringify(new Date().getTime()));\r\n }\r\n}\r\n\r\nexport function getOnlineChannelInfoTimer(context: ICoreContext): number {\r\n return MsDyn365.isBrowser ? JSON.parse(localStorage.getItem('moeOnlineChannelInfoTimer') || '0') : '0';\r\n}\r\n\r\nexport function getSiteNameFromCache(siteName: string, context: ICoreContext) {\r\n const hostname = context.request.url?.requestUrl?.hostname;\r\n let onlineChannels: any[] = [];\r\n\r\n if (MsDyn365.isBrowser && localStorage !== undefined) {\r\n onlineChannels = JSON.parse(localStorage.getItem(`moeOnlineChannelInfo${hostname}`) || '[]');\r\n }\r\n\r\n if (onlineChannels?.length > 0) {\r\n const channelIndex = onlineChannels.findIndex((item: any) => item.Id === context.request.apiSettings.channelId);\r\n if (channelIndex > -1) {\r\n if (onlineChannels[channelIndex]?.Name?.includes('ealand')) {\r\n return NZC;\r\n }\r\n\r\n if (onlineChannels[channelIndex]?.Name?.includes('hanga')) {\r\n return KOH;\r\n }\r\n\r\n if (onlineChannels[channelIndex]?.Name?.includes('hildhood')) {\r\n return TWK;\r\n }\r\n\r\n if (onlineChannels[channelIndex]?.Name?.includes('whata')) {\r\n return KWR;\r\n }\r\n\r\n if (onlineChannels[channelIndex]?.Name?.includes('Hub')) {\r\n return OCH;\r\n }\r\n }\r\n } else {\r\n return siteName;\r\n }\r\n\r\n return siteName;\r\n}\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['moe-checkout'] = {\n c: () => require('partner/modules/moe-checkout/moe-checkout.tsx'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action', runOn: 1},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1},{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/moe-checkout/actions/get-products-in-active-moe-checkout-cart', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'moe-checkout',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/moe-checkout'\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-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 = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/moe-checkout/actions/get-products-in-active-moe-checkout-cart';\n let dataAction = require('partner/modules/moe-checkout/actions/get-products-in-active-moe-checkout-cart');\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|moe-checkout|moe-checkout'] = {\n c: () => require('partner/modules/moe-checkout/moe-checkout.view.tsx'),\n cn: '__local__-__local__-moe-checkout'\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 IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { CheckoutState } from './checkout-state';\n\n/**\n * CheckoutState - action input.\n */\nexport class CheckoutStateInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('CheckoutState', this.apiSettings);\n\n public getCacheObjectType = () => 'CheckoutState';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CheckoutState - action.\n * @param input\n * @param ctx\n */\nexport async function checkoutStateAction(input: CheckoutStateInput, ctx: IActionContext): Promise {\n return new CheckoutState();\n}\n\n/**\n * CheckoutState - create new input for create action.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\n return new CheckoutStateInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * CheckoutState - create action.\n */\nexport const checkoutStateActionDataAction = createObservableDataAction({\n action: >checkoutStateAction,\n input: createInput\n});\n\nexport default checkoutStateActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Address, GiftCard, TenderLine, TokenizedPaymentCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { action, computed, observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a checkout.\n */\nexport class CheckoutState {\n @observable private _tokenizedPaymentCard: TokenizedPaymentCard | undefined;\n\n @computed public get tokenizedPaymentCard(): Readonly | undefined {\n return this._tokenizedPaymentCard;\n }\n\n @observable private _tenderLine: TenderLine | undefined;\n\n @computed public get tenderLine(): Readonly | undefined {\n return this._tenderLine;\n }\n\n @observable private _billingAddress: Address | undefined;\n\n @computed public get billingAddress(): Readonly
| undefined {\n return this._billingAddress;\n }\n\n @observable private _shippingAddress: Address | undefined;\n\n @computed public get shippingAddress(): Readonly
| undefined {\n return this._shippingAddress;\n }\n\n @observable private _cardPrefix: string | undefined;\n\n @computed public get cardPrefix(): Readonly | undefined {\n return this._cardPrefix;\n }\n\n @observable private _giftCards: GiftCard[] = [];\n\n @computed public get giftCards(): readonly GiftCard[] {\n return this._giftCards;\n }\n\n @observable private _giftCardExtends: IGiftCardExtend[] = [];\n\n @computed public get giftCardExtends(): readonly IGiftCardExtend[] {\n return this._giftCardExtends;\n }\n\n @observable private _loyaltyCardNumber?: string;\n\n @computed public get loyaltyCardNumber(): Readonly | undefined {\n return this._loyaltyCardNumber;\n }\n\n @observable private _loyaltyAmount: number = 0;\n\n @computed public get loyaltyAmount(): Readonly | number {\n return this._loyaltyAmount;\n }\n\n @observable private _guestCheckoutEmail: string = '';\n\n @computed public get guestCheckoutEmail(): Readonly | string {\n return this._guestCheckoutEmail;\n }\n\n @observable private _isTermsAndConditionAccepted: boolean = false;\n\n @computed public get isTermsAndConditionAccepted(): Readonly | boolean {\n return this._isTermsAndConditionAccepted;\n }\n\n @observable private _customerAccountAmount: number = 0;\n\n @computed public get customerAccountAmount(): Readonly | number {\n return this._customerAccountAmount;\n }\n\n @action\n public updateTokenizedPaymentCard(newTokenizedPaymentCard: TokenizedPaymentCard): void {\n this._tokenizedPaymentCard = newTokenizedPaymentCard;\n }\n\n @action\n public updateTenderLine(newTenderLine: TenderLine | undefined): void {\n this._tenderLine = newTenderLine;\n }\n\n @action\n public updateShippingAddress(newShippingAddress: Address): void {\n this._shippingAddress = newShippingAddress;\n }\n\n @action\n public updateBillingAddress(newBillingAddress: Address): void {\n this._billingAddress = newBillingAddress;\n }\n\n @action\n public updateCardPrefix(newCardPrefix: string): void {\n this._cardPrefix = newCardPrefix;\n }\n\n @action\n public removeGiftCard(giftCardNumber: string): void {\n this._giftCards = this._giftCards.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public removeGiftCardExtend(giftCardNumber: string): void {\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public addGiftCard(giftCard: GiftCard): void {\n this._giftCards = [giftCard, ...this._giftCards];\n }\n\n @action\n public addGiftCardExtend(giftCard: IGiftCardExtend): void {\n this._giftCardExtends = [giftCard, ...this._giftCards];\n }\n\n @action\n public updateLoyaltyCardNumber(newLoyaltyCardNumber: string): void {\n this._loyaltyCardNumber = newLoyaltyCardNumber;\n }\n\n @action\n public updateLoyaltyAmount(newAmount: number): void {\n this._loyaltyAmount = newAmount;\n }\n\n @action\n public updateGuestCheckoutEmail(newGuestCheckoutEmail: string): void {\n this._guestCheckoutEmail = newGuestCheckoutEmail;\n }\n\n @action\n public updateTermsAndConditionsAcceptance(newIsTermsAndConditionAccepted: boolean): void {\n this._isTermsAndConditionAccepted = newIsTermsAndConditionAccepted;\n }\n\n @action\n public updateCustomerAccountAmount(newAmount: number): void {\n this._customerAccountAmount = newAmount;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionContext, IActionInput } from '@msdyn365-commerce/core';\n\nimport { IModuleStates } from './module-state.data';\n\n/**\n * GetModulesInput.\n */\nexport class ModuleStatesCacheKey implements IActionInput {\n public getCacheKey = () => 'ModuleState';\n\n public getCacheObjectType = () => 'ModuleState';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport function getModuleStates(ctx: IActionContext): IModuleStates {\n const cacheKey = new ModuleStatesCacheKey();\n\n let moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n if (moduleStates) {\n return moduleStates;\n }\n ctx.update(cacheKey, {});\n moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n return moduleStates;\n}\n\nexport function updateModuleStates(value: IModuleStates, ctx: IActionContext): void {\n const cacheKey = new ModuleStatesCacheKey();\n ctx.update(cacheKey, value);\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModule } from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport isMatch from 'lodash/isMatch';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { getModuleStates, updateModuleStates } from './module-state';\nimport { IModuleState, IModuleStateManager, IModuleStateProps, IModuleStates } from './module-state.data';\n\nexport interface IProps extends IModule, IModuleStateProps {\n enableControl?: boolean;\n}\n\nconst sectionContainerModuleId = 'section-container';\nconst paymentInstrumentModuleId = 'payment-instrument';\n\nconst withModuleState =

(WrappedComponent: React.ComponentType

): React.ComponentType

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

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

{\n constructor(props: P) {\n super(props);\n this.initializeState();\n }\n\n public shouldComponentUpdate(nextProps: IModuleStateProps): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { id } = this.props;\n return ;\n }\n\n private readonly initializeState = (): void => {\n const { id, typeName, context } = this.props;\n const states = getModuleStates(context.actionContext);\n if (!states) {\n this.props.telemetry.error('withModuleState initializeState() - states not found');\n return;\n }\n\n if (states[id]) {\n // State has been initialized\n return;\n }\n\n updateModuleStates(\n {\n ...states,\n [id]: {\n id,\n typeName,\n hasInitialized: false,\n hasError: false,\n isRequired: true,\n isCancellable: true,\n isSubmitContainer: false,\n status: undefined,\n childIds: []\n }\n },\n context.actionContext\n );\n };\n\n /**\n * GetModuleStateManager\n * Get module state manager by id.\n * @param id\n */\n private readonly getModuleStateManager = (id: string): IModuleStateManager => {\n const moduleState = this.get()[id];\n return {\n ...moduleState!,\n hasInitialized: this.validate(id, { hasInitialized: true }, true), // All has initialized is initialized\n hasError: this.validate(id, { hasError: true }), // Partial has error is error\n isReady: this.validate(id, { status: 'ready' }, true, true), // All ready is ready (exclued disabled and skipped)\n isUpdating: this.validate(id, { status: 'updating' }), // Partial updating is updating\n isPending: this.validate(id, { status: 'pending' }), // Partial pending is pending\n isSkipped: this.validate(id, { status: 'skipped' }, true, true), // All skipped is skipped (exclued disabled)\n isDisabled: this.validate(id, { status: 'disabled' }, true), // All disabled is disabled\n isCancelAllowed: this.validate(id, { isCancellable: true }, true, true), // Partial not allowed is not allowed\n shouldSubmitContainer: this.validate(id, { isSubmitContainer: true }), // Partial submit is submit.\n hasExternalSubmitGroup: this.hasExternalSubmitGroup(),\n hasModuleState: this.hasModuleState(id),\n setIsRequired: (value: boolean): void => {\n this.update(id, { isRequired: value });\n },\n setIsCancellable: (value: boolean): void => {\n this.update(id, { isCancellable: value });\n },\n setIsSubmitContainer: (value: boolean): void => {\n this.update(id, { isSubmitContainer: value });\n },\n setHasError: (value: boolean): void => {\n this.update(id, { hasError: value });\n },\n onReady: (): void => {\n this.update(id, { status: 'ready' });\n },\n onUpdating: (): void => {\n this.update(id, { status: 'updating' });\n },\n onPending: (): void => {\n this.update(id, { status: 'pending' });\n },\n onSkip: (): void => {\n this.update(id, { status: 'skipped' });\n },\n onDisable: (): void => {\n this.update(id, { status: 'disabled' });\n },\n getModule: (moduleId: string): IModuleStateManager => this.getModuleStateManager(moduleId),\n getModuleByTypeName: (typeName: string): IModuleStateManager => this.getModuleStateManagerByTypeName(typeName),\n init: (options?: Partial): void => {\n if (moduleState?.hasInitialized) {\n // State has been initialized\n return;\n }\n this.update(id, {\n hasInitialized: true,\n ...options\n });\n }\n };\n };\n\n /**\n * GetModuleStateManagerByTypeName\n * Get module state manager by type name.\n * @param typeName\n */\n private readonly getModuleStateManagerByTypeName = (typeName: string): IModuleStateManager => {\n const moduleStates = getModuleStates(this.props.context.actionContext);\n const moduleState = Object.values(moduleStates).find(_moduleState => _moduleState?.typeName === typeName);\n return this.getModuleStateManager((moduleState && moduleState.id) || '');\n };\n\n /**\n * Get\n * Get all module states.\n */\n private readonly get = (): IModuleStates => {\n return getModuleStates(this.props.context.actionContext);\n };\n\n /**\n * Update\n * Update module state.\n * @param id\n * @param value\n */\n private readonly update = (id: string, value: Partial): void => {\n // Console.log('withModuleState - update', id, value);\n const modules = this.get();\n if (!modules[id]) {\n this.props.telemetry.error(`withModuleState update() - Module state with id ${id} is not found.`);\n return;\n }\n modules[id] = {\n ...modules[id]!,\n ...value\n };\n };\n\n private readonly _validateLeaf = (id: string, source: Partial): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n return isMatch(module, source);\n };\n\n private readonly _validateContainer = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n // Module doesn't has module state\n return !!allMatched;\n }\n\n if (skipSkippableItem && (module.status === 'disabled' || module.status === 'skipped')) {\n // Skip disabled or skipped modules\n return !!allMatched;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n let childIds = module.childIds;\n\n if (this.props.context.app.config.shouldEnableSinglePaymentAuthorizationCheckout) {\n // For new checkout flow, we bypass the isReady check for payment section container to enable the place order button.\n childIds = childIds.filter(childId => !this._isPaymentSectionContainer(childId));\n }\n\n // It is container module\n const method = allMatched ? 'every' : 'some';\n return childIds[method](childId => this._validateContainer(childId, source, allMatched, skipSkippableItem));\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n if (!moduleId.includes(sectionContainerModuleId)) {\n return false;\n }\n\n const modules = this.get();\n const module = modules[moduleId];\n\n if (module && ArrayExtensions.hasElements(module.childIds.filter(childId => childId.includes(paymentInstrumentModuleId)))) {\n return true;\n }\n\n return false;\n };\n\n /**\n * Validate\n * Validate current module and all its child module match the provided condition.\n * @param id\n * @param source\n * @param allMatched\n * @param skipSkippableItem\n */\n private readonly validate = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n // It is container module\n return this._validateContainer(id, source, allMatched, skipSkippableItem);\n };\n\n /**\n * HasExternalSubmitGroup\n * Module will use external submit group.\n */\n private readonly hasExternalSubmitGroup = (): boolean => {\n return !!this.props.enableControl;\n };\n\n /**\n * HasModuleState\n * Module is using module state manager.\n * @param id\n */\n private readonly hasModuleState = (id: string): boolean => {\n const modules = this.get();\n const module = modules[id];\n return !!module;\n };\n }\n\n return ModuleState;\n};\n\nexport default withModuleState;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

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

\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nexport const InvoiceSummary = (props: IInvoiceSummaryProps) => {\n const { TotalAmount, CartLines } = props.cart;\n const invoiceLines = CartLines?.filter(cartLine => cartLine.IsInvoiceLine);\n const reactNodes: IInvoiceSummaryLines = {\n invoices: invoiceLines?.map((invoiceLine: CartLine) => {\n return _buildPaymentSummarySection(\n props,\n invoiceLine.InvoiceAmount,\n format(props.invoiceLabel, invoiceLine.InvoiceId),\n 'invoice'\n );\n }),\n orderTotal: _buildPaymentSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\n };\n\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildPaymentSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildPaymentSummarySection(\n props,\n -giftCardAmount,\n props.giftcardLabel || 'Gift card amount',\n 'gift-card'\n );\n }\n\n reactNodes.orderTotal = _buildPaymentSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n props.orderTotalLabel,\n 'total'\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\nexport interface IOrderSummaryProps {\n subTotalLabel: string;\n shippingLabel: string;\n taxLabel: string;\n orderTotalLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n totalDiscountsLabel: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n id: string;\n typeName: string;\n otherChargeLabel?: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isTaxIncludedInPrice?: boolean;\n isShowTaxBreakup?: boolean;\n}\n\nexport interface IOrderSummaryLines {\n subtotal: React.ReactNode;\n shipping?: React.ReactNode;\n otherCharge?: React.ReactNode;\n tax: React.ReactNode;\n orderTotal: React.ReactNode;\n totalDiscounts?: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IOrderSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\ninterface IShippingOrderLine {\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n canShip?: boolean;\n hasDeliveryMethod?: boolean;\n hasShippingMethod?: boolean;\n freightFee?: number;\n}\n\nconst OrderSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

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

\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n const freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmountWithoutTax = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n const reactNodes: IOrderSummaryLines = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmountWithoutTax > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(\n props,\n -DiscountAmountWithoutTax,\n 'total-discounts',\n props.totalDiscountsLabel\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { IDataServiceRequest, retailAction, OrgUnitsDataActions, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\n\n/**\n * Search Org Unit Locations action createInput method.\n * @param inputData - Current action context.\n * @returns Input needed to call the Search-org-unit-location API.\n */\nexport function createSearchOrgUnitLocationsInputFunc(\n inputData: ICreateActionContext, IGeneric>\n): IDataServiceRequest {\n const querySettingsProxy = QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(inputData);\n return OrgUnitsDataActions.createSearchOrgUnitLocationsInput(querySettingsProxy, {});\n}\n\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-org-unit-locations',\n action: >retailAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n\nexport default retailActionDataAction;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["SignInButton","props","text","href","ariaLabel","telemetryContent","imageURL","payLoad","getPayloadObject","TelemetryConstant","SignIn","attributes","getTelemetryAttributes","React","Object","assign","className","tabIndex","src","alt","ActiveCheckoutCartProductsInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","createInput","async","getActiveCheckoutCartProductsAction","input","ctx","telemetry","exception","Error","checkoutState","getCheckoutState","cart","checkoutCart","hasInvoiceLine","CartLines","length","getSimpleProducts","map","cartLine","ProductId","ProductInput","requestContext","apiSettings","filter","Boolean","then","products","catch","error","getActiveCheckoutCartProductsActionDataAction","createObservableDataAction","id","action","_ref","message","role","getInvoicePaymentSummary","data","checkout","resources","totalAmountLabel","invoiceLabel","invoiceSummaryTitle","context","typeName","get","heading","lines","InvoiceSummary","orderTotalLabel","result","undefined","getLineItems","_featureState$result","pickupDeliveryModeCode","emailDeliveryModeCode","channelDeliveryOptionConfig","featureState","retailMultiplePickUpOptionEnabled","find","feature","Name","IsEnabled","_getDeliveryLocation","orgUnitLocations","FulfillmentStoreId","locationMatch","location","OrgUnitNumber","OrgUnitName","_getLineItemComponent","product","productId","_product","RecordId","config","imageSettings","showShippingChargesForLineItems","quantityDisplayString","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","productDimensionTypeAmount","configString","inputQuantityAriaLabel","discountStringText","shippingCharges","request","gridSettings","CartLineItemComponent","sizeString","colorString","styleString","amountString","originalPriceText","currentPriceText","shippingChargesText","isQuantityEditable","productUrl","getProductUrlSync","actionContext","primaryImageUrl","PrimaryImageUrl","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","PickUpAtStore","label","_getEmailDeliveryComponents","emailDeliveryTextInMaori","EmailDelivery","_getLineItemsComponents","items","isPickUp","_getCartPickDeliveryMode","isEmailDelivery","DeliveryMode","LineId","LineItem","item","pickUpAtStore","emailDelivery","cartLineItem","_channelDeliveryOptio","StringExtensions","isNullOrWhitespace","PickupDeliveryModeCodes","deliveryMode","_countItems","reduce","count","Quantity","_filterItemsByDiliveryType","type","_channelDeliveryOptio2","_getLineItemsByDeliveryType","title","_getGroupTitleComponent","_input$data$deliveryO","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","deliveryOptions","productDeliveryOptions","_productDeliveryOptio","DeliveryOptions","deliveryOption","Code","Description","suffix","replace","toString","LineItemDeliveryGroup","classnames","LineItemList","lineItems","handleLineItemHeadingChange","event","lineItemsHeading","target","value","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","cartLinesGrp","entries","forEach","groupByDeliveryType","push","keys","key","cartLines","index","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","groupTitle","iconClass","lineItemWraperIcon","lineItemWraper","_getLineItems","editCartText","EditCart","attribute","groupClass","LineItems","Header","Msdyn365","tag","editProps","onEdit","editLink","Button","color","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","getOrderSummary","orderSummaryHeading","subTotalLabel","shippingLabel","taxLabel","loyaltyLabel","giftcardLabel","totalDiscountsLabel","freeText","toBeCalculatedText","otherCharges","showLineItems","channelConfiguration","channel","orderSummaryProps","OrderSummary","otherChargeLabel","CheckoutGuidedCard","super","editButtonRef","formCardRef","renderFooder","isVisted","isReady","isSubmitting","isCancelAllowed","hasControlGroup","onCancel","onSubmit","resource","this","saveBtnLabel","cancelBtnLabel","saveAndContinueBtnLabel","canSubmit","canCancel","contentAction","etext","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","classname","disabled","onClick","focusOnFirstFocusableElement","node","ReactDOM","child","querySelector","focus","focusOnEditButton","editButton","current","scrollToTitle","formCard","isMobile","scrollIntoView","getTitle","step","headingTag","Tag","componentDidUpdate","prevProps","isActive","onNext","render","isExpanded","children","isPending","isUpdating","hasInitialized","changeBtnLabel","CheckoutChange","changeBtnAttributes","canEdit","active","expanded","closed","visted","hidden","initialized","ready","pending","updating","ref","innerRef","CheckoutGuidedForm","state","currentStep","getEnabledModules","moduleState","childIds","getModule","childId","isDisabled","getStep","indexOf","getId","getHeading","isEditor","setState","componentDidMount","init","hasModuleState","GuidedCard","disableGuidedCheckoutFlow","enableControl","__decorate","observer","buttonsStates","onPlaceOrderHandler","isBusy","canPlaceOrder","placeOrder","buttonSetState","checkoutBtnText","shouldEnableSinglePaymentAuthorizationCheckout","isPlaceOrderLoading","setIsBusy","useState","payload","TelemetryEvent","Purchase","OPERATIONS","getCardTypeId","cardPrefix","arguments","response","resolveCardTypesAsync","callerContext","CardType","Unknown","TypeId","findTenderIdTypeByOperationId","tenderTypes","operationId","matchedTenderType","tenderType","OperationId","TenderTypeId","roundNumber","Number","toFixed","updatedCartVersion","isPaymentVerificationRedirection","cartState","giftCardExtends","tokenizedPaymentCard","guestCheckoutEmail","billingAddress","loyaltyAmount","cardPaymentAcceptResult","Currency","cartTenderLines","amountDue","AmountDue","getTenderLinePromises","loyaltyCardNumber","LoyaltyCardId","chargedAmount","Math","min","loyaltyTenderLinePromise","Amount","getTenderTypesAsync","queryResultSettings","getLoyaltyTenderLine","some","giftCardExtend","Balance","_giftCardExtend$Expir","_giftCardExtend$Expir2","tenderTypeId","giftCardPin","Pin","giftCardExpirationYear","ExpirationDate","parseInt","split","giftCardExpirationMonth","creditCardTenderLinePromise","GiftCardId","GiftCardPin","GiftCardExpirationYear","GiftCardExpirationMonth","getGiftCardTenderLine","Id","customerAccountAmount","customerAccountTenderLinePromise","CustomerId","user","isAuthenticated","createCustomerAccountTenderLine","amount","currency","CardPaymentAcceptResult","getCreditCardTenderLineForSinglePaymentAuth","_tokenizedPaymentCard","cartTypeId","CardTypeId","TenderType","cardTenderLine","TokenizedPaymentCard","_objectSpread","House","CardTokenInfo","Phone","Country","ThreeLetterISORegionName","Address1","Street","City","State","Zip","ZipCode","getCreditCardTenderLine","Promise","all","cartVersion","Version","salesOrder","checkoutAsync","bypassCache","_error$data","_error$data2","AdditionalContext","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","updateRedirectAdditionalContext","newRedirectAdditionalContext","updateIsCheckoutCallFailed","newIsCheckoutCallFailed","refreshCart","lineItemIdsToRemove","getCartState","activeCart","activeCartLine","checkoutCartLine","removeCartLines","cartLineIds","removeAllPromoCodes","removeCheckoutCartId","orderedProducts","redirect","artifactsData","htmlResourceURLsNew","isEmailDownloadLink","resolve","reject","emptyActiveCart","orderConfirmationUrl","getUrlSync","separator","includes","url","console","log","urls","x","MediaUrl","mediaName","MediaName","cur","filename","fetch","blob","link","document","createElement","URL","createObjectURL","download","click","saveHTML","downloadHTML","mediaItem","xhr","XMLHttpRequest","responseType","onload","onerror","open","send","a","window","style","display","body","appendChild","saveFile","updateSalesOrder","newSalesOrder","newOrderedProducts","status","Checkout","_this","errorMessage","isValidationPassed","getTelemetryObject","telemetryPageName","friendlyName","handleCheckoutHeadingChange","checkoutHeading","isLoading","cartStatus","isEmptyCart","getSlotItems","slots","triggerPaymentWithPlaceOrder","_this$props$data$chec","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","checkIsEmptyCart","isEmpty","onPlaceOrder","_this$props$data$chec2","_this$props$data","_this$props$data2","_this$props$data3","_this$props$data4","_this$props$data$chec3","notFoundEditCartLinkMessage","redirectToCartPage","checkoutOutOfStockErrorMessage","genericErrorMessage","invalidCartVersionErrorMessage","app","enableStockCheck","orderConfirmation","artifacts","ExtensionProperties","Value","StringValue","JSON","parse","htmlResourceURLs","extensionProperties","BooleanValue","artifactsNew","element","e","isOverMaxQuantity","_this$props$data$chec4","_this$props$data$chec5","_checkout$result","hasOrderConfirmation","updateCartLineEmailAddress","res","_this$props$data$chec6","_this$props$data$chec7","name","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","_this$props$context$r","_this$props$data$chec8","EmailDeliveryModeCode","emailDeliveryCartLines","lineDeliverySpecifications","line","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ElectronicDelivery","ElectronicDeliveryEmailAddress","newGuestCheckoutEmail","updateLineDeliverySpecificationsAsync","updatedCart","_this$props$context$r2","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","productInventoryInformation","_cart$CartLines","cartline","cartlineProduct","ItemTypeValue","ReleasedProductType","Service","ArrayExtensions","hasElements","foundProductAvailability","productInventory","_productInventory$Pro","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","getActiveChildModuleStates","onContainerReady","editCartLink","validateForCheckout","_this$props$data$feat","_this$props$context","retry","isOrderQuantityLimitsFeatureEnabledInHq","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","customerInformation","isOrderQuantityLimitsFeatureEnabledInSiteSettings","IsB2b","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","warning","debug","_this$props$data$chec9","refreshError","_this$props$data$chec10","_this$props$data$chec11","isEditorialMode","_this$props$data$chec12","params","requestFormData","query","pv","_this$props$data$chec13","_this$props$data$chec14","_this$props$data$chec15","isTermsAndConditionAccepted","_this$props$data$chec16","when","hasError","isCartReady","reaction","_this$props$data$chec17","isPaymentSectionContainerReady","_this$props$data$chec18","redirectAdditionalContext","_this$props$data$chec19","isPaymentSectionContainerHasError","_this$props$data$chec20","_this$props$data$chec21","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","_this$props$data$chec22","siteName","backToShopping","placeOrderText","placeOrderTextInMaori","confirmPaymentText","cookieConsentRequiredMessage","checkoutClass","checkoutInformation","toggleLang","getToggleLang","userPrefLang","getUserPrefLang","customerAccountNumber","preferredLanguageActBtns","getUserPreferredLanguage","ACTION_BUTTONS","canDownload","_this$props$data5","_this$props$data6","_this$props$data7","_this$props$data8","_this$props$data9","_this$props$context2","ReceiptEmail","emailAddress","isConsentGiven","cookies","device","Type","backToShoppingUrl","termsAndConditions","BackToShopping","backToShoppingAttributes","viewProps","hasSalesOrder","checkoutProps","moduleProps","headerProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","renderMsdyn365Text","loading","Waiting","alert","AlertComponent","_this$props$data$chec23","_this$props$data$chec24","_this$props$data$chec25","canShow","guidedForm","GuidedFormComponent","orderSummary","invoicePaymentSummary","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","renderView","computed","withModuleState","PickUpAtStoreComponent","Node","EmailDeliveryComponent","_ref2","LineItemComponent","_ref3","LineItemGroupComponent","_ref4","lineItem","LineItemGroupComponentWithMultiplePickUp","_ref5","LineItemComponentWithMultiplePickUp","_ref6","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","_props$context$reques","_props$data","registeredEmail","emailID","setEmailID","confirmEmailID","setConfirmEmailID","EmailDownloadLink","setEmailDownloadLink","inputError","setInputError","defaultCustomerDetails","setDefaultCustomerDetails","disableEmailInputSection","setDisableEmailInputSection","preferredLanguage","preferredKeteSiteLanguage","DOWNLOAD_KETE_SITE_LANGUAGE","customerDetails","getDefaultCustomerDetailsAsync","err","getDefaultCustomerDetails","updateShippingAddress","updateGuestProfile","updateReceiptEmail","newEmail","Email","updateGuestCheckoutEmail","newShippingAddress","FullAddress","Address","StreetNumber","County","CountyName","DistrictName","StateName","CountryRegionId","PhoneRecordId","PhoneExt","EmailContent","EmailRecordId","Url","UrlRecordId","TwoLetterISORegionName","Deactivate","AttentionTo","BuildingCompliment","Postbox","TaxGroup","AddressTypeValue","IsPrimary","IsPrivate","PartyNumber","IsAsyncAddress","DirectoryPartyTableRecordId","DirectoryPartyLocationRecordId","DirectoryPartyLocationRoleRecordId","LogisticsLocationId","LogisticsLocationRecordId","LogisticsLocationExtRecordId","LogisticsLocationRoleRecordId","PhoneLogisticsLocationRecordId","PhoneLogisticsLocationId","EmailLogisticsLocationRecordId","EmailLogisticsLocationId","UrlLogisticsLocationRecordId","UrlLogisticsLocationId","ExpireRecordId","SortOrder","RoleCount","DataAreaId","updateCartDeliverySpecificationInput","deliveryModeId","shippingAddress","updateCartDeliverySpecification","Module","onChange","checked","_props$data$checkout$","extensionProoerites","Key","updateExtensionProperties","newExtensionProperties","email","fnCheckEmailDownloadLink","emailLinkCheckboxTextInMaori","emailLinkCheckboxText","_props$config","defaultBtnBackground","getAsset","confirmYourSelectionTextInMaori","confirmYourSelectionText","signInTextInMaori","signInText","logInTextInMaori","logInText","signInUrl","sigInBackgroundImage","downloadLinkTextInMaori","downloadLinkText","registeredEmailTextInMaori","registeredEmailText","eslAccountTextInMaori","eslAccountText","changeEmailTextInMaori","changeEmailText","confirmEmailTextInMaori","confirmEmailText","mail","test","emailErrorMessageTextInMaori","emailErrorMessageText","fnEmailSelectionClick","renderEmailInputSection","IS_LOCAL_DEVELOPMENT","DEVELOPMENT_LANGUAGE_TOGGLE","siteNameFromCache","getSiteNameFromCache","KWR","OCH","locale","toLowerCase","MAORI_LANG_CODE","MAORI_LANG","ENGLISH_LANG","ENGLISH_OTHER_LANG_CODE","DEVELOPMENT_LANGUAGE_PREFERENCE","MsDyn365","isBrowser","localStorage","getItem","moduleName","DEVELOPMENT_SITE_NAME","ERROR_OR_NOTIFICATION","HEADER_FOOTER","HOME_PAGE","NZC","METADATA","NAVIGATION","SOCIAL_SHARE","MY_PROFILE","DOWNLOAD_KETE","COLLECTIONS","ADD_TO_KETE","ADD_TO_KETE_SITE_LANGUAGE","SEARCH","SEARCH_SITE_LANGUAGE","COLLECTIONS_SITE_LANGUAGE","VIDEO_PLAYER","TWK","LANDING_PAGE","KOH","setCustomerLangInCache","readAsync","customerData","customerLang","Language","setItem","CUST_MAORI_LANG_CODE","reload","setOnlineChannelInfoInCache","channelInfo","_context$request$url","hostname","requestUrl","stringify","Date","getTime","getOnlineChannelInfoTimer","_context$request$url2","_onlineChannels","onlineChannels","channelIndex","findIndex","channelId","_onlineChannels$chann","_onlineChannels$chann2","_onlineChannels$chann3","_onlineChannels$chann4","_onlineChannels$chann5","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","CheckoutStateInput","buildCacheKey","CheckoutState","inputData","_giftCards","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_isTermsAndConditionAccepted","_customerAccountAmount","defineProperty","_tenderLine","_billingAddress","_shippingAddress","_cardPrefix","_loyaltyCardNumber","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","updateBillingAddress","newBillingAddress","updateCardPrefix","newCardPrefix","removeGiftCard","giftCardNumber","giftCard","removeGiftCardExtend","addGiftCard","__spreadArrays","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","newAmount","updateTermsAndConditionsAcceptance","newIsTermsAndConditionAccepted","updateCustomerAccountAmount","observable","ModuleStatesCacheKey","getModuleStates","cacheKey","moduleStates","update","WrappedComponent","_super","ModuleState","call","initializeState","_b","states","__assign","_a","isRequired","isCancellable","isSubmitContainer","getModuleStateManager","validate","isSkipped","shouldSubmitContainer","hasExternalSubmitGroup","setIsRequired","setIsCancellable","setIsSubmitContainer","setHasError","onReady","onUpdating","onPending","onSkip","onDisable","moduleId","getModuleByTypeName","getModuleStateManagerByTypeName","options","values","_moduleState","_validateLeaf","source","module","isMatch","_validateContainer","allMatched","skipSkippableItem","_isPaymentSectionContainer","__extends","shouldComponentUpdate","nextProps","InvoiceSummaryLine","price","cssLabel","PriceComponent","CustomerContextualPrice","freePriceText","_buildPaymentSummarySection","_computedLoyaltyAmount","TotalAmount","invoiceLines","IsInvoiceLine","reactNodes","invoices","invoiceLine","InvoiceAmount","format","InvoiceId","orderTotal","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","totalAmountAfterGiftCard","loyalty","OrderSummaryLine","_buildOrderSummarySection","getDeliveryMode","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmountWithoutTax","OtherChargeAmount","canShip","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","isTaxIncludedInPrice","isShowTaxBreakup","PickupDeliveryModeCode","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","subtotal","tax","otherCharge","shipping","totalDiscounts","createSearchOrgUnitLocationsInputFunc","querySettingsProxy","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","OrgUnitsDataActions","retailActionDataAction","retailAction","exports"],"sourceRoot":""}