{"version":3,"file":"static/js/27.194ae4dc00d2e89b29e5.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/alert.tsx?0cfb","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/get-invoice-payment-summary.tsx?1418","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/get-line-items.tsx?c283","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/price.components.tsx?c8ac","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/order-summary-lineitem.tsx?ac96","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/get-order-summary.tsx?8ba9","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/guided-card.tsx?2f17","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/guided-form.tsx?053b","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/place-order-button.tsx?22f1","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/methods/absolute-layer-checkout.ts?80fa","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/methods/empty-active-cart.ts?3ca3","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/absolute-layer-checkout.tsx?f4b4","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/methods/place-order.ts?6ef0","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/absolute-layer-checkout.view.tsx?0c25","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-layer-checkout/components/cartlineitemnick.component.tsx?b736","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-cart/components/arborb2b-cart-pick-up-in-store.tsx?3c5c","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-cart/components/arborb2b-cart-line-items.tsx?885c","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-cart/components/arborb2b-cart-line-groups.tsx?0e05","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-cart/utils/get-promotion-in-arborb2b-cart.ts?5086","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-cart/arborb2b-cart.tsx?5ad9","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-cart/components/arborb2b-cart-line-items-promotion.tsx?bf44","webpack://Msdyn365.Commerce.Online/./src/modules/arborb2b-cart/arborb2b-cart.view.tsx?2ddc","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/components/alert.tsx?894c","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/components/get-invoice-payment-summary.tsx?0836","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/components/get-line-items.tsx?0866","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/components/get-order-summary.tsx?f842","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/components/guided-card.tsx?3770","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/components/guided-form.tsx?d98d","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/components/place-order-button.tsx?381e","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/methods/obrien-checkout.ts?d74f","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/methods/empty-active-cart.ts?7563","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/obrien-checkout.tsx?1474","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/methods/place-order.ts?a08b","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-checkout/obrien-checkout.view.tsx?6ce7","webpack://Msdyn365.Commerce.Online/./src/validate-cart.ts?cd50","webpack://Msdyn365.Commerce.Online/./src/Common/get-product.ts?0a21","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://Msdyn365.Commerce.Online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.tsx?d4e4","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.view.tsx?d8c2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","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/checkout-utilities.data.ts?b2cc","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/modules/wishlist-items/components/wishlist-items-dimensions.tsx?15c5","webpack://Msdyn365.Commerce.Online/./src/modules/wishlist-items/components/wishlist-item.tsx?d2da","webpack://Msdyn365.Commerce.Online/./src/modules/wishlist-items/components/wishlist-items-status-message.tsx?cdb3","webpack://Msdyn365.Commerce.Online/./src/modules/wishlist-items/wishlist-items.tsx?df8b","webpack://Msdyn365.Commerce.Online/./src/modules/wishlist-items/wishlist-items.view.tsx?4d80","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/product-v2.component.tsx?d155","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/product.component.tsx?fd23","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/search-result-container-v2.view.tsx?6eaa","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/search-result-container.view.tsx?6e86"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface IAlertProps {\r\n message: string;\r\n}\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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\n\r\nimport { IAbsoluteLayerCheckoutData } from '../absolute-layer-checkout.data';\r\nimport { IAbsoluteLayerCheckoutProps } from '../absolute-layer-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: IAbsoluteLayerCheckoutProps): IInvoicePaymentSummary => {\r\n const {\r\n data: { checkout },\r\n resources: { totalAmountLabel, invoiceLabel, invoiceSummaryTitle },\r\n context,\r\n typeName,\r\n id,\r\n telemetry\r\n } = input;\r\n\r\n const checkoutCart = get(checkout, 'result.checkoutCart');\r\n const cart = get(checkout, 'result.checkoutCart.cart');\r\n\r\n return {\r\n heading:

{invoiceSummaryTitle}

,\r\n lines: checkoutCart?.hasInvoiceLine\r\n ? InvoiceSummary({\r\n orderTotalLabel: totalAmountLabel,\r\n invoiceLabel,\r\n cart,\r\n context,\r\n typeName,\r\n telemetry,\r\n id,\r\n checkoutState: checkout.result\r\n })\r\n : undefined\r\n };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CartLineItemComponentNick } from './cartlineitemnick.component';\r\nimport MsDyn365, * 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 { IAbsoluteLayerCheckoutData } from '../absolute-layer-checkout.data';\r\nimport { IAbsoluteLayerCheckoutProps } from '../absolute-layer-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: IAbsoluteLayerCheckoutProps, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\r\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\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: { 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 let productUrl = getProductUrlSync(product, context.actionContext, undefined);\r\n if (MsDyn365.isBrowser) {\r\n const fullUrl = new URL(productUrl, window.location.href);\r\n fullUrl.searchParams.set('catalogid', `${cartLine.CatalogId ?? 0}`);\r\n productUrl = fullUrl.href;\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: { emailDeliveryText }\r\n } = input;\r\n\r\n return {\r\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\r\n label: {emailDeliveryText}\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 if (lineItemsHeading) {\r\n lineItemsHeading.text = event.target.value;\r\n }\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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { PriceLine, ProductPrice, SalesAgreementPriceLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { Collapse, format, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nconst defaultPrice: number = 0;\r\nconst freePrice: number = 0;\r\n\r\n/**\r\n * Interface for price component resources.\r\n * @param {string} priceRangeSeparator - The price range separator.\r\n */\r\nexport interface IPriceComponentResources {\r\n priceRangeSeparator?: string;\r\n salesAgreementPricePrompt?: string;\r\n salesAgreementExpirationDatePrompt?: string;\r\n salesAgreementCommittedQuantityPrompt?: string;\r\n salesAgreementRemainingQuantityPrompt?: string;\r\n}\r\n\r\n/**\r\n * Interface for price component props.\r\n * @param {boolean} isPriceMinMaxEnabled - Whether the price range feature is enabled or not.\r\n * @param {IPriceComponentResources} priceResources - The price range resources.\r\n */\r\nexport interface IPriceComponentProps extends IComponentProps<{ price: ProductPrice }> {\r\n className?: string;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n isSalesAgreementPriceFeatureEnabled?: boolean;\r\n salesAgreementLineId?: number;\r\n priceResources?: IPriceComponentResources;\r\n salesAgreementDetailCollapseProps?: ICollapseProps;\r\n salesAgreementDetailOnClick?(event: React.MouseEvent | React.KeyboardEvent): void;\r\n}\r\n\r\n/**\r\n * The interface of price component.\r\n */\r\nexport interface IPriceComponent extends IComponent {}\r\n\r\nconst priceComponentActions = {};\r\n\r\n/**\r\n * Get the original price from price component props.\r\n * @param props - The IPriceComponentProps.\r\n * @returns The original price.\r\n */\r\nconst getOriginalPrice = (props: IPriceComponentProps): number => {\r\n return Math.max(\r\n props.data.price.BasePrice ?? defaultPrice,\r\n props.data.price.TradeAgreementPrice ?? defaultPrice,\r\n props.data.price.AdjustedPrice ?? defaultPrice\r\n );\r\n};\r\n\r\n/**\r\n * Get the formatted currency.\r\n * @param props - The props.\r\n * @param price - The price.\r\n * @param shouldUseFreePriceText - The shouldUseFreePriceText.\r\n * @returns The formatted currency.\r\n */\r\nconst formatCurrency = (props: IPriceComponentProps, price: number | undefined, shouldUseFreePriceText: boolean | undefined): string => {\r\n if (price === undefined) {\r\n return '';\r\n }\r\n\r\n if (shouldUseFreePriceText && price === freePrice && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(price);\r\n};\r\n\r\n/**\r\n * ShowStrikethroughPricing.\r\n * @param props - The props.\r\n * @returns True if showStrikethroughPricing, false otherwise.\r\n */\r\nconst showStrikethroughPricing = (props: IPriceComponentProps): boolean => {\r\n const originalPrice = getOriginalPrice(props);\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n return props.data.price.MinVariantPrice < originalPrice;\r\n }\r\n\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n return originalPrice > props.data.price.CustomerContextualPrice;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Render current price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst renderCurrentPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const maxVariantPrice: string = formatCurrency(props, props.data.price.MaxVariantPrice, false);\r\n const minVariantPrice: string = formatCurrency(props, props.data.price.MinVariantPrice, false);\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n return (\r\n \r\n \r\n {minVariantPrice}\r\n \r\n \r\n {props.priceResources?.priceRangeSeparator}\r\n \r\n \r\n {maxVariantPrice}\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n 'value': {formatCurrency(props, props.data.price.CustomerContextualPrice, true)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render current price with original price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst renderCurrentPriceWithOriginalPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const originalPrice: number = getOriginalPrice(props);\r\n const initialPrice: string = formatCurrency(props, originalPrice, true);\r\n\r\n return (\r\n <>\r\n \r\n {` `}\r\n {props.originalPriceText}\r\n {` `}\r\n {initialPrice}\r\n {` `}\r\n {props.currentPriceText}\r\n {` `}\r\n {renderCurrentPrice(props)}\r\n \r\n \r\n \r\n {props.savingsText && {props.savingsText}}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * The state of sales agreement details.\r\n */\r\nexport interface ISalesAgreementDetailState {\r\n isOpen: boolean;\r\n}\r\n\r\n/**\r\n * The SalesAgreementPrice class.\r\n */\r\n// eslint-disable-next-line react/require-optimization -- Not needed.\r\nclass SalesAgreementPrice extends React.Component {\r\n public constructor(props: IPriceComponentProps) {\r\n super(props);\r\n this._toggle = this._toggle.bind(this);\r\n this.state = {\r\n isOpen: true\r\n } as ISalesAgreementDetailState;\r\n }\r\n\r\n public render(): React.ReactElement {\r\n const priceLines: PriceLine[] = this.props.data.price.AttainablePriceLines ?? [];\r\n const firstPriceLine: SalesAgreementPriceLine = priceLines[0] as SalesAgreementPriceLine;\r\n if (this.props.salesAgreementDetailCollapseProps) {\r\n this.props.salesAgreementDetailCollapseProps.isOpen = this.state.isOpen;\r\n }\r\n return (\r\n \r\n

\r\n {formatCurrency(\r\n this.props,\r\n this.props.data.price.SalesAgreementPrice ?? this.props.data.price.CustomerContextualPrice,\r\n true\r\n )}\r\n

\r\n \r\n {this.props.priceResources?.salesAgreementPricePrompt}\r\n

\r\n \r\n

\r\n \r\n {/* Available date */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementExpirationDatePrompt ?? '',\r\n this.props.context.cultureFormatter.formatDate(firstPriceLine.EffectiveDate as Date),\r\n this.props.context.cultureFormatter.formatDate(firstPriceLine.ExpirationDate as Date)\r\n )}\r\n \r\n \r\n {/* Quantity commitment */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementCommittedQuantityPrompt ?? '',\r\n firstPriceLine.CommittedQuantity\r\n )}\r\n \r\n \r\n {/* Remaining quantity to qualify */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementRemainingQuantityPrompt ?? '',\r\n firstPriceLine.RemainingQuantity\r\n )}\r\n \r\n

\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Callback which toggles collapse mode.\r\n * @param event - The mouse or keyboard event.\r\n */\r\n private _toggle(event: React.MouseEvent | React.KeyboardEvent): void {\r\n event.preventDefault();\r\n console.log(this.state.isOpen);\r\n // eslint-disable-next-line react/no-access-state-in-setstate -- Copied from other class.\r\n this.setState({ isOpen: !this.state.isOpen });\r\n console.log(this.state.isOpen);\r\n }\r\n}\r\n\r\n/**\r\n * Price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst Price: React.FC = (props: IPriceComponentProps): JSX.Element | null => {\r\n // CustomerContextualPrice could be zero\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n\r\n // Determine if contract price is avaiable/applied by:\r\n // isFeatureEnabled and SA price != 0, for PDP.\r\n // SA line id != 0, for cart line.\r\n if (props.isSalesAgreementPriceFeatureEnabled && props.data.price.SalesAgreementPrice !== 0) {\r\n const salesAgreementPrice = new SalesAgreementPrice(props);\r\n return {salesAgreementPrice.render()};\r\n }\r\n\r\n return (\r\n <>\r\n {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * The PriceComponent.\r\n */\r\nexport const PriceComponent: React.FunctionComponent = msdyn365Commerce.createComponent('Price', {\r\n component: Price,\r\n ...priceComponentActions\r\n});\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n//import { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\r\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { PriceComponent } from './price.components';\r\n\r\nexport interface IOrderSummaryProps {\r\n subTotalLabel: string;\r\n shippingLabel: string;\r\n taxLabel: string;\r\n orderTotalLabel: string;\r\n loyaltyLabel?: string;\r\n giftcardLabel?: string;\r\n totalDiscountsLabel: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n cart: Cart;\r\n channelConfiguration: ChannelConfiguration;\r\n id: string;\r\n typeName: string;\r\n otherChargeLabel?: string;\r\n freeText?: string;\r\n toBeCalculatedText?: string;\r\n checkoutState?: ICheckoutState;\r\n retailMultiplePickUpOptionEnabled?: boolean;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n isTaxIncludedInPrice?: boolean;\r\n isShowTaxBreakup?: boolean;\r\n}\r\n\r\nexport interface IOrderSummaryLines {\r\n subtotal: React.ReactNode;\r\n shipping?: React.ReactNode;\r\n otherCharge?: React.ReactNode;\r\n tax: React.ReactNode;\r\n orderTotal: React.ReactNode;\r\n totalDiscounts?: React.ReactNode;\r\n giftCard?: React.ReactNode;\r\n loyalty?: React.ReactNode;\r\n}\r\n\r\ninterface IOrderSummaryLineProps {\r\n label: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n price?: number;\r\n freeText?: string;\r\n toBeCalculatedText?: string;\r\n id: string;\r\n typeName: string;\r\n cssLabel: string;\r\n}\r\n\r\ninterface IShippingOrderLine {\r\n cart: Cart;\r\n channelConfiguration: ChannelConfiguration;\r\n canShip?: boolean;\r\n hasDeliveryMethod?: boolean;\r\n hasShippingMethod?: boolean;\r\n freightFee?: number;\r\n}\r\n\r\nconst OrderSummaryLine: React.FC = ({\r\n price,\r\n label,\r\n context,\r\n id,\r\n typeName,\r\n toBeCalculatedText,\r\n freeText,\r\n cssLabel\r\n}) => {\r\n return (\r\n <>\r\n {label}\r\n {price || price === 0 ? (\r\n \r\n ) : (\r\n {toBeCalculatedText}\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst _buildOrderSummarySection = (\r\n props: IOrderSummaryProps,\r\n price: number | undefined,\r\n cssLabel: string,\r\n label: string = ''\r\n): React.ReactNode => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\r\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\r\n};\r\n\r\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\r\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\r\n return count + (giftCard.Balance || 0);\r\n };\r\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\r\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\r\n return Math.min(giftCardTotalValue, amount);\r\n};\r\n\r\nconst getDeliveryConfiguration = (\r\n cart: Cart,\r\n channelConfiguration: ChannelConfiguration,\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\r\n retailMultiplePickUpOptionEnabled?: boolean,\r\n isTaxIncludedInPrice?: boolean,\r\n isShowTaxBreakup?: boolean\r\n): IShippingOrderLine => {\r\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\r\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\r\n const cartLines = cart.CartLines || [];\r\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\r\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\r\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\r\n\r\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\r\n // False False/True shippingChargeAmount\r\n // True True shippingChargeAmount\r\n // True false shippingChargeAmount + taxOnShippingCharge\r\n const freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\r\n\r\n const canShip = deliveryModes.some(\r\n deliveryMode =>\r\n !(\r\n deliveryMode !== '' &&\r\n (deliveryMode ===\r\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\r\n deliveryMode === emailDeliveryModeCode)\r\n )\r\n );\r\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\r\n const hasShippingMethod = deliveryModes.some(\r\n deliveryMode =>\r\n !!deliveryMode &&\r\n deliveryMode !==\r\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\r\n deliveryMode !== emailDeliveryModeCode\r\n );\r\n return {\r\n canShip,\r\n hasDeliveryMethod,\r\n hasShippingMethod,\r\n freightFee\r\n } as IShippingOrderLine;\r\n};\r\n\r\nconst getDeliveryMode = (\r\n deliveryMode?: string,\r\n featureSate: boolean = false,\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\r\n pickupDeliveryMode?: string\r\n) => {\r\n if (!featureSate) {\r\n return pickupDeliveryMode;\r\n }\r\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\r\n};\r\n\r\nexport const OrderSummary = (props: IOrderSummaryProps) => {\r\n const {\r\n SubtotalAmount,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\r\n SubtotalAmountWithoutTax,\r\n TaxAmount,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\r\n TaxOnNonShippingCharges,\r\n DiscountAmountWithoutTax = 0,\r\n TotalAmount,\r\n OtherChargeAmount\r\n } = props.cart;\r\n\r\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\r\n props.cart,\r\n props.channelConfiguration,\r\n props.channelDeliveryOptionConfig,\r\n props.retailMultiplePickUpOptionEnabled,\r\n props.isTaxIncludedInPrice,\r\n props.isShowTaxBreakup\r\n );\r\n\r\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\r\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\r\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\r\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\r\n // False False/True otherChargeAmount\r\n // True True otherChargeAmount\r\n // True false otherChargeAmount+TaxOnNonShippingCharges\r\n\r\n const otherChargeAmountTotal =\r\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\r\n\r\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\r\n\r\n const reactNodes: IOrderSummaryLines = {\r\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\r\n tax: props.isShowTaxBreakup\r\n ? _buildOrderSummarySection(\r\n props,\r\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\r\n 'tax-amount',\r\n props.taxLabel\r\n )\r\n : '',\r\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\r\n otherCharge:\r\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\r\n undefined\r\n };\r\n\r\n if (canShip) {\r\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\r\n }\r\n if (props.checkoutState) {\r\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\r\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\r\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\r\n\r\n if (loyaltyAmount > 0) {\r\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\r\n }\r\n\r\n if (giftCardAmount > 0) {\r\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\r\n }\r\n\r\n reactNodes.orderTotal = _buildOrderSummarySection(\r\n { ...props, freeText: undefined },\r\n totalAmountAfterGiftCard,\r\n 'total',\r\n props.orderTotalLabel\r\n );\r\n }\r\n\r\n if (DiscountAmountWithoutTax > 0) {\r\n reactNodes.totalDiscounts = _buildOrderSummarySection(\r\n props,\r\n -DiscountAmountWithoutTax,\r\n 'total-discounts',\r\n props.totalDiscountsLabel\r\n );\r\n }\r\n\r\n return reactNodes;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IOrderSummaryLines, OrderSummary } from './order-summary-lineitem';\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\n\r\nimport { IAbsoluteLayerCheckoutData } from '../absolute-layer-checkout.data';\r\nimport { IAbsoluteLayerCheckoutProps } from '../absolute-layer-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: IAbsoluteLayerCheckoutProps): 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 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\r\n const isShowOrHideTaxEnabled = context.request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\r\n\r\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\r\n const {\r\n config: { orderSummaryHeading }\r\n } = input;\r\n if (orderSummaryHeading) {\r\n orderSummaryHeading.text = event.target.value;\r\n }\r\n };\r\n\r\n 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 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- existing property.\r\n isTaxIncludedInPrice: cart.IsTaxIncludedInPrice,\r\n isShowTaxBreakup: isShowOrHideTaxEnabled\r\n })\r\n : undefined\r\n };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { 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\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 = this.formCardRef.current as HTMLElement;\r\n const focussableElements = `\r\n a:not([disabled]),\r\n button:not([disabled]),\r\n input[type=submit]:not([disabled]),\r\n input[type=checkbox]:not([disabled]),\r\n input[type=text]:not([disabled]),\r\n input[type=radio]:not([disabled]),\r\n input[type=password]:not([disabled]),\r\n select:not([disabled]),\r\n textarea:not([disabled]),\r\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\r\n `;\r\n\r\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\r\n child && child.focus && child.focus();\r\n };\r\n\r\n private readonly focusOnEditButton = (): void => {\r\n // Focus on edit button\r\n const editButton =\r\n this.editButtonRef &&\r\n this.editButtonRef.current &&\r\n this.editButtonRef.current.focus &&\r\n (this.editButtonRef.current as HTMLElement);\r\n editButton && editButton.focus();\r\n };\r\n\r\n private readonly scrollToTitle = (): void => {\r\n // Scroll window to the title of the step that was just completed only in mobile viewport\r\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\r\n formCard && formCard.scrollIntoView();\r\n };\r\n\r\n private readonly getTitle = (): JSX.Element => {\r\n const { step, title } = this.props;\r\n const { headingTag: Tag = 'h2', text = '' } = title || {};\r\n return (\r\n \r\n \r\n {step + 1}. {` `}\r\n \r\n {text && {text}}\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default CheckoutGuidedCard;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport get from 'lodash/get';\r\nimport { computed } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport GuidedCard from './guided-card';\r\n\r\nexport interface ICheckoutGuidedFormProps {\r\n items: React.ReactNode[];\r\n moduleState: IModuleStateManager;\r\n 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 isPaymentVerificationRedirection?: boolean;\r\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\r\n hasError?: boolean;\r\n hasShippingAddress?: boolean | undefined;\r\n hasCartDeliveryMode?: boolean | undefined;\r\n hasGuestCheckoutEmail?: boolean | undefined;\r\n isTermsAndConditionAccepted?: boolean | undefined;\r\n}\r\n\r\ninterface ICheckoutGuidedFormState {\r\n currentStep: number;\r\n}\r\n\r\nconst paymentInstrumentModuleId = 'payment-instrument';\r\n\r\n/**\r\n *\r\n * CheckoutGuidedForm component.\r\n * @extends {React.Component}\r\n */\r\n@observer\r\nclass CheckoutGuidedForm extends React.PureComponent {\r\n @computed public get hasMissingInfo(): boolean {\r\n if (\r\n this.props.hasShippingAddress === false ||\r\n this.props.hasCartDeliveryMode === false ||\r\n this.props.hasGuestCheckoutEmail === false ||\r\n this.props.isTermsAndConditionAccepted === false\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n @computed public get hasOrderError(): boolean {\r\n for (const item of this.props.items) {\r\n const childId = this.getId(item);\r\n const state = this.props.moduleState.getModule(childId);\r\n\r\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n state.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\r\n );\r\n\r\n if (!isPaymentSectionContainer && !state.isDisabled && state.hasError) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public state: ICheckoutGuidedFormState = {\r\n currentStep: 0\r\n };\r\n\r\n public componentDidMount(): void {\r\n /**\r\n * Append child modules.\r\n */\r\n const childIds = this.props.items.map((item: React.ReactNode) => get(item, 'props.id'));\r\n this.props.moduleState.init({ childIds });\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { moduleState, items, resource } = this.props;\r\n if (!items || !moduleState) {\r\n return null;\r\n }\r\n\r\n const shouldCollapseAfterRedirect =\r\n this.props.isPaymentVerificationRedirection &&\r\n this.props.shouldEnableSinglePaymentAuthorizationCheckout &&\r\n !this.props.hasError &&\r\n !this.hasMissingInfo &&\r\n !this.hasOrderError;\r\n\r\n 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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React, { useState } from 'react';\r\n\r\ninterface ICheckoutPlaceOrderButtonProps {\r\n canPlaceOrder: boolean;\r\n checkoutBtnText: string;\r\n telemetryContent?: ITelemetryContent;\r\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\r\n isPlaceOrderLoading?: boolean;\r\n isExpressCheckoutApplied?: boolean;\r\n isPaymentVerificationRedirection?: boolean;\r\n placeOrder(): Promise;\r\n}\r\n\r\nconst buttonsStates: React.Dispatch>[] = [];\r\n\r\n/**\r\n * On place order function.\r\n * @param isBusy -Check is busy.\r\n * @param canPlaceOrder -Check can place order.\r\n * @param placeOrder -Place order function.\r\n * @returns Set state of button.\r\n */\r\nconst onPlaceOrderHandler = (isBusy: boolean, 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};\r\n\r\nconst CheckoutPlaceOrderButton: React.FC = ({\r\n checkoutBtnText,\r\n canPlaceOrder,\r\n placeOrder,\r\n telemetryContent,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n isPlaceOrderLoading,\r\n isExpressCheckoutApplied,\r\n isPaymentVerificationRedirection\r\n}) => {\r\n const [isBusy, setIsBusy] = useState(false);\r\n buttonsStates.push(setIsBusy);\r\n const payload = getPayloadObject(TelemetryEvent.Purchase, telemetryContent!, checkoutBtnText, '');\r\n const attributes = getTelemetryAttributes(telemetryContent!, payload);\r\n\r\n if (shouldEnableSinglePaymentAuthorizationCheckout && (!isExpressCheckoutApplied || isPaymentVerificationRedirection)) {\r\n return (\r\n \r\n {checkoutBtnText}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {checkoutBtnText}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutPlaceOrderButton;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { checkoutAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { getTenderTypesAsync, resolveCardTypesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport {\r\n Address,\r\n CardPaymentAcceptResult,\r\n CardType,\r\n CartTenderLine,\r\n RetailOperation,\r\n SalesOrder,\r\n TenderType,\r\n TokenizedPaymentCard\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nexport const OPERATIONS = {\r\n PayCard: 201,\r\n PayGiftCertificate: 214,\r\n PayLoyalty: 207,\r\n PayCustomerAccount: 202\r\n};\r\n\r\nconst getCardTypeId = async (ctx: IActionContext, cardPrefix: string = ''): Promise => {\r\n try {\r\n const response = await resolveCardTypesAsync({ callerContext: ctx }, cardPrefix, CardType.Unknown);\r\n if (response && response.length > 0) {\r\n return response[0].TypeId;\r\n }\r\n } catch (error) {\r\n ctx.telemetry.error('Call to resolveCardTypesAsync failed.', error);\r\n }\r\n return undefined;\r\n};\r\n\r\nconst findTenderIdTypeByOperationId = (tenderTypes: TenderType[], operationId: RetailOperation): string | undefined => {\r\n const matchedTenderType = tenderTypes.find(tenderType => tenderType.OperationId === operationId);\r\n if (matchedTenderType) {\r\n return matchedTenderType.TenderTypeId;\r\n }\r\n return;\r\n};\r\n\r\nconst roundNumber = (value: number) => Number(value.toFixed(2));\r\n\r\nasync function getLoyaltyTenderLine(\r\n ctx: IActionContext,\r\n LoyaltyCardId: string,\r\n Amount: number = 0,\r\n Currency: string = 'USD'\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayLoyalty);\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n LoyaltyCardId\r\n };\r\n}\r\n\r\nasync function getGiftCardTenderLine(\r\n ctx: IActionContext,\r\n GiftCardId: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n tenderTypeId?: string,\r\n giftCardPin?: string,\r\n giftCardExpirationYear?: number,\r\n giftCardExpirationMonth?: number\r\n): Promise {\r\n let TenderTypeId = tenderTypeId;\r\n\r\n if (!TenderTypeId) {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayGiftCertificate);\r\n }\r\n\r\n const GiftCardPin = giftCardPin;\r\n const GiftCardExpirationYear = giftCardExpirationYear;\r\n const GiftCardExpirationMonth = giftCardExpirationMonth;\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n GiftCardId,\r\n GiftCardPin,\r\n GiftCardExpirationYear,\r\n GiftCardExpirationMonth\r\n };\r\n}\r\n\r\nasync function getCreditCardTenderLine(\r\n ctx: IActionContext,\r\n tokenizedPaymentCard: TokenizedPaymentCard,\r\n cardPrefix: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n billingAddress?: Address\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n let cartTypeId = tokenizedPaymentCard.CardTypeId;\r\n\r\n if (!cartTypeId) {\r\n cartTypeId = await getCardTypeId(ctx, cardPrefix);\r\n }\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get card tender type');\r\n }\r\n\r\n if (!cartTypeId) {\r\n throw new Error('Fail to get card type id');\r\n }\r\n\r\n const TenderTypeId = tokenizedPaymentCard.TenderType ?? findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n Amount,\r\n TenderTypeId,\r\n CardTypeId: cartTypeId\r\n };\r\n cardTenderLine.TokenizedPaymentCard = {\r\n ...tokenizedPaymentCard,\r\n CardTypeId: cartTypeId,\r\n\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: tokenizedPaymentCard.House || 'N/A',\r\n ...(tokenizedPaymentCard.CardTokenInfo && {\r\n CardTokenInfo: {\r\n ...tokenizedPaymentCard.CardTokenInfo,\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardTokenInfo'\r\n }\r\n }),\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\n/**\r\n * Get credit card tender line.\r\n * @param context - Action context.\r\n * @param amount - Due amount for credit card.\r\n * @param currency - Currency.\r\n * @param cardPaymentAcceptResult - CardPaymentAcceptResult.\r\n * @param billingAddress - BillingAddress.\r\n * @returns - The credit card tender line.\r\n */\r\nasync function getCreditCardTenderLineForSinglePaymentAuth(\r\n context: IActionContext,\r\n amount: number = 0,\r\n currency: string = 'USD',\r\n cardPaymentAcceptResult?: CardPaymentAcceptResult,\r\n billingAddress?: Address\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: context, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n const tenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n\r\n if (cardPaymentAcceptResult) {\r\n cardPaymentAcceptResult.TokenizedPaymentCard = {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: 'N/A',\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n }\r\n\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error -- existing data.\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency: currency,\r\n Amount: amount,\r\n TenderTypeId: tenderTypeId,\r\n CardPaymentAcceptResult: cardPaymentAcceptResult\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\nasync function createCustomerAccountTenderLine(ctx: IActionContext, Amount: number, Currency: string = 'USD'): Promise {\r\n const CustomerId = null;\r\n if (!ctx.requestContext.user.isAuthenticated) {\r\n ctx.telemetry.error('A customer id is required to pay with customer account');\r\n }\r\n\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n ctx.telemetry.error('No tender types found for this channel');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCustomerAccount);\r\n if (!TenderTypeId) {\r\n ctx.telemetry.error('No customer account tender type');\r\n }\r\n return {\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n\r\n // @ts-expect-error\r\n CustomerId\r\n };\r\n}\r\n\r\nexport 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 isExpressCheckoutApplied,\r\n isExpressAddressApplied\r\n } = checkoutState;\r\n const { Currency } = channelConfiguration;\r\n\r\n let amountDue = cartState.cart.AmountDue || 0;\r\n let cartTenderLines;\r\n const getTenderLinePromises = [];\r\n const loyaltyCardNumber = cartState.cart.LoyaltyCardId;\r\n\r\n // Pay by loyalty first\r\n if (loyaltyAmount && loyaltyCardNumber) {\r\n const chargedAmount = roundNumber(Math.min(loyaltyAmount, amountDue));\r\n const loyaltyTenderLinePromise = getLoyaltyTenderLine(ctx, loyaltyCardNumber, chargedAmount, Currency);\r\n getTenderLinePromises.push(loyaltyTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout loyalty tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout loyalty tender line is not added when no loyaltyAmount or loyaltyCardNumber.');\r\n }\r\n\r\n // Then by gift card\r\n if (giftCardExtends && giftCardExtends.length > 0) {\r\n giftCardExtends.some(giftCardExtend => {\r\n if (giftCardExtend.Balance && amountDue > 0) {\r\n const chargedAmount = roundNumber(Math.min(giftCardExtend.Balance, amountDue));\r\n const tenderTypeId = giftCardExtend.TenderTypeId;\r\n const giftCardPin = giftCardExtend.Pin;\r\n const giftCardExpirationYear = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[1], 10)\r\n : undefined;\r\n const giftCardExpirationMonth = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[0], 10)\r\n : undefined;\r\n const creditCardTenderLinePromise = getGiftCardTenderLine(\r\n ctx,\r\n giftCardExtend.Id,\r\n chargedAmount,\r\n Currency,\r\n tenderTypeId,\r\n giftCardPin,\r\n giftCardExpirationYear,\r\n giftCardExpirationMonth\r\n );\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout gift card tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout gift card tender line is not added when no balance or no remaining balance.');\r\n }\r\n return amountDue === 0;\r\n });\r\n }\r\n\r\n // Then by customer account\r\n if (checkoutState.customerAccountAmount > 0) {\r\n const chargedAmount = roundNumber(Math.min(checkoutState.customerAccountAmount, amountDue));\r\n const customerAccountTenderLinePromise = createCustomerAccountTenderLine(ctx, chargedAmount, Currency);\r\n getTenderLinePromises.push(customerAccountTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout customer account amount tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout customer account amount tender line is not added when customerAccountAmount is 0.');\r\n }\r\n\r\n // Pay the rest by credit card\r\n if (amountDue > 0) {\r\n let creditCardTenderLinePromise: Promise;\r\n\r\n if (\r\n shouldEnableSinglePaymentAuthorizationCheckout &&\r\n (!(isExpressCheckoutApplied && !isExpressAddressApplied) || (isExpressCheckoutApplied && isPaymentVerificationRedirection))\r\n ) {\r\n creditCardTenderLinePromise = getCreditCardTenderLineForSinglePaymentAuth(\r\n ctx,\r\n amountDue,\r\n Currency,\r\n cardPaymentAcceptResult,\r\n billingAddress\r\n );\r\n } else {\r\n if (!tokenizedPaymentCard) {\r\n throw new Error('Fail to placeOrder: no token found');\r\n }\r\n creditCardTenderLinePromise = getCreditCardTenderLine(\r\n ctx,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n amountDue,\r\n Currency,\r\n billingAddress\r\n );\r\n }\r\n\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n\r\n ctx.telemetry.information('Checkout credit card tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout credit card tender line is not added when no remaining balance for credit card.');\r\n }\r\n\r\n if (getTenderLinePromises.length > 0) {\r\n // When payment methods is required\r\n cartTenderLines = await Promise.all(getTenderLinePromises).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!cartTenderLines || cartTenderLines.length === 0) {\r\n throw new Error('Fail to placeOrder: fail to get cart tender lines');\r\n }\r\n } else {\r\n ctx.telemetry.information('TenderLinePromises length is 0.');\r\n }\r\n\r\n const cartVersion = updatedCartVersion || cartState.cart.Version;\r\n\r\n ctx.telemetry.information('Checkout checkoutAsync is called.');\r\n\r\n // Proceed checkout\r\n const salesOrder = await checkoutAsync(\r\n { callerContext: ctx, bypassCache: 'get' },\r\n cartState.cart.Id,\r\n guestCheckoutEmail,\r\n undefined,\r\n undefined,\r\n cartTenderLines || null,\r\n cartVersion\r\n ).catch(async error => {\r\n if (checkoutState.shouldEnableSinglePaymentAuthorizationCheckout) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n if (error.data?.AdditionalContext) {\r\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is sent for single payment auth.');\r\n\r\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n await checkoutState.updateRedirectAdditionalContext({\r\n newRedirectAdditionalContext: error?.data?.AdditionalContext as string\r\n });\r\n await checkoutState.updateRedirectPaymentConnectorId({\r\n newRedirectPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\r\n });\r\n } else {\r\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is not sent for single payment auth.');\r\n\r\n await checkoutState.updateIsCheckoutCallFailed({ newIsCheckoutCallFailed: true });\r\n\r\n await checkoutState.updateCheckoutErrorPaymentConnectorId({\r\n newCheckoutErrorPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\r\n });\r\n\r\n if (isPaymentVerificationRedirection) {\r\n ctx.telemetry.warning('RefreshCart when isPaymentVerificationRedirection is true.');\r\n\r\n await checkoutState.checkoutCart.refreshCart({});\r\n await checkoutState.updateIsExpressCheckoutApplied({ newIsExpressCheckoutApplied: false });\r\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\r\n }\r\n }\r\n }\r\n\r\n throw error;\r\n });\r\n\r\n if (!salesOrder) {\r\n ctx.telemetry.error('Failed to placeOrder: fail to checkout.');\r\n throw new Error('Fail to placeOrder: fail to checkout');\r\n }\r\n\r\n return salesOrder;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { 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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { 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 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 IProductInventoryInformation,\r\n ProductAvailabilitiesForCartLineItems,\r\n validateCartLinesInventory\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IModuleProps,\r\n INodeProps,\r\n ITelemetryContent,\r\n TelemetryConstant,\r\n Waiting\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { ErrorLocation } from '@msdyn365-commerce/global-state';\r\nimport classnames from 'classnames';\r\nimport isEmpty from 'lodash/isEmpty';\r\nimport { action, computed, reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IAbsoluteLayerCheckoutData } from './absolute-layer-checkout.data';\r\nimport { ICheckoutHeadingData, IAbsoluteLayerCheckoutProps } from './absolute-layer-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\n\r\nexport * from './components/get-line-items';\r\nexport * from './components/get-order-summary';\r\n\r\n/**\r\n * Device type.\r\n */\r\ntype DeviceType = 'Mobile';\r\n\r\n/**\r\n * The Checkout state.\r\n */\r\ninterface ICheckoutState {\r\n errorMessage: string;\r\n isValidationPassed: boolean;\r\n isPlaceOrderLoading?: boolean;\r\n}\r\n\r\n/**\r\n * The Checkout view props.\r\n * @extends IAbsoluteLayerCheckoutProps\r\n */\r\nexport interface ICheckoutViewProps extends IAbsoluteLayerCheckoutProps {\r\n className: string;\r\n canShow?: boolean;\r\n isEmptyCart?: boolean;\r\n isConsentGiven?: boolean;\r\n hasError?: boolean;\r\n isPaymentVerificationRedirection?: boolean;\r\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\r\n cartStatus?: string;\r\n isMobile?: boolean;\r\n isEditorialMode?: boolean;\r\n backToShoppingUrl?: string;\r\n editCartLink?: string;\r\n hasSalesOrder: boolean;\r\n hasInvoiceLine?: boolean;\r\n\r\n checkoutProps: IModuleProps;\r\n headerProps: INodeProps;\r\n bodyProps: INodeProps;\r\n mainProps: INodeProps;\r\n mainControlProps: INodeProps;\r\n sideProps: INodeProps;\r\n sideControlFirstProps: INodeProps;\r\n sideControlSecondProps: INodeProps;\r\n 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 checkoutExpressPaymentContainer?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * The checkout module props interface.\r\n */\r\nexport interface ICheckoutModuleProps extends IAbsoluteLayerCheckoutProps, IModuleStateProps {}\r\n\r\nconst expressPaymentSectionClassName = 'msc-express-payment-container';\r\n\r\n/**\r\n *\r\n * CheckoutContainer component.\r\n * @extends {React.Component}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass Checkout extends React.PureComponent {\r\n @computed get cartStatus(): Msdyn365.AsyncResultStatus {\r\n 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 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 === '' ||\r\n shouldEnableSinglePaymentAuthorizationCheckout ||\r\n (this.props.data.checkout.result?.isPaymentVerificationRedirection ?? false))\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 (!this.props.data.checkout.result?.isExpressCheckoutApplied ||\r\n this.props.data.checkout.result?.isPaymentVerificationRedirection)\r\n ) {\r\n if (!this.state.isPlaceOrderLoading) {\r\n this.setState({ isPlaceOrderLoading: true });\r\n }\r\n\r\n this.props.telemetry.information(\r\n 'Call onPlaceOrder as reaction when isPaymentSectionContainerReady is updated for single auth payment.'\r\n );\r\n\r\n await this.onPlaceOrder();\r\n\r\n // If 3D authentication redirection, don't update isPlaceOrderLoading\r\n if (!this.props.data.checkout.result.isPaymentVerificationRequired) {\r\n this.setState({ isPlaceOrderLoading: false });\r\n }\r\n }\r\n }\r\n );\r\n\r\n // Reaction to enable place order button when isPaymentSectionContainerHasError is true for new checkout flow.\r\n reaction(\r\n () => this.props.data.checkout.result?.isPaymentSectionContainerHasError,\r\n hasError => {\r\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\r\n this.setState({ isPlaceOrderLoading: false });\r\n\r\n this.props.telemetry.information(\r\n 'Enable place order button as reaction when isPaymentSectionContainerHasError is updated to true for single auth payment.'\r\n );\r\n } else {\r\n this.props.telemetry.information(\r\n 'No reaction when isPaymentSectionContainerHasError is updated to false or not single auth payment.'\r\n );\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkout.result?.isBillingAddressHasError,\r\n hasError => {\r\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\r\n this.setState({ isPlaceOrderLoading: false });\r\n\r\n this.props.data.checkout.result?.updateIsBillingAddressHasError({ newIsBillingAddressHasError: false });\r\n\r\n this.props.telemetry.information(\r\n 'Enable place order button as reaction when isBillingAddressHasError is updated to true for single auth payment.'\r\n );\r\n } else {\r\n this.props.telemetry.information(\r\n 'No reaction when isBillingAddressHasError is updated to false or not single auth payment.'\r\n );\r\n }\r\n }\r\n );\r\n\r\n // Reaction to enable place order button when redirection is true for new checkout flow.\r\n reaction(\r\n () => this.canPlaceOrder,\r\n async () => {\r\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && this.canPlaceOrder) {\r\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\r\n await this.props.data.checkout.result.updateIsPlaceOrderEnabledInRedirection({\r\n newIsPlaceOrderEnabledInRedirection: true\r\n });\r\n\r\n this.props.telemetry.information(\r\n 'Set isPaymentVerificationRedirection to true as reaction when canPlaceOrder is updated to true for single auth payment.'\r\n );\r\n } else {\r\n this.props.telemetry.information(\r\n 'No reaction when canPlaceOrder is updated to true but isPaymentVerificationRedirection is false for single auth payment.'\r\n );\r\n }\r\n } else {\r\n this.props.telemetry.information('No reaction when canPlaceOrder is updated to false or not single auth payment.');\r\n }\r\n }\r\n );\r\n\r\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\r\n // Reaction to update the error message when there is a checkout error.\r\n reaction(\r\n () => this.props.data.checkout.result?.checkoutError,\r\n checkoutError => {\r\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.Checkout && checkoutError.errorMessage) {\r\n this._setErrorMessage(checkoutError.errorMessage);\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 },\r\n resources,\r\n context: {\r\n request: {\r\n user: { isAuthenticated }\r\n }\r\n }\r\n } = this.props;\r\n const { errorMessage } = this.state;\r\n const { backToShopping, placeOrderText, confirmPaymentText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\r\n const checkoutClass = classnames('ms-checkout', className);\r\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\r\n\r\n // @ts-expect-error - check the key of slot\r\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\r\n\r\n // @ts-expect-error - check the key of slot\r\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\r\n\r\n const isConsentGiven =\r\n this.props.context.request &&\r\n this.props.context.request.cookies &&\r\n this.props.context.request.cookies.isConsentGiven &&\r\n this.props.context.request.cookies.isConsentGiven();\r\n\r\n const isMobile =\r\n this.props.context.request &&\r\n this.props.context.request.device &&\r\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\r\n\r\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\r\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\r\n\r\n // const termsAndConditions =\r\n // this.props.slots.termsAndConditions && this.props.slots.termsAndConditions.length > 0 && this.props.slots.termsAndConditions[0];\r\n\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\r\n const backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n\r\n const hasInvoiceLine = this.props.data.checkout && this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\r\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderText;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const shouldEnableSinglePaymentAuthorizationCheckout =\r\n this.props.data.checkout?.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const isExpressCheckoutApplied = this.props.data.checkout?.result?.isExpressCheckoutApplied ?? false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const hasCartDeliveryMode = this.props.data.checkout?.result?.hasCartDeliveryMode;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const hasGuestCheckoutEmail = this.props.data.checkout?.result?.hasGuestCheckoutEmail;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const isTermsAndConditionAccepted = this.props.data.checkout?.result?.isTermsAndConditionAccepted;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const isPaymentVerificationRedirection = this.props.data.checkout?.result?.isPaymentVerificationRedirection ?? false;\r\n\r\n let hasExpressPaymentContainer = false;\r\n\r\n if (\r\n typeof window !== 'undefined' &&\r\n (document?.getElementsByClassName(expressPaymentSectionClassName) as HTMLCollectionOf)[0]?.style.display === ''\r\n ) {\r\n hasExpressPaymentContainer = true;\r\n }\r\n\r\n let viewProps: ICheckoutViewProps = {\r\n ...this.props,\r\n className: checkoutClass,\r\n isEmptyCart: this.isEmptyCart,\r\n isConsentGiven,\r\n hasError: this.hasError,\r\n isPaymentVerificationRedirection: this.props.data.checkout?.result?.isPaymentVerificationRedirection,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n hasSalesOrder:\r\n this.props.data.checkout &&\r\n this.props.data.checkout.result !== undefined &&\r\n this.props.data.checkout.result.salesOrder !== undefined,\r\n hasInvoiceLine,\r\n cartStatus: this.cartStatus,\r\n isMobile,\r\n backToShoppingUrl,\r\n editCartLink,\r\n isEditorialMode: this.isEditorialMode,\r\n // orderConfirmation:\r\n // this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\r\n // ? this.props.slots.orderConfirmation[0]\r\n // : undefined,\r\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\r\n headerProps: { className: 'ms-checkout__head' },\r\n bodyProps: { className: 'ms-checkout__body' },\r\n mainProps: { className: 'ms-checkout__main' },\r\n mainControlProps: { className: 'ms-checkout__main-control' },\r\n sideProps: { className: hasExpressPaymentContainer ? 'ms-checkout__has-express-side' : 'ms-checkout__side' },\r\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\r\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\r\n termsAndConditionsProps: { className: 'ms-checkout__terms-and-conditions' },\r\n title: checkoutHeading && this.renderMsdyn365Text(checkoutHeading),\r\n checkoutExpressPaymentContainer\r\n };\r\n\r\n if (!isConsentGiven && isAuthenticated) {\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 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 /**\r\n * Renders heading.\r\n * @param checkoutHeading - The checkout heading.\r\n * @returns React node.\r\n */\r\n public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Event handler for heading change event.\r\n * @param event - The content change event in heading element.\r\n * @returns The new heading value.\r\n */\r\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\r\n (this.props.config.checkoutHeading!.text = event.target.value);\r\n\r\n /**\r\n * Checks if cart is loading.\r\n * @returns True if is loading, false otherwise.\r\n */\r\n private readonly isLoading = (): boolean => {\r\n return !this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart || !this.state.isValidationPassed;\r\n };\r\n\r\n /**\r\n * Get slot items.\r\n * @param key - The slot key.\r\n * @returns React node or undefined.\r\n */\r\n private readonly getSlotItems = (key: string): React.ReactNode[] | undefined => {\r\n const { slots } = this.props;\r\n return slots && slots[key] && slots[key].length > 0 ? slots[key] : undefined;\r\n };\r\n\r\n /**\r\n * Trigger the payment section container submit when placing order.\r\n */\r\n private readonly triggerPaymentWithPlaceOrder = async (): Promise => {\r\n this.setState({ isPlaceOrderLoading: true });\r\n\r\n await this.props.data.checkout.result?.updateShouldTriggerPaymentWithPlaceOrder({\r\n newShouldTriggerPaymentWithPlaceOrder: !this.props.data.checkout.result.shouldTriggerPaymentWithPlaceOrder\r\n });\r\n };\r\n\r\n /**\r\n * On place order.\r\n * @returns Void promise.\r\n */\r\n private readonly onPlaceOrder = async (): Promise => {\r\n const {\r\n resources: {\r\n checkoutOutOfStockErrorMessage,\r\n genericErrorMessage,\r\n customerCreditLimitExceededErrorMessage,\r\n invalidCartVersionErrorMessage,\r\n missingRequiredCartTenderLinesErrorMessage\r\n },\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 this.props.telemetry.information('Checkout onPlaceOrder is called.');\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\r\n await placeOrder(\r\n actionContext,\r\n this.props.data.checkout.result,\r\n this.props.data.products.result,\r\n //@ts-ignore\r\n !hasOrderConfirmation,\r\n updatedCartVersion,\r\n this.props.data.checkout.result?.isPaymentVerificationRedirection\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 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\r\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\r\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\r\n } else if (\r\n error &&\r\n error.name === 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit'\r\n ) {\r\n errorMessage = customerCreditLimitExceededErrorMessage;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\r\n if (\r\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\r\n error.data?.AdditionalContext &&\r\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\r\n ) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n errorMessage\r\n });\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 /**\r\n * Update receipt email address for electronic cart line.\r\n * @param newGuestCheckoutEmail - The guest checkout email.\r\n * @returns The updated cart version.\r\n */\r\n private readonly updateCartLineEmailAddress = async (newGuestCheckoutEmail: string): Promise => {\r\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\r\n\r\n const emailDeliveryCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(\r\n cartLine => cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && cartLine.DeliveryMode === emailDeliveryModeCode\r\n );\r\n\r\n let updatedCartVersion: number | undefined;\r\n if (emailDeliveryCartLines && emailDeliveryCartLines.length > 0) {\r\n const lineDeliverySpecifications: LineDeliverySpecification[] = emailDeliveryCartLines.map(line => {\r\n return {\r\n LineId: line.LineId,\r\n DeliverySpecification: {\r\n DeliveryModeId: emailDeliveryModeCode,\r\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\r\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail\r\n }\r\n };\r\n });\r\n\r\n await updateLineDeliverySpecificationsAsync(\r\n { callerContext: this.props.context.actionContext },\r\n (await this.props.data.checkout).checkoutCart.cart.Id,\r\n lineDeliverySpecifications\r\n )\r\n .then(updatedCart => {\r\n updatedCartVersion = updatedCart.Version;\r\n })\r\n .catch(error => {\r\n this.props.context.actionContext.telemetry.exception(error);\r\n throw new Error('[updateLineDeliverySpecificationsAsync] Unable to update electronic delivery email address in cart');\r\n });\r\n }\r\n\r\n return updatedCartVersion;\r\n };\r\n\r\n /**\r\n * Return true if any product in the cart is over its max quantity.\r\n * @param cart -- The checkout cart.\r\n * @param products -- The checkout products.\r\n * @returns - Is any product in the cart is over max quantity.\r\n */\r\n private readonly isOverMaxQuantity = async (cart: Cart, products: SimpleProduct[]): Promise => {\r\n let isOverMaxQuantity = false;\r\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\r\n\r\n await getAvailabilitiesForCartLineItems(\r\n new ProductAvailabilitiesForCartLineItems(this.props.context.actionContext.requestContext.apiSettings),\r\n this.props.context.actionContext\r\n )\r\n .then(productInventoryInformation => {\r\n const productsThatShouldValidateInventory: IProductInventoryInformation[] = [];\r\n\r\n cart.CartLines?.map(cartline => {\r\n const cartlineProduct = products.find(product => product.RecordId === cartline.ProductId);\r\n\r\n // If product is non-stocked or cartline is electronic delivery, then no inventory check\r\n const isStockedItem = cartlineProduct?.Behavior?.IsStockedProduct;\r\n const isEmailDelivery =\r\n cartline.DeliveryMode && cartline.DeliveryMode !== '' ? cartline.DeliveryMode === emailDeliveryModeCode : false;\r\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\r\n if (!shouldSkipInventoryCheck && ArrayExtensions.hasElements(productInventoryInformation)) {\r\n const foundProductAvailability = productInventoryInformation.find(productInventory => {\r\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\r\n });\r\n if (foundProductAvailability) {\r\n productsThatShouldValidateInventory.push(foundProductAvailability);\r\n }\r\n }\r\n });\r\n\r\n const cartLinesInventoryValidation = validateCartLinesInventory(\r\n cart.CartLines ?? [],\r\n productsThatShouldValidateInventory,\r\n this.props.context.actionContext,\r\n products,\r\n emailDeliveryModeCode\r\n );\r\n\r\n // If is invalid then exceeds the available quantity\r\n isOverMaxQuantity = !cartLinesInventoryValidation.isValid;\r\n return isOverMaxQuantity;\r\n })\r\n .catch(error => {\r\n this.props.context.actionContext.telemetry.exception(error);\r\n throw new Error('[getAvailabilitiesForCartLineItems] Unable to get availabilities for products in checkout cart');\r\n });\r\n\r\n return isOverMaxQuantity;\r\n };\r\n\r\n /**\r\n * Gets active child in module state.\r\n * @returns - The module state manager collection.\r\n */\r\n private readonly getActiveChildModuleStates = (): IModuleStateManager[] => {\r\n const { childIds, getModule } = this.props.moduleState;\r\n return childIds\r\n .map(getModule)\r\n .filter((state): state is IModuleStateManager => !!state && !state.isDisabled && state.hasModuleState);\r\n };\r\n\r\n /**\r\n * On container ready.\r\n */\r\n private readonly onContainerReady = (): void => {\r\n this.props.telemetry.information('Checkout onContainerReady is called.');\r\n\r\n this.getActiveChildModuleStates().forEach(state => {\r\n state.isReady && state.onContainerReady && state.onContainerReady();\r\n });\r\n };\r\n\r\n /**\r\n * Redirects to cart page.\r\n * @param notFoundEditCartLinkMessage - Not found edit cart link message.\r\n */\r\n private readonly redirectToCartPage = (notFoundEditCartLinkMessage: string): void => {\r\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\r\n if (window && editCartLink) {\r\n window.location.assign(editCartLink);\r\n } else {\r\n this.setState({\r\n errorMessage: this.props.resources.genericErrorMessage\r\n });\r\n this.props.context.telemetry.error(notFoundEditCartLinkMessage);\r\n }\r\n };\r\n\r\n /**\r\n * Validates for checkout.\r\n * @param retry - Retry flag.\r\n */\r\n private readonly validateForCheckout = (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 @action\r\n private readonly _setErrorMessage = (errorMessage: string): void => {\r\n this.props.telemetry.error(errorMessage);\r\n this.props.moduleState.setHasError(true);\r\n this.props.moduleState.onUpdating();\r\n this.setState({\r\n errorMessage\r\n });\r\n };\r\n}\r\n\r\nexport default Checkout;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { 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 './absolute-layer-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) => {\r\n return new Promise(async (resolve: () => void, reject: (reason?: Error) => void) => {\r\n ctx.telemetry.information('Checkout place-order method is triggered.');\r\n\r\n let salesOrder: SalesOrder;\r\n\r\n // Proceed checkout\r\n try {\r\n salesOrder = await 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 ctx.telemetry.information('Checkout emptyActiveCart is called.');\r\n await emptyActiveCart(ctx);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n if (redirect) {\r\n ctx.telemetry.information('Redirect to order confirmation page.');\r\n\r\n // Redirect to the order confirmation page\r\n const orderConfirmationUrl = getUrlSync('orderConfirmation', ctx) || '';\r\n if (!orderConfirmationUrl) {\r\n reject(new Error('Error: No orderConfirmationUrl'));\r\n return;\r\n }\r\n\r\n const separator = orderConfirmationUrl.includes('?') ? '&' : '?';\r\n const url = `${orderConfirmationUrl}${separator}transactionId=${salesOrder.Id}`;\r\n window.location.assign(url);\r\n } else {\r\n ctx.telemetry.information('Not redirect to order confirmation page.');\r\n\r\n if (checkoutState) {\r\n const result = await checkoutState.updateSalesOrder({\r\n newSalesOrder: salesOrder,\r\n newOrderedProducts: orderedProducts || []\r\n });\r\n\r\n if (result.status === 'FAILED') {\r\n reject(new Error('Error: Updating error state failed'));\r\n return;\r\n }\r\n } else {\r\n reject(new Error('Error: No checkout state'));\r\n return;\r\n }\r\n resolve();\r\n }\r\n });\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Node} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from './absolute-layer-checkout';\r\nimport { IEmailDelivery } from './components';\r\nimport { IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\r\n\r\nexport const LineItemComponent: React.FC = ({ item }) => (\r\n <>\r\n {item}\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ lineItems }) => (\r\n \r\n \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 itemsForPickup,\r\n itemsForShip,\r\n itemsForEmail,\r\n itemsGroupWithMulitplePickupMode\r\n}) => (\r\n <>\r\n \r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\r\n {itemsGroupWithMulitplePickupMode !== undefined\r\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\r\n return ;\r\n })\r\n : null}\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ lines }) => (\r\n \r\n <>\r\n {lines && (\r\n <>\r\n 'event': 'begin_checkout',\r\n {lines.giftCard}\r\n 'currency': 'USD',\r\n {lines.orderTotal}\r\n \r\n \r\n )}\r\n \r\n \r\n);\r\n\r\nconst 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 \r\n \r\n hasInvoiceLine,\r\n orderSummary,\r\n invoicePaymentSummary,\r\n lineItems,\r\n } = props;\r\n\r\n const scriptHtmlStart = `window.dataLayer.push({`;\r\n \r\n const scriptHtmlEnd = `});`;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IComponentProps, IGridSettings, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n//import { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\n//import classNames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n//import { PriceComponent } from './price.components';\r\nimport { \r\n //CartLinePriceEditor, \r\n ICartLinePriceEditorResources } from './cart-line-price-editor';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n /**\r\n * Display string for discount label.\r\n */\r\n discountStringText: string;\r\n\r\n /**\r\n * String for size key.\r\n */\r\n sizeString: string;\r\n\r\n /**\r\n * String for color key.\r\n */\r\n colorString: string;\r\n\r\n /**\r\n * String associated with the configuration product dimension.\r\n */\r\n configString: string;\r\n\r\n /**\r\n * String for style key.\r\n */\r\n styleString: string;\r\n\r\n /**\r\n * String for amount key.\r\n */\r\n amountString?: string;\r\n\r\n /**\r\n * Display string for quantity label.\r\n */\r\n quantityDisplayString: string;\r\n\r\n /**\r\n * Display string for quantity label.\r\n */\r\n inputQuantityAriaLabel: string;\r\n\r\n /**\r\n * Aria label for the decrement button in quantity component.\r\n */\r\n decrementButtonAriaLabel?: string;\r\n\r\n /**\r\n * Aria label for the increment button in quantity component.\r\n */\r\n incrementButtonAriaLabel?: string;\r\n\r\n /**\r\n * Original text screen reader.\r\n */\r\n originalPriceText: string;\r\n\r\n /**\r\n * Current text screen reader.\r\n */\r\n currentPriceText: string;\r\n\r\n /**\r\n * Shipping Charges Text.\r\n */\r\n shippingChargesText: string;\r\n\r\n priceEditorResources?: ICartLinePriceEditorResources;\r\n\r\n /**\r\n * Sales agreement price prompt text.\r\n */\r\n salesAgreementPricePrompt?: string;\r\n\r\n /**\r\n * Shipping text.\r\n */\r\n shippingText?: string;\r\n}\r\n\r\n/**\r\n * The data about the cart line and products.\r\n */\r\nexport interface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n cartState?: ICartState;\r\n product?: SimpleProduct;\r\n catalogs?: ProductCatalog[];\r\n}\r\n\r\nexport type CartLineDisplayMode = 'DEFAULT' | 'COMPACT';\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n /**\r\n * The flag to change the quantity component from interactivity to static.\r\n */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /**\r\n * The primary image url.\r\n */\r\n //primaryImageUrl?: string;\r\n\r\n /**\r\n * The product url.\r\n */\r\n //productUrl?: string;\r\n\r\n /**\r\n * GridSettings for the product image in cartLine.\r\n */\r\n gridSettings: IGridSettings;\r\n\r\n /**\r\n * ImageSettings for the product image in cartLine.\r\n */\r\n //imageSettings: IImageSettings;\r\n\r\n /**\r\n * Boolean flag to indicate if the item is out of stock.\r\n */\r\n isOutOfStock?: boolean;\r\n\r\n /**\r\n * Flag to make quantity section editable.\r\n */\r\n isQuantityEditable?: boolean;\r\n\r\n /**\r\n * Max quantity for line item.\r\n */\r\n maxQuantity?: number;\r\n\r\n /**\r\n * Current quantity for line item.\r\n */\r\n currentQuantity?: number;\r\n\r\n /**\r\n * Resource string for the component.\r\n */\r\n resources: ICartlineResourceString;\r\n\r\n /**\r\n * SalesLine flag.\r\n */\r\n isSalesLine?: boolean;\r\n\r\n /**\r\n * Error message to show in place of quantity.\r\n */\r\n errorMessage?: string;\r\n\r\n /**\r\n * Display mode to use.\r\n */\r\n displayMode?: CartLineDisplayMode;\r\n\r\n /**\r\n * Inventory information label.\r\n */\r\n inventoryInformationLabel?: string;\r\n\r\n /**\r\n * Inventory information class name.\r\n */\r\n inventoryLabelClassName?: string;\r\n\r\n /**\r\n * Flag to show/hide shipping charges for line items.\r\n */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /**\r\n * Boolean flag to indicate if cart state status is ready.\r\n */\r\n isCartStateReady?: boolean;\r\n\r\n /**\r\n * Chanel Delivery Option configuration is from api.\r\n */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /**\r\n * The telemetry content.\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /**\r\n * The cart line index.\r\n */\r\n lineIndex?: number;\r\n\r\n /**\r\n * The cart line delivery location.\r\n */\r\n deliveryLocation?: string;\r\n\r\n /**\r\n * Quantity onChange callback.\r\n */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): void;\r\n}\r\n\r\n\r\n\r\n\r\n// eslint-disable-next-line no-redeclare\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { product } = props.data;\r\n\r\n \r\n const productName = product?.Name;\r\n const productId = product?.ItemId;\r\n const productNewPrice = product?.Price;\r\n \r\n \r\n return (\r\n <>\r\n \r\n 'item_id': {productId},\r\n 'item_name': {productName},\r\n 'item_brand': 'Absolute Outdoors',\r\n 'price': {productNewPrice},\r\n 'quantity': {props.data.cartLine.Quantity},\r\n \r\n \r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const CartLineItemComponentNick: React.FunctionComponent = msdyn365Commerce.createComponent('CartLineItem', {\r\n component: CartLine,\r\n //...CartLineItemFunctions\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 { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { CartLine, OrgUnitLocation, ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface IPickUpInStoreViewProps {\r\n callbacks: {\r\n toggleBopis(isBopisSelected: boolean): void;\r\n };\r\n defaultComponent?: React.ReactNode;\r\n orgUnitName?: string;\r\n isBopisSelected: boolean;\r\n ContainerProps: INodeProps;\r\n deliveryOption?: string;\r\n}\r\n\r\nexport interface IPickUpInStoreProps {\r\n cartline: CartLine;\r\n product: SimpleProduct;\r\n shipitText: string;\r\n pickUpInStoreText: string;\r\n changeStoreText: string;\r\n cartState: ICartState | undefined;\r\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\r\n orgUnitLocations?: OrgUnitLocation[] | undefined;\r\n deliveryOptions?: ProductDeliveryOptions;\r\n pickupDeliveryModeCode?: string;\r\n storeSelectorModuleId?: string;\r\n locationChangedHandler(): void;\r\n}\r\n\r\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\r\n const _onLocationChangedCallback = async (orgUnitLocation: OrgUnitLocation, cartState: ICartState | undefined, cartline: CartLine, deliveryMode?: string) => {\r\n if (!cartState) {\r\n return Promise.resolve();\r\n }\r\n return cartState.updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n props.locationChangedHandler();\r\n }\r\n })\r\n .catch(error => {});\r\n };\r\n\r\n const _toggleBOPIS = (isBopisSelected: boolean) => {\r\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\r\n\r\n if (isBopisSelected) {\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n storeSelectorStateManager.openDialog({\r\n id: storeSelectorModuleId,\r\n product,\r\n alreadySelectedLocation: {\r\n OrgUnitNumber: cartline.FulfillmentStoreId\r\n },\r\n deliveryOptions: props.deliveryOptions,\r\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\r\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\r\n }\r\n })\r\n .catch(error => {});\r\n } else {\r\n if (!cartState) {\r\n return;\r\n }\r\n cartline.DeliveryMode = '';\r\n cartline.FulfillmentStoreId = '';\r\n cartline.ShippingAddress = {};\r\n cartState.clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n props.locationChangedHandler();\r\n }\r\n })\r\n .catch(error => {});\r\n }\r\n };\r\n\r\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\r\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\r\n return '';\r\n }\r\n\r\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\r\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\r\n });\r\n\r\n if (foundLocation) {\r\n return foundLocation.OrgUnitName;\r\n }\r\n return fulfillmentStoreId;\r\n\r\n };\r\n\r\n const _renderShippingMethod = (\r\n cartLine: CartLine,\r\n shipItText: string,\r\n pickupInStoretext: string,\r\n changeStoreText: string,\r\n orgUnitLocations: OrgUnitLocation[] | undefined): JSX.Element => {\r\n\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\r\n const bopisSelected = !!cartLine.FulfillmentStoreId;\r\n\r\n const toggleBOPIS = (isBopisSelected: boolean) => {\r\n return () => {\r\n _toggleBOPIS(isBopisSelected);\r\n };\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {\r\n cartLine.FulfillmentStoreId ? (\r\n
\r\n \r\n {orgUnitName}\r\n \r\n \r\n
\r\n ) : null\r\n }\r\n \r\n );\r\n };\r\n\r\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\r\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\r\n return delivery?.Description;\r\n };\r\n\r\n // If no delivery options present on the product, or none of the delivery options\r\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\r\n if (!props.deliveryOptions ||\r\n !props.deliveryOptions.DeliveryOptions ||\r\n !props.pickupDeliveryModeCode ||\r\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n callbacks: {\r\n toggleBopis: _toggleBOPIS\r\n },\r\n defaultComponent: _renderShippingMethod(props.cartline, props.shipitText, props.pickUpInStoreText, props.changeStoreText, props.orgUnitLocations),\r\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\r\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\r\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\r\n ContainerProps: {\r\n className: 'msc-cart-line__bopis-container'\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 {\r\n AddToOrderTemplateComponent, AddToWishlistComponent, CartLineItemComponent,\r\n IAddToOrderTemplateDialogResources, ICartlineResourceString, IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources, IOrderTemplateNameDialogResources, IWishlistActionSuccessResult } from '@msdyn365-commerce/components';\r\nimport { IAny, ICoreContext, IGeneric, IGridSettings, IImageSettings, ITelemetry, TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n CommerceList,\r\n Customer,\r\n LineDataValidationFailure,\r\n OrgUnitLocation,\r\n ProductDeliveryOptions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n ArrayExtensions,\r\n getInvoiceDetailsPageUrlSync,\r\n getProductUrlSync,\r\n IProductInventoryInformation,\r\n ObjectExtensions,\r\n OrderTemplate\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { getProductByProductId } from '@msdyn365-commerce-modules/cart';\r\nimport { IPickUpInStoreViewProps, PickUpInStore } from './arborb2b-cart-pick-up-in-store';\r\n\r\nexport interface ICartLineItemsProps {\r\n cartlines: CartLine[];\r\n cartlinesErrors: LineDataValidationFailure[];\r\n cartState: ICartState | undefined;\r\n orgUnitLocations: OrgUnitLocation[] | undefined;\r\n resources: ICartlineResourceString;\r\n productAvailabilites: IProductInventoryInformation[] | undefined;\r\n products: SimpleProduct[] | undefined;\r\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\r\n pickupDeliveryModeCode?: string;\r\n\r\n /** GridSettings for the product image in cartline */\r\n gridSettings: IGridSettings;\r\n\r\n /** ImageSettings for the product image in cartline */\r\n imageSettings: IImageSettings;\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext>;\r\n telemetry: ITelemetry;\r\n removeButtonText: string;\r\n addToWishlistButtonText: string;\r\n removeFromWishlistButtonText: string;\r\n shipItText: string;\r\n pickitUpText: string;\r\n changeStoreText: string;\r\n outOfStockText: string;\r\n outOfRangeOneText: string;\r\n outOfRangeFormatText: string;\r\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\r\n isStockCheckEnabled: boolean;\r\n wishlists: CommerceList[] | undefined;\r\n defaultWishlistName: string;\r\n maxCartlineQuantity: number;\r\n includeErrors?: boolean;\r\n showShippingChargesForLineItems?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n isQuantityLimitsFeatureEnabled: boolean;\r\n storeSelectorModuleId?: string;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\r\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\r\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\r\n\r\n addToOrderTemplateButtonText: string;\r\n addToOrderTemplateButtonTooltip: string;\r\n addToOrderTemplateMessage: string;\r\n addItemToOrderTemplateError: string;\r\n orderTemplates: OrderTemplate[] | undefined;\r\n customerInformation: Customer | undefined;\r\n shouldIgnoreWarehouse: boolean | undefined;\r\n\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\r\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number): boolean;\r\n locationChangedHandler(): void;\r\n}\r\n\r\nexport interface ICartlinesViewProps {\r\n cartline: React.ReactNode;\r\n pickUpInStore?: IPickUpInStoreViewProps;\r\n remove: React.ReactNode;\r\n addToWishlist: React.ReactNode | undefined;\r\n addToOrderTemplate: React.ReactNode | undefined;\r\n\r\n error?: string;\r\n cartlineId?: string;\r\n data?: {\r\n product?: SimpleProduct;\r\n cartline: CartLine;\r\n };\r\n}\r\n\r\nconst _getCartItemAvailableQuantity = (isStockCheckEnabled: boolean, productAvailability: IProductInventoryInformation | undefined): number => {\r\n if (!isStockCheckEnabled ||\r\n !productAvailability ||\r\n !productAvailability.ProductAvailableQuantity ||\r\n !productAvailability.IsProductAvailable ||\r\n !productAvailability.ProductAvailableQuantity.AvailableQuantity) {\r\n return 0;\r\n }\r\n\r\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\r\n};\r\n\r\nconst _getCartItemMaxQuantity = (\r\n maxQuantityByConfig: number,\r\n isStockCheckEnabled: boolean,\r\n availableQuantityInStock: number,\r\n isQuantityLimitsFeatureEnabled: boolean,\r\n maxByQuantityLimitsFeature: number) => {\r\n if (isQuantityLimitsFeatureEnabled) {\r\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\r\n\r\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\r\n // and consider available qty if stock check enabled and max from config in site settings.\r\n if (!maxByQuantityLimitsFeature) {\r\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\r\n }\r\n\r\n return isStockCheckEnabled ? (maxByQuantityLimitsFeatureResult < availableQuantityInStock ? maxByQuantityLimitsFeatureResult : availableQuantityInStock) : maxByQuantityLimitsFeatureResult;\r\n }\r\n if (isStockCheckEnabled) {\r\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\r\n }\r\n return maxQuantityByConfig;\r\n\r\n};\r\n\r\nconst _getErrorMessage = (availableQuantityInStock: number, currentQuantity: number, props: ICartLineItemsProps, lineIndex: number, isServiceItem: boolean): string | undefined => {\r\n const finalErrorMessages: string[] = [];\r\n if (props.includeErrors) {\r\n if (props.isStockCheckEnabled && !isServiceItem) {\r\n if (availableQuantityInStock <= 0) {\r\n finalErrorMessages.push(props.outOfStockText);\r\n } else if (availableQuantityInStock < currentQuantity) {\r\n if (availableQuantityInStock === 1) {\r\n finalErrorMessages.push(props.outOfRangeOneText);\r\n } else {\r\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Server-side validation\r\n props.cartlinesErrors\r\n .filter(i => i.LineIndex === lineIndex)\r\n .forEach(i => {\r\n if (i.DataValidationFailure?.ErrorContext) {\r\n finalErrorMessages.push(i.DataValidationFailure.ErrorContext);\r\n }\r\n });\r\n\r\n if (finalErrorMessages.length > 0) {\r\n return finalErrorMessages.join(' ');\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * On Remove Click functionality.\r\n * @param removeItemClickHandler -Remove item click function.\r\n * @param cartline -CartLine.\r\n * @returns Remove change value.\r\n */\r\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\r\n removeItemClickHandler(cartline);\r\n};\r\n\r\n// eslint-disable-next-line complexity -- Auto-suppressed.\r\nconst _assembleNode = (\r\n cartline: CartLine,\r\n product: SimpleProduct | undefined,\r\n props: ICartLineItemsProps,\r\n index: number,\r\n foundProductAvailability?: IProductInventoryInformation,\r\n foundProductDeliveryOptions?: ProductDeliveryOptions): ICartlinesViewProps => {\r\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText,\r\n removeItemClickHandler, moveToWishlistSuccessHandler, addToOrderTemplateButtonText, addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateDialogResources, createOrderTemplateDialogResources,\r\n itemAddedToOrderTemplateDialogResources, duplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n addToWishlistButtonText, removeFromWishlistButtonText, orderTemplates, customerInformation,\r\n wishlists, defaultWishlistName, storeSelectorModuleId } = props;\r\n\r\n const isAuthenticated = context.request.user.isAuthenticated;\r\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\r\n\r\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\r\n\r\n const maxQuantity = product && _getCartItemMaxQuantity(\r\n props.maxCartlineQuantity,\r\n props.isStockCheckEnabled,\r\n availableQuantityInStock,\r\n props.isQuantityLimitsFeatureEnabled,\r\n product?.Behavior?.MaximumQuantity || 0);\r\n\r\n // Check if the product is service or not by product type\r\n const isServiceItem = product?.ItemTypeValue === ReleasedProductType.Service;\r\n\r\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity) ? undefined : _getErrorMessage(availableQuantityInStock, cartline.Quantity!, props, index, isServiceItem);\r\n\r\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\r\n\r\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n\r\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\r\n const inventoryCode = foundProductAvailability ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}` : undefined;\r\n const productDimension = 4;\r\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\r\n const isCustomPriceSelected = product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value === 'Custom';\r\n\r\n return {\r\n data: {\r\n product,\r\n cartline\r\n },\r\n cartlineId: cartline.LineId,\r\n error: errorMessage,\r\n cartline: (\r\n ),\r\n pickUpInStore: product ? (\r\n PickUpInStore({\r\n storeSelectorModuleId,\r\n cartState: props.cartState,\r\n cartline,\r\n product,\r\n shipitText: props.shipItText,\r\n pickUpInStoreText: props.pickitUpText,\r\n changeStoreText: props.changeStoreText,\r\n storeSelectorStateManager: props.storeSelectorStateManager,\r\n orgUnitLocations: props.orgUnitLocations,\r\n deliveryOptions: foundProductDeliveryOptions,\r\n pickupDeliveryModeCode: cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\r\n locationChangedHandler: props.locationChangedHandler\r\n })\r\n ) : undefined,\r\n remove: (\r\n \r\n {removeButtonText}\r\n \r\n ),\r\n addToWishlist: (\r\n isAuthenticated && product && !isCustomPriceSelected ? (\r\n \r\n ) : undefined\r\n ),\r\n addToOrderTemplate: (\r\n isAuthenticated && orderTemplates && product ? (\r\n \r\n ) : undefined\r\n )\r\n };\r\n};\r\n\r\nexport const assembleCartlines = (\r\n cartlines: CartLine[],\r\n products: SimpleProduct[] | undefined,\r\n props: ICartLineItemsProps): ICartlinesViewProps[] | null => {\r\n const reactNodes: ICartlinesViewProps[] = [];\r\n\r\n cartlines.map((cartline, index) => {\r\n const product = getProductByProductId(cartline.ProductId, products);\r\n\r\n let foundProductAvailability;\r\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\r\n foundProductAvailability = props.productAvailabilites.find((productAvailability) => {\r\n if (props.shouldIgnoreWarehouse) {\r\n return productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId;\r\n }\r\n return productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\r\n productAvailability.InventLocationId === cartline.WarehouseId;\r\n });\r\n }\r\n let foundProductDeliveryOption;\r\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\r\n foundProductDeliveryOption = props.productDeliveryOptions.find((deliveryOption) => {\r\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\r\n });\r\n }\r\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, foundProductDeliveryOption));\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLineItems component.\r\n * @param props\r\n */\r\nexport const CartLineItems = (props: ICartLineItemsProps) => {\r\n const { products, cartlines } = props;\r\n return (\r\n assembleCartlines(cartlines, products, props)\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 { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport groupBy from 'lodash/groupBy';\r\n\r\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './arborb2b-cart-line-items';\r\n\r\nconst _assembleGroupCartlines = (cartlines: CartLine[], products: SimpleProduct[] | undefined, props: ICartLineItemsProps): ICartlinesViewProps[][] | null => {\r\n const reactNodes: ICartlinesViewProps[][] = [];\r\n if (!products || products.length === 0) {\r\n props.context.telemetry.error('Products content is empty, module wont render');\r\n return null;\r\n }\r\n\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(cartlines);\r\n const cartLinesGroup: CartLine[] = [];\r\n\r\n // 1) Group by store and pick up mode\r\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\r\n // @ts-expect-error\r\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\r\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\r\n });\r\n\r\n // 2) Create cartlines group\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 const carLineViewProps = assembleCartlines(cartLine, products, props);\r\n if (carLineViewProps !== null) {\r\n reactNodes.push(carLineViewProps);\r\n }\r\n });\r\n\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLine Group component.\r\n * @param props\r\n */\r\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\r\n const { products, cartlines } = props;\r\n return (\r\n _assembleGroupCartlines(cartlines, products, props)\r\n );\r\n};\r\n","/* eslint-disable prettier/prettier */\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 { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * IPromotionData entity interface.\r\n */\r\nexport interface IPromotionData {\r\n promotionOptions?: CartPromotionLine[];\r\n}\r\n\r\n/**\r\n * Calls the Retail API and returns a promotion data.\r\n * @param ctx\r\n */\r\nexport async function getPromotionData(ctx: IActionContext): Promise {\r\n const promotionData: IPromotionData = {};\r\n\r\n await getPromotionOptionsForCartLineItems(\r\n new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings),\r\n ctx\r\n ).then(promotionOptions => {\r\n if (promotionOptions) {\r\n promotionData.promotionOptions = promotionOptions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n return {};\r\n });\r\n\r\n return promotionData;\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 {\r\n IAddToOrderTemplateDialogResources, IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources, ILinesAddedToOrderTemplateDialogResources, IOrderTemplateNameDialogResources,\r\n IWishlistActionSuccessResult, PromoCodeComponent, SaveCartToOrderTemplateComponent } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { AsyncResult, CartLine, LineDataValidationFailure, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { AttributeValueBase, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { isCartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ActiveCartProductsInput, ArrayExtensions, getActiveCartProductsAction, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Alert, Button, getPayloadObject, getTelemetryAttributes, getTelemetryObject, INodeProps, IPayLoad,\r\n ITelemetryContent, TelemetryConstant, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\n\r\nimport { IArborb2BCartData } from './arborb2b-cart.data';\r\nimport { IArborb2bCartProps, IArborb2bCartResources } from './arborb2b-cart.props.autogenerated';\r\nimport { CartLineGroupItems } from './components/arborb2b-cart-line-groups';\r\nimport { CartLineItems, ICartlinesViewProps } from './components/arborb2b-cart-line-items';\r\nimport { cartPromotions, ICartLineItemViewProps } from './components/arborb2b-cart-line-items-promotion';\r\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-arborb2b-cart';\r\nimport { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ApplicableOperationsDataActions.g';\r\n\r\nexport interface ICartViewProps extends IArborb2bCartProps {\r\n className: string;\r\n title?: React.ReactNode;\r\n CartlinesWrapper: INodeProps;\r\n cartlines?: ICartlinesViewProps[];\r\n cartLinesGroup?: ICartlinesViewProps[][];\r\n cart: ICartState | undefined;\r\n orderSummaryHeading: React.ReactNode;\r\n orderSummaryLineitems?: IOrderSummaryLines;\r\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\r\n OrderSummaryWrapper: INodeProps;\r\n OrderSummaryItems: INodeProps;\r\n OrderSummaryErrors?: IOrderSummaryErrors;\r\n checkoutAsGuestButton: React.ReactNode;\r\n checkoutAsSignInUserButton: React.ReactNode;\r\n storeSelector?: React.ReactNode;\r\n backToShoppingButton: React.ReactNode;\r\n waitingComponent: React.ReactNode;\r\n promotionOptions?: ICartLineItemViewProps;\r\n promoCode: React.ReactNode;\r\n cartLoadingStatus: string;\r\n cartDataResult: boolean;\r\n multiplePickUpEnabled?: boolean;\r\n createTemplateFromCartButton: React.ReactNode;\r\n telemetryContent?: ITelemetryContent;\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\r\n}\r\n\r\nexport interface IOrderSummaryErrors {\r\n Wrapper: INodeProps;\r\n\r\n header: React.ReactNode;\r\n errors: React.ReactNode[];\r\n}\r\n\r\ninterface ICartComponentState {\r\n showPromotionDialog: boolean;\r\n cartlinesErrors: LineDataValidationFailure[];\r\n promotionData: IPromotionData;\r\n products: SimpleProduct[];\r\n}\r\n\r\n/**\r\n *\r\n * Cart component.\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nclass Cart extends React.Component> {\r\n\r\n public state: ICartComponentState = {\r\n cartlinesErrors: [],\r\n showPromotionDialog: false,\r\n promotionData: {},\r\n products: []\r\n };\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private isQuantityLimitsFeatureEnabled: boolean = false;\r\n\r\n private _isMounted: boolean = false;\r\n\r\n private readonly promotionPopupId: string = 'cart-promotion-popup';\r\n AttributeValues: AttributeValueBase[] | undefined;\r\n\r\n constructor(props: IArborb2bCartProps) {\r\n super(props);\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\r\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\r\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n this._isMounted = true;\r\n const {\r\n config,\r\n context: {\r\n actionContext\r\n }\r\n } = this.props;\r\n\r\n this.isQuantityLimitsFeatureEnabled = await this._getOrderQuantityLimitsFeatureFlag();\r\n if (this.isQuantityLimitsFeatureEnabled) {\r\n await this._validateCart();\r\n }\r\n\r\n try {\r\n const products = await this.props.data.products;\r\n if (this._isMounted) {\r\n this.setState({ products });\r\n }\r\n } catch (error) {\r\n //@ts-ignore\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to get cart');\r\n }\r\n\r\n if (config.showAvailablePromotions) {\r\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\r\n this.setState({ promotionData: await getPromotionData(actionContext) });\r\n }\r\n\r\n reaction(\r\n () => this.props.data.cart.result?.cart.CartLines,\r\n async () => {\r\n if (this._isMounted) {\r\n this.setState({ promotionData: await getPromotionData(actionContext) });\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n this._isMounted = false;\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IArborb2bCartProps,\r\n nextState: ICartComponentState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public _addOrUpdateSalesOrderAttributes = (cart: Cart): void => {\r\n // Create the array of attribute and add attributes\r\n const attributeArr: AttributeValueBase[] = [];\r\n let attributeObj = {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.AttributeTextValue',\r\n Name: 'Brand',\r\n ExtensionProperties: [],\r\n TextValue: 'OscarBrand-2',\r\n TextValueTranslations: []\r\n };\r\n attributeObj.Name = 'Brand';\r\n attributeArr.push(attributeObj);\r\n \r\n attributeObj = {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.AttributeTextValue',\r\n Name: 'Connector',\r\n ExtensionProperties: [],\r\n TextValue: 'OscarConnector-2',\r\n TextValueTranslations: []\r\n };\r\n attributeObj.Name = 'Connector';\r\n attributeArr.push(attributeObj);\r\n \r\n cart.AttributeValues = attributeArr;\r\n //@ts-ignore\r\n updateAsync({ callerContext: this.props.context.actionContext}, cart)\r\n .then(newCart => {\r\n console.log('Success');\r\n //@ts-ignore\r\n this.props.context.actionContext.update(new GetCheckoutCartInput(this.props.context.request.apiSettings), newCart);\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n products: { result: products }\r\n },\r\n context: {\r\n request: {\r\n user: {\r\n isAuthenticated,\r\n signInUrl\r\n }\r\n }\r\n },\r\n resources\r\n } = this.props;\r\n\r\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\r\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\r\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\r\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\r\n const cartLines = this._getCartLines();\r\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature');\r\n const multiplePickUpEnabled = !cart?.hasInvoiceLine && RetailMultiplePickupFeatureState?.IsEnabled;\r\n const cartLinesGroup = multiplePickUpEnabled ? this._getCartLinesGroup() : null;\r\n\r\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\r\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\r\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\r\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n const hasErrors = cartLines ? cartLines.some(cartline => cartline.error !== undefined) : false;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n className: classnames('ms-cart'),\r\n title:

\r\n {resources.cartTitle}\r\n

,\r\n cart: this.props.data.cart.result,\r\n CartlinesWrapper: { className: 'msc-cartline-wraper' },\r\n OrderSummaryWrapper: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary-wrapper' : 'msc-order-summary-wrapper' },\r\n OrderSummaryItems: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary__items' : 'msc-order-summary__items' },\r\n cartlines: cartLines,\r\n cartLinesGroup,\r\n promoCode: this._getPromoCode(),\r\n promotionOptions: this._getPromotions(),\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n telemetry: this.props.telemetry,\r\n id: this.props.id,\r\n multiplePickUpEnabled,\r\n removePromoAriaLabelFormat: resources.removePromoAriaLabelFormat,\r\n orderSummaryHeading: ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\r\n cart?.hasInvoiceLine ?

\r\n { resources.invoiceSummaryTitle }\r\n

:

\r\n { resources.orderSummaryTitle}\r\n

\r\n ) : null,\r\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\r\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\r\n checkoutAsSignInUserButton: (!isCartEmpty) ? (\r\n \r\n {resources.checkoutButtonTitle}\r\n \r\n ) : null,\r\n checkoutAsGuestButton: (!isCartEmpty && !isAuthenticated) ? (\r\n \r\n {resources.guestCheckoutButtonTitle}\r\n \r\n ) : null,\r\n backToShoppingButton: \r\n {resources.backToShoppingButtonTitle}\r\n ,\r\n createTemplateFromCartButton: (this._displayAddCartToTemplate() && products) ? (\r\n \r\n ) : null,\r\n storeSelector: this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\r\n removeItemClickHandler: this._removeItemFromCartHandler,\r\n moveToWishlistSuccessHandler: this._moveToWishlistSuccessHandler,\r\n waitingComponent: ,\r\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\r\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\r\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\r\n telemetryContent: this.telemetryContent\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\r\n this.setState({\r\n showPromotionDialog: !this.state.showPromotionDialog\r\n });\r\n };\r\n\r\n private readonly promotionCloseButtonclick = () => {\r\n this._hidePromotionDialog();\r\n };\r\n\r\n private _hidePromotionDialog(): void {\r\n this.setState({\r\n showPromotionDialog: false\r\n });\r\n }\r\n\r\n private _displayAddCartToTemplate(): boolean {\r\n const cart = this.props.data.cart?.result;\r\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\r\n return false;\r\n }\r\n\r\n const RetailB2BEcommerceFeatureState = this.props.data.featureState.result?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailB2BEcommerceFeature');\r\n if (RetailB2BEcommerceFeatureState?.IsEnabled && this.props.data.customerInformation.result?.IsB2b && this.props.data.orderTemplates.result &&\r\n ArrayExtensions.hasElements(cart.cart?.CartLines) && this.props.data.customerInformation.result) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _getPromotions(): React.ReactNode {\r\n return (\r\n this.props.config.showAvailablePromotions &&\r\n cartPromotions({\r\n id: this.promotionPopupId,\r\n showPromotionPopup: this.state.showPromotionDialog,\r\n onSeeAllClick: this.promotionLinkClick,\r\n onCloseButtonClick: this.promotionCloseButtonclick,\r\n promotions: this.state.promotionData.promotionOptions,\r\n resources: {\r\n promotionStringHeading: this.props.resources.promotionStringHeading,\r\n promotionLinkText: this.props.resources.promotionLinkText,\r\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\r\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\r\n }\r\n })\r\n );\r\n }\r\n\r\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\r\n const allErrors = cartLines && cartLines.map(cartline => {\r\n\r\n // Check if the product is service or not by product type\r\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\r\n\r\n if (!isServiceItem && cartline.error) {\r\n const fullError = (cartline.data && cartline.data.product?.Name) ? `${cartline.data.product.Name}: ${cartline.error}` : cartline.error;\r\n\r\n return (\r\n
\r\n {fullError}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n }).filter((line): line is JSX.Element => !!line) || [];\r\n\r\n return {\r\n Wrapper: {\r\n tag: Alert,\r\n className: 'msc-alert',\r\n isOpen: allErrors.length > 0,\r\n color: 'danger',\r\n assertive: true,\r\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\r\n },\r\n header: (\r\n \r\n ),\r\n errors: allErrors\r\n };\r\n }\r\n\r\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\r\n const {\r\n data: {\r\n cart: { result: cart }\r\n },\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n return cart?.hasInvoiceLine ? (\r\n InvoiceSummary({\r\n orderTotalLabel: resources.totalAmountLabel,\r\n invoiceLabel: resources.invoiceLabel,\r\n cart: cart.cart,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n telemetry,\r\n id: this.props.id\r\n })\r\n ) : undefined;\r\n }\r\n\r\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n channelDeliveryOptionConfig\r\n },\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const featureState = this.props?.data?.featureState;\r\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)?.IsEnabled;\r\n\r\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine ? (\r\n OrderSummary({\r\n cart: cart!.cart,\r\n subTotalLabel: resources.itemsWithCountLabel,\r\n shippingLabel: resources.estimatedShippingLabel,\r\n otherChargeLabel: resources.otherCharges,\r\n taxLabel: resources.estimatedTaxLabel,\r\n orderTotalLabel: resources.orderTotal,\r\n totalDiscountsLabel: resources.totalDiscountsLabel,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n toBeCalculatedText: resources.yetToBeCalculatedText,\r\n freeText: resources.priceFree,\r\n channelConfiguration,\r\n retailMultiplePickUpOptionEnabled,\r\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\r\n telemetry\r\n })\r\n ) : undefined;\r\n }\r\n\r\n private _getPromoCode(): React.ReactNode {\r\n const {\r\n data: {\r\n cart: { result: cart }\r\n },\r\n resources\r\n } = this.props;\r\n\r\n return cart && (\r\n \r\n );\r\n }\r\n\r\n private _generateAddToOrderTemplateDialogResources(resources: IArborb2bCartResources): IAddToOrderTemplateDialogResources {\r\n return {\r\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n\r\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n\r\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n\r\n selectTemplatesText: resources.selectTemplatesText,\r\n addToTemplateButtonText: resources.addToTemplateButtonText,\r\n lineItemsText: resources.lineItemsText\r\n };\r\n }\r\n\r\n private _generateItemAddedToOrderTemplateDialogResources(resources: IArborb2bCartResources): IItemAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\r\n freePriceText: resources.freePriceText,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText\r\n };\r\n }\r\n\r\n private _generateLinesAddedToOrderTemplateDialogResources(resources: IArborb2bCartResources): ILinesAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\r\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\r\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\r\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\r\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\r\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\r\n };\r\n }\r\n\r\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(resources: IArborb2bCartResources): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\r\n return {\r\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\r\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\r\n updateQuantityButtonText: resources.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\r\n };\r\n }\r\n\r\n private _generateOrderTemplateNameDialogResources(resources: IArborb2bCartResources): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: resources.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n };\r\n }\r\n\r\n private _getCartLines(): ICartlinesViewProps[] | null {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n wishlists: { result: wishlists },\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n context: {\r\n request: {\r\n channel: {\r\n PickupDeliveryModeCode\r\n } = { PickupDeliveryModeCode: undefined }\r\n }\r\n },\r\n config,\r\n telemetry,\r\n resources,\r\n modules\r\n } = this.props;\r\n\r\n const imageSettings = this._getImageSettings(config.imageSettings);\r\n\r\n const cartlinesErrors: LineDataValidationFailure[] = this.state.cartlinesErrors;\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n return ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\r\n CartLineItems({\r\n cartlines: cart!.cart.CartLines,\r\n storeSelectorModuleId: storeSelectorId,\r\n cartlinesErrors,\r\n products: this.state.products,\r\n productAvailabilites: this.props.data.productAvailabilites.result,\r\n productDeliveryOptions: this.props.data.deliveryOptions.result,\r\n imageSettings,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\r\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n amountString: resources.productDimensionTypeAmount,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\r\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\r\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\r\n discountStringText: resources.discountStringText,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n shippingChargesText: resources.shippingCharges\r\n },\r\n telemetry,\r\n addToWishlistButtonText: resources.addToWishlistButtonText,\r\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\r\n removeButtonText: resources.removeCartButtonText,\r\n shipItText: resources.shipInsteadDisplayText,\r\n pickitUpText: resources.pickItUpDisplayText,\r\n changeStoreText: resources.changeStoreDisplayText,\r\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\r\n outOfStockText: resources.outOfStockErrorMessage,\r\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\r\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\r\n cartState: this.props.data.cart.result,\r\n orgUnitLocations: this.props.data.orgUnitLocations.result,\r\n removeItemClickHandler: this._removeItemFromCartHandler,\r\n moveToWishlistSuccessHandler: this._moveToWishlistSuccessHandler,\r\n updateCartLinesQuantitySuccessHandler: this._updateCartlineQuantity,\r\n locationChangedHandler: this._fulfillmentStoreIdUpdated,\r\n wishlists,\r\n defaultWishlistName: resources.defaultWishlistName,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n includeErrors: config.showOutOfStockErrors,\r\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\r\n telemetryContent: this.telemetryContent,\r\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\r\n\r\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\r\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\r\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(resources),\r\n\r\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\r\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\r\n orderTemplates,\r\n customerInformation\r\n })\r\n ) : null;\r\n }\r\n\r\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\r\n if (isAuthenticated) {\r\n return guestCheckoutUrl;\r\n }\r\n\r\n const arborb2bUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n const isArborb2bUrl = arborb2bUrlRegExp.test(guestCheckoutUrl);\r\n let returnURL = guestCheckoutUrl;\r\n if (MsDyn365.isBrowser && !isArborb2bUrl) {\r\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\r\n }\r\n\r\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\r\n }\r\n\r\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\r\n return imageSettings || {\r\n viewports: {\r\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\r\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n };\r\n\r\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\r\n if (this.props.data.cart.result) {\r\n const input = {\r\n cartLineIds: [cartlineToRemove.LineId!.toString()]\r\n };\r\n this.props.data.cart.result.removeCartLines(input)\r\n .then(() => {\r\n this._validateCart()\r\n .catch((error) => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n });\r\n })\r\n .catch((error) => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to Remove Cart Line');\r\n });\r\n }\r\n };\r\n\r\n private readonly _moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\r\n if (result.status === 'ADDED' && cartline) {\r\n this._removeItemFromCartHandler(cartline);\r\n }\r\n };\r\n\r\n private readonly _updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number): boolean => {\r\n isCartLineQuantityUpdatedAsync(\r\n this.isQuantityLimitsFeatureEnabled,\r\n this.props.data.cart.result,\r\n this.props.telemetry,\r\n this.state.products,\r\n cartlineToUpdate,\r\n quantity)\r\n .then((isUpdated: boolean) => {\r\n if (isUpdated) {\r\n this._validateCart().catch((error) => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n });\r\n }\r\n return isUpdated;\r\n })\r\n .catch(() => {\r\n return false;\r\n });\r\n\r\n return false;\r\n };\r\n\r\n private readonly _fulfillmentStoreIdUpdated = () => {\r\n if (this.isQuantityLimitsFeatureEnabled) {\r\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\r\n .then(products => {\r\n this.setState({ products });\r\n })\r\n .then(async () => this._validateCart())\r\n .catch((error: Error) => {\r\n this.props.telemetry.warning(error.message);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n });\r\n }\r\n };\r\n\r\n private async _validateCart(): Promise {\r\n const {\r\n data: { cart },\r\n telemetry,\r\n context\r\n } = this.props;\r\n\r\n const validationResults: LineDataValidationFailure[] | undefined = await validateCartAsync(this.isQuantityLimitsFeatureEnabled,\r\n cart,\r\n telemetry,\r\n context,\r\n true);\r\n\r\n if (validationResults) {\r\n this.setState({ cartlinesErrors: validationResults });\r\n }\r\n\r\n return AsyncResult.resolve();\r\n }\r\n\r\n private async _getOrderQuantityLimitsFeatureFlag(): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return false;\r\n }\r\n\r\n try {\r\n const featureStatuses = await this.props.data.featureState;\r\n const isQuantityLimitsFeatureEnabledInHq = featureStatuses\r\n .find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')?.IsEnabled || false;\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n return false;\r\n }\r\n } catch (error) {\r\n //@ts-ignore\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to get feature states');\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return true;\r\n }\r\n try {\r\n const customerInfo = await this.props.data.customerInformation;\r\n return !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\r\n } catch (error) {\r\n //@ts-ignore\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to get customer info');\r\n return false;\r\n }\r\n }\r\n\r\n private _getCartLinesGroup(): ICartlinesViewProps[][] | null {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n wishlists: { result: wishlists },\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n context: {\r\n request: {\r\n channel: {\r\n PickupDeliveryModeCode\r\n } = { PickupDeliveryModeCode: undefined }\r\n }\r\n },\r\n config,\r\n telemetry,\r\n resources,\r\n modules\r\n } = this.props;\r\n\r\n const imageSettings = this._getImageSettings(config.imageSettings);\r\n const cartlinesErrors: LineDataValidationFailure[] = this.state.cartlinesErrors;\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n\r\n return this.props.data.products && this.props.data.products.result && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0 && this.props.data.channelDeliveryOptionConfig?.result ? (\r\n CartLineGroupItems({\r\n cartlines: cart.cart.CartLines,\r\n storeSelectorModuleId: storeSelectorId,\r\n cartlinesErrors,\r\n products: this.props.data.products.result,\r\n productAvailabilites: this.props.data.productAvailabilites.result,\r\n productDeliveryOptions: this.props.data.deliveryOptions.result,\r\n imageSettings,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n amountString: resources.productDimensionTypeAmount,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\r\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\r\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\r\n discountStringText: resources.discountStringText,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n shippingChargesText: resources.shippingCharges\r\n },\r\n telemetry,\r\n addToWishlistButtonText: resources.addToWishlistButtonText,\r\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\r\n removeButtonText: resources.removeCartButtonText,\r\n shipItText: resources.shipInsteadDisplayText,\r\n pickitUpText: resources.pickItUpDisplayText,\r\n changeStoreText: resources.changeStoreDisplayText,\r\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\r\n outOfStockText: resources.outOfStockErrorMessage,\r\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\r\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\r\n cartState: this.props.data.cart.result,\r\n orgUnitLocations: this.props.data.orgUnitLocations.result,\r\n removeItemClickHandler: this._removeItemFromCartHandler,\r\n moveToWishlistSuccessHandler: this._moveToWishlistSuccessHandler,\r\n updateCartLinesQuantitySuccessHandler: this._updateCartlineQuantity,\r\n locationChangedHandler: this._fulfillmentStoreIdUpdated,\r\n wishlists,\r\n defaultWishlistName: resources.defaultWishlistName,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n includeErrors: config.showOutOfStockErrors,\r\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\r\n telemetryContent: this.telemetryContent,\r\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\r\n\r\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\r\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\r\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(resources),\r\n\r\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\r\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\r\n orderTemplates,\r\n customerInformation,\r\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\r\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple'\r\n })\r\n ) : null;\r\n }\r\n\r\n}\r\n\r\nexport default Cart;\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 { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nexport interface ICartLineItemPromotion {\r\n id: string;\r\n showPromotionPopup: boolean;\r\n promotions: CartPromotionLine[] | undefined;\r\n resources: ICartLineItemPromotionResourceString;\r\n onSeeAllClick(event: React.MouseEvent): void;\r\n onCloseButtonClick(): void;\r\n}\r\n\r\nexport interface ICartLineItemViewProps {\r\n promotionMessageWrapper: INodeProps;\r\n promotionMessage: React.ReactNode;\r\n promotionSeeAllLink: React.ReactElement;\r\n promotionDialog: React.ReactNode;\r\n}\r\n\r\nexport interface ICartLineItemPromotionResourceString {\r\n promotionLinkText: string;\r\n promotionStringHeading: string;\r\n promotionPopupHeading: string;\r\n promotionCloseButtonAriaLabel: string;\r\n}\r\n\r\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\r\n\r\n const {\r\n id,\r\n showPromotionPopup,\r\n promotions,\r\n resources: {\r\n promotionLinkText,\r\n promotionPopupHeading\r\n },\r\n onCloseButtonClick,\r\n onSeeAllClick\r\n } = props;\r\n\r\n if (!ArrayExtensions.hasElements(promotions)) {\r\n return;\r\n }\r\n\r\n const titleId = `${id}_title`;\r\n const className = 'msc-cart__promotion';\r\n return {\r\n promotionMessageWrapper: {\r\n className: 'msc-cart__promotion'\r\n },\r\n promotionMessage: (\r\n <>\r\n \r\n \r\n {' '}\r\n {props.resources.promotionStringHeading}\r\n \r\n \r\n ),\r\n promotionSeeAllLink: (\r\n \r\n {' '}\r\n {promotionLinkText}\r\n {' '}\r\n ),\r\n promotionDialog: (\r\n \r\n \r\n
\r\n {promotionPopupHeading}\r\n
\r\n
\r\n \r\n
    \r\n {promotions.map(_promotion => {\r\n return (\r\n
  • \r\n {_promotion.Promotion?.OfferName}\r\n {' '}\r\n
  • \r\n );\r\n }\r\n )}\r\n
\r\n
\r\n \r\n
\r\n )\r\n };\r\n};\r\n","/*--------------------------------------------------------------\r\n * 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 } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartViewProps, IOrderSummaryErrors } from './arborb2b-cart';\r\nimport { ICartlinesViewProps } from './components/arborb2b-cart-line-items';\r\nimport { ICartLineItemViewProps } from './components/arborb2b-cart-line-items-promotion';\r\n\r\nconst _renderCartlines = (cartLines: ICartlinesViewProps[] | undefined, cartEmptyText: string, CartlinesWrapper: INodeProps, storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode, waitingComponent: React.ReactNode, cartLoadingStatus: string, cartDataResult: boolean): JSX.Element[] | JSX.Element => {\r\n\r\n if (cartLoadingStatus) {\r\n return (<>\r\n {cartLoadingStatus}\r\n );\r\n }\r\n if (cartLines) {\r\n return cartLines.map((cartLine) => {\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {\r\n storeSelector && cartLine.pickUpInStore ? \r\n {cartLine.pickUpInStore.defaultComponent}\r\n : null\r\n }\r\n {\r\n cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n {cartLine.addToOrderTemplate}\r\n \r\n ) : (\r\n <>\r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n \r\n )\r\n }\r\n
\r\n );\r\n });\r\n }\r\n return (cartDataResult ? (\r\n
\r\n

\r\n {cartEmptyText}\r\n

\r\n {backToShoppingButton}\r\n
\r\n ) : <>\r\n {waitingComponent}\r\n \r\n );\r\n\r\n};\r\n\r\n\r\n\r\n/**\r\n * Method will render error block.\r\n * @param errorData -The order summary errors interface.\r\n * @returns Jsx element.\r\n */\r\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\r\n return null;\r\n }\r\n return (\r\n \r\n {errorData.header}\r\n {errorData.errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Method will render invoice summary lines.\r\n * @param invoiceSummaryLines -The invoicesummary lines interface.\r\n * @param OrderSummaryItems -The order summary items props.\r\n * @param props -The cartview props.\r\n * @returns Jsx element.\r\n */\r\nconst _renderInvoiceSummarylines = (invoiceSummaryLines: IInvoiceSummaryLines | undefined, OrderSummaryItems: INodeProps, props: ICartViewProps):\r\nJSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\r\n return null;\r\n }\r\n return (\r\n \r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Method will render order summary lines.\r\n * @param orderSummaryLines -The ordersummary lines interface.\r\n * @param OrderSummaryItems -The order summary items props.\r\n * @param props -The cartview props.\r\n * @returns Jsx element.\r\n */\r\nconst _renderOrderSummarylines = (orderSummaryLines: IOrderSummaryLines | undefined, OrderSummaryItems: INodeProps, props: ICartViewProps):\r\nJSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n //@ts-ignore\r\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\r\n return null;\r\n }\r\n return (\r\n \r\n {props.promoCode}\r\n {orderSummaryLines.subtotal}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\r\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\r\n {orderSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Method will render cart promotions.\r\n * @param promotions -The cartline item view props.\r\n * @returns Jsx element.\r\n */\r\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n \r\n {promotions.promotionMessage}\r\n {promotions.promotionSeeAllLink}\r\n {promotions.promotionDialog}\r\n \r\n\r\n \r\n );\r\n\r\n};\r\n\r\n/**\r\n * Method will render cartlines group title.\r\n * @param cartLine -The cartline view props.\r\n * @param titleSeparate -The title separate.\r\n * @returns Jsx element.\r\n */\r\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, titleSeparate: string) => {\r\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\r\n return (\r\n <>\r\n \r\n {isBopisSelected ?

\r\n {cartLine.pickUpInStore?.deliveryOption}\r\n {titleSeparate}\r\n {cartLine.pickUpInStore?.orgUnitName}\r\n

: null}\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Method will render cartlines groups header title.\r\n * @param pickUpText -The pickup text for group.\r\n * @param shippingText -The shipping text for group.\r\n * @param emailShippingText -The email shipping text for group.\r\n * @param titleSeparate -The title separator.\r\n * @param cartLine -The cartline view props.\r\n * @param emailDeliveryModeCode -The email delivery code from channel.\r\n * @returns Jsx element.\r\n */\r\nconst renderCartLinesGroupHeader = (pickUpText: string, shippingText: string, emailShippingText: string,\r\n titleSeparate: string, cartLine: ICartlinesViewProps, emailDeliveryModeCode?: string) => {\r\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n
\r\n

\r\n

\r\n {groupTitle}\r\n

\r\n {renderCartLinesGroupTitle(cartLine, titleSeparate)}\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Method will render cartlines in groups.\r\n * @param props -The cartline.\r\n * @returns Jsx element.\r\n */\r\nconst renderCartLinesGroup = (props: ICartViewProps): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\r\n return (\r\n
\r\n { props.cartLinesGroup.map(cartlines => {\r\n return (
\r\n {renderCartLinesGroupHeader(props.resources.pickUpText, props.resources.shippingText,\r\n props.resources.emailshippingText, props.resources.titleSeparate, cartlines[0],\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n {_renderCartlines(cartlines, props.resources.emptyCartText, props.CartlinesWrapper, props.storeSelector,\r\n props.backToShoppingButton, props.waitingComponent, props.cartLoadingStatus, props.cartDataResult)}\r\n
);\r\n })}\r\n
\r\n );\r\n }\r\n return (props.cartDataResult ? (\r\n
\r\n
\r\n

\r\n {props.resources.emptyCartText}\r\n

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : <>\r\n {props.waitingComponent}\r\n \r\n );\r\n\r\n};\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? renderCartLinesGroup(props) : \r\n {_renderCartlines(props.cartlines, props.resources.emptyCartText, props.CartlinesWrapper, props.storeSelector,\r\n props.backToShoppingButton, props.waitingComponent, props.cartLoadingStatus, props.cartDataResult)}\r\n }\r\n {props.orderSummaryHeading &&\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props) : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n }\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nexport default CartView;\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 { IObrienCheckoutData } from '../obrien-checkout.data';\r\nimport { IObrienCheckoutProps } from '../obrien-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: IObrienCheckoutProps): IInvoicePaymentSummary => {\r\n const {\r\n data: { checkout },\r\n resources: {\r\n totalAmountLabel,\r\n invoiceLabel,\r\n invoiceSummaryTitle\r\n },\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:

\r\n { invoiceSummaryTitle }\r\n

,\r\n lines: checkoutCart?.hasInvoiceLine ? 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 }) : undefined\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 { 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 { Button, getPayloadObject, getTelemetryAttributes, INodeProps, ITelemetryContent, TelemetryConstant } 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 { IObrienCheckoutData } from '../obrien-checkout.data';\r\nimport { IObrienCheckoutProps } from '../obrien-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: IObrienCheckoutProps, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\r\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\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)?.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: \r\n {pickUpAtStoreWithLocationText}\r\n ,\r\n location:
\r\n {pickupDeliveryLocation}\r\n
\r\n };\r\n };\r\n\r\n const _getEmailDeliveryComponents = (): IEmailDelivery => {\r\n const {\r\n resources: { emailDeliveryText }\r\n } = input;\r\n\r\n return {\r\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\r\n label: \r\n {emailDeliveryText}\r\n \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 = (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)) ? (retailMultiplePickUpOptionEnabled ? cartLineItem.DeliveryMode === channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLineItem.DeliveryMode) : (cartLineItem.DeliveryMode === pickupDeliveryModeCode)) : false;\r\n };\r\n\r\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\r\n return (!StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)) ? (retailMultiplePickUpOptionEnabled ? cartLineItem.DeliveryMode !== channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLineItem.DeliveryMode) : (cartLineItem.DeliveryMode !== pickupDeliveryModeCode)) : false;\r\n };\r\n\r\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\r\n const {\r\n resources: {\r\n itemLabel,\r\n itemsLabel,\r\n inStorePickUpLabel,\r\n shippingCountCheckoutLineItem\r\n }\r\n } = input;\r\n\r\n let emailDeliveryModeDesc: string = '';\r\n\r\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\r\n emailDeliveryModeDesc = emailDeliveryModeDesc ? emailDeliveryModeDesc : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)?.Description!;\r\n });\r\n\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n const title = type === 'ship' ? shippingCountCheckoutLineItem : (type === 'pickup' ? inStorePickUpLabel : `${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\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((\r\n cartLine: CartLine) => ((cartLine.DeliveryMode && cartLine.DeliveryMode !== '') ? (_getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode) : cartLine)\r\n );\r\n } else if (type === 'pickup') {\r\n return cart.CartLines.filter((cartLine: CartLine) => ((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\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:
\r\n {title}\r\n
,\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 ? _getLineItemsByDeliveryTypeWithMulitplePickupMode() : 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 = (count: number, type: deliveryType, deliveryMode?: string, fulFillmentStoreId?: string): string => {\r\n const {\r\n resources: {\r\n itemLabel,\r\n itemsLabel\r\n }\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 ? emailDeliveryModeDesc : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)?.Description!;\r\n });\r\n\r\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\r\n pickupDeliveryModeDesc = pickupDeliveryModeDesc ? pickupDeliveryModeDesc : 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 = type === 'ship' ? `(${count} ${suffix})` : (type === 'pickup' ? `${pickupTitle} (${count} ${suffix})` : `${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: {\r\n multiplePickUpLabel,\r\n shippingLable\r\n }\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 = cartLine.FulfillmentStoreId && cartLine.DeliveryMode ? 'pickup' : (cartLine.FulfillmentStoreId === '' && cartLine.DeliveryMode === emailDeliveryModeCode ? 'email' : '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:
\r\n {groupTitle}\r\n
,\r\n heading:
\r\n {title}\r\n
,\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 { IObrienCheckoutData } from '../obrien-checkout.data';\r\nimport { IObrienCheckoutProps } from '../obrien-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: IObrienCheckoutProps): 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)?.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 ? 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 }) : undefined\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 { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent, TelemetryConstant } 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
\r\n {children}\r\n
\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 \r\n {step + 1}\r\n .\r\n {' '}\r\n \r\n {text && \r\n {text}\r\n }\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 { isReady, isPending, isUpdating, isDisabled, isCancelAllowed, onEdit, onCancel, onSubmit, hasModuleState, hasInitialized } =\r\n state || ({} as IModuleStateManager);\r\n return (\r\n\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, canPlaceOrder, placeOrder, telemetryContent, shouldEnableSinglePaymentAuthorizationCheckout, isPlaceOrderLoading }) => {\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 = ''): Promise => {\r\n console.log(\"MYDEBUG-AC-AC.ts getCardTypeId() called\");\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 console.log(\"MYDEBUG-AC-AC.ts findTenderIdTypeByOperationId() called\");\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(ctx: IActionContext, LoyaltyCardId: string, Amount = 0, Currency = 'USD'): Promise {\r\n console.log(\"MYDEBUG-AC-AC.ts getLoyaltyTenderLine() called\");\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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\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 = '',\r\n Amount = 0,\r\n Currency = 'USD',\r\n tenderTypeId?: string,\r\n giftCardPin?: string,\r\n giftCardExpirationYear?: number,\r\n giftCardExpirationMonth?: number\r\n): Promise {\r\n console.log(\"MYDEBUG-AC-AC.ts getGiftCardTenderLine() called\");\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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\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 = '',\r\n Amount = 0,\r\n Currency = 'USD',\r\n billingAddress?: Address\r\n): Promise {\r\n console.log(\"MYDEBUG-AC-AC.ts getCreditCardTenderLine() called\");\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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\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 = 0,\r\n currency = 'USD',\r\n cardPaymentAcceptResult?: CardPaymentAcceptResult\r\n): Promise {\r\n console.log(\"MYDEBUG-AC-AC.ts getCreditCardTenderLineForSinglePaymentAuth() called\");\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 = 'USD'): Promise {\r\n console.log(\"MYDEBUG-AC-AC.ts createCustomerAccountTenderLine() called\");\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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\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 console.log(\"MYDEBUG-AC-AC.ts export called\");\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 // eslint-disable-next-line no-useless-catch\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 // eslint-disable-next-line no-useless-catch\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\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { Cart, CartLineValidationResults } from '@msdyn365-commerce/retail-proxy';\r\nimport { updateLineDeliverySpecificationsAsync, validateForCheckoutAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { DeliveryPreferenceType, LineDeliverySpecification, ReleasedProductType, 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 { ArrayExtensions, getAvailabilitiesForCartLineItems, ProductAvailabilitiesForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, TelemetryConstant, Waiting } 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\n//@ts-ignore\r\nimport ReCAPTCHA from 'react-google-recaptcha';\r\n\r\n// This is the production key\r\nconst TEST_SITE_KEY = \"6LcClc0ZAAAAAKoN2AsxwRRd4GMtD_yUG5AwXEhl\";\r\n// This is the test key\r\n//const TEST_SITE_KEY = \"6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI\";\r\nconst DELAY = 1500;\r\n\r\nimport { IObrienCheckoutData } from './obrien-checkout.data';\r\nimport { ICheckoutHeadingData, IObrienCheckoutProps } from './obrien-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\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 IObrienCheckoutProps {\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 IObrienCheckoutProps, 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\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n //@ts-ignore\r\n callback: \"not fired\",\r\n value: null,\r\n load: false,\r\n expired: \"false\"\r\n };\r\n \r\n }\r\n\r\n handleChange = (value: null) => {\r\n console.log(\"Captcha value:\", value);\r\n this.setState({ value });\r\n // if value is null recaptcha expired\r\n if (value === null) this.setState({ expired: \"true\" });\r\n };\r\n\r\n asyncScriptOnLoad = () => {\r\n this.setState({ callback: \"called!\" });\r\n };\r\n \r\n\r\n @computed get cartStatus(): Msdyn365.AsyncResultStatus {\r\n console.log(\"MYDEBUG-AC: @computed get cartStatus() called\");\r\n return this.props.data.checkout?.status;\r\n }\r\n\r\n @computed get isEmptyCart(): boolean {\r\n console.log(\"MYDEBUG-AC: @computed get isEmptyCart() called\");\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 console.log(\"MYDEBUG-AC: @computed get hasError() called\");\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 console.log(\"MYDEBUG-AC: @computed get isEditorialMode() called\");\r\n return this.props.context.request.params.isEditor;\r\n }\r\n\r\n @computed public get isPaymentVerificationRedirection(): boolean {\r\n console.log(\"MYDEBUG-AC: @computed get isPaymentVerificationRedirection() called\");\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 console.log(\"MYDEBUG-AC: @computed get canPlaceOrder() called\");\r\n const isTermsAndConditionAccepted = this.props.data.checkout.result && this.props.data.checkout.result?.isTermsAndConditionAccepted;\r\n\r\n const shouldEnableSinglePaymentAuthorizationCheckout = 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 this.props.moduleState.isReady &&\r\n (isTermsAndConditionAccepted === undefined ||\r\n isTermsAndConditionAccepted ||\r\n shouldEnableSinglePaymentAuthorizationCheckout) &&\r\n ((this.state.errorMessage === '' || shouldEnableSinglePaymentAuthorizationCheckout) || this.isPaymentVerificationRedirection);\r\n }\r\n\r\n @computed get isCartReady(): boolean {\r\n console.log(\"MYDEBUG-AC: @computed get isCartReady() called\");\r\n return !!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 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(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n\r\n public componentDidMount(): void {\r\n console.log(\"MYDEBUG-AC: componenetDidMount() called\");\r\n const {\r\n resources: { genericErrorMessage }\r\n } = this.props;\r\n\r\n setTimeout(() => {\r\n this.setState({ load: true });\r\n }, DELAY);\r\n\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 (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && isReady &&\r\n !this.props.data.checkout.result.redirectAdditionalContext) {\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\r\n //@ts-ignore\r\n const { value, load } = this.state || {};\r\n\r\n\r\n console.log(\"MYDEBUG-AC: render() called\");\r\n const {\r\n moduleState,\r\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\r\n resources\r\n } = this.props;\r\n const { errorMessage } = this.state;\r\n const { backToShopping, placeOrderText, confirmPaymentText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\r\n const checkoutClass = classnames('ms-checkout', className);\r\n const checkoutInformation = this.getSlotItems('checkoutInformation');\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 &&\r\n this.props.slots.termsAndConditions.length > 0 &&\r\n this.props.slots.termsAndConditions[0];\r\n\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\r\n const backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n\r\n const hasInvoiceLine = this.props.data.checkout && this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\r\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderText;\r\n\r\n 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: this.props.data.checkout && this.props.data.checkout.result !== undefined && 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: this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0 ? this.props.slots.orderConfirmation[0] : 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 && (\r\n this.renderMsdyn365Text(checkoutHeading)\r\n )\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 {load && (\r\n
\r\n

Please confirm you are human to place order

\r\n \r\n
\r\n )}\r\n {(value !== null) && (\r\n \r\n )}\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 console.log(\"MYDEBUG-AC: renderMsdyn365Text() called\");\r\n return (\r\n \r\n );\r\n }\r\n\r\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.checkoutHeading!.text = event.target.value;\r\n\r\n private readonly isLoading = (): boolean => {\r\n console.log(\"MYDEBUG-AC: isLoading() called\");\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 console.log(\"MYDEBUG-AC: getSlotItems() called\");\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 console.log(\"MYDEBUG-AC: triggerPaymentWithPlaceOrder() called\");\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 private readonly onPlaceOrder = async (): Promise => {\r\n console.log(\"MYDEBUG-AC: onPlaceOrder() called\");\r\n const {\r\n resources: { checkoutOutOfStockErrorMessage, genericErrorMessage, invalidCartVersionErrorMessage },\r\n context: { actionContext, app: { config: { enableStockCheck = false } } },\r\n slots: { orderConfirmation },\r\n data: { checkout, products }\r\n } = this.props;\r\n\r\n // If hasInvoiceLine is true, no inventory check\r\n if (!this.props.data.checkout.result?.checkoutCart.hasInvoiceLine && enableStockCheck &&\r\n await this.isOverMaxQuantity((await checkout).checkoutCart.cart, (await products))) {\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\r\n await placeOrder(actionContext, this.props.data.checkout.result, this.props.data.products.result,\r\n !hasOrderConfirmation, updatedCartVersion, this.isPaymentVerificationRedirection).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 (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && error.data?.AdditionalContext &&\r\n !this.isPaymentVerificationRedirection) {\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 };\r\n\r\n // Update receipt email address for electronic cart line\r\n // return the updated cart version\r\n private readonly updateCartLineEmailAddress = async (newGuestCheckoutEmail: string): Promise => {\r\n console.log(\"MYDEBUG-AC: updateCartLineEmailAddress() called\");\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 { LineId: line.LineId,\r\n DeliverySpecification: {\r\n DeliveryModeId: emailDeliveryModeCode,\r\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\r\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail\r\n }\r\n };\r\n });\r\n\r\n await updateLineDeliverySpecificationsAsync(\r\n { callerContext: this.props.context.actionContext },\r\n (await this.props.data.checkout).checkoutCart.cart.Id,\r\n lineDeliverySpecifications\r\n ).then(updatedCart => {\r\n updatedCartVersion = updatedCart.Version;\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 console.log(\"MYDEBUG-AC: isOverMaxQuantity() called\");\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 ).then(productInventoryInformation => {\r\n cart.CartLines?.map((cartline) => {\r\n\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 (!isServiceItem && cartline.DeliveryMode !== emailDeliveryModeCode && ArrayExtensions.hasElements(productInventoryInformation)) {\r\n const foundProductAvailability = productInventoryInformation.find((productInventory) => {\r\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\r\n });\r\n\r\n if (!(foundProductAvailability?.IsProductAvailable && foundProductAvailability.ProductAvailableQuantity.AvailableQuantity !== undefined &&\r\n cartline.Quantity && cartline.Quantity <= foundProductAvailability.ProductAvailableQuantity.AvailableQuantity)) {\r\n isOverMaxQuantity = true;\r\n }\r\n }\r\n });\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 console.log(\"MYDEBUG-AC: getActiveChildModuleStates() called\");\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 console.log(\"MYDEBUG-AC: onContainerReady() called\");\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 console.log(\"MYDEBUG-AC: redirectToCartPage() called\");\r\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\r\n if (window && editCartLink) {\r\n window.location.assign(editCartLink);\r\n } else {\r\n this.setState({\r\n errorMessage: this.props.resources.genericErrorMessage\r\n });\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 console.log(\"MYDEBUG-AC: validateForCheckout() called\");\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 = this.props.data.featureState.result\r\n ?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')?.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 = 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?.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","/*--------------------------------------------------------------\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 { 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 './obrien-checkout';\r\nimport emptyActiveCart from './empty-active-cart';\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport default async (\r\n ctx: IActionContext,\r\n checkoutState: ICheckoutState | undefined,\r\n orderedProducts: SimpleProduct[] | undefined,\r\n redirect: boolean,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean\r\n) => {\r\n console.log(\"MYDEBUG-AC-PO.ts export called\");\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n //@ts-ignore\r\n // eslint-disable-next-line no-async-promise-executor\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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n //@ts-ignore\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 window.location.assign(url);\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","/*--------------------------------------------------------------\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from './obrien-checkout';\r\nimport { IEmailDelivery } from './components';\r\nimport { IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => (\r\n \r\n {label}\r\n \r\n);\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 = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems, lineItemWraper, lineItemWraperIcon }) => (\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 = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip, itemsForEmail, itemsGroupWithMulitplePickupMode }) => (\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 ? itemsGroupWithMulitplePickupMode.map((item, index) => {\r\n return ;\r\n }) : null}\r\n \r\n);\r\n\r\nconst 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\nconst 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 hasInvoiceLine,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n termsAndConditionsProps,\r\n orderConfirmation,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n invoicePaymentSummary,\r\n lineItems,\r\n placeOrderButton,\r\n termsAndConditions,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {!hasSalesOrder && \r\n {title}\r\n }\r\n {!hasSalesOrder &&\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {termsAndConditions}\r\n \r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {!hasInvoiceLine ? orderSummary && : invoicePaymentSummary && }\r\n \r\n \r\n {termsAndConditions}\r\n \r\n {/* {placeOrderButton} */}\r\n {/* {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n \r\n {termsAndConditions}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartsDataActions,\n LineDataValidationFailure,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n if (!isQuantityLimitsFeatureEnabled) {\n return AsyncResult.resolve();\n }\n\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationFailuresByCartLines ?? []);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(isQuantityLimitsFeatureEnabled, cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActiveCartProductsInput,\n getActiveCartProductsAction,\n getAvailabilitiesForCartLineItems,\n getDeliveryOptionsForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n ProductDeliveryOptionsForCartLineItems\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IMiniCartData entity interface.\n */\nexport interface IMiniCartData {\n products?: SimpleProduct[];\n productAvailabilites?: IProductInventoryInformation[];\n deliveryOptions?: ProductDeliveryOptions[];\n}\n\nexport const createInput = () => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a mini cart data.\n * @param ctx\n * @param cartState\n */\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\n const miniCartData: IMiniCartData = {};\n\n const cart = cartState.cart;\n\n // If there are cart lines, make call to get products\n // If there are invocie linese, then there is no products, so don't make call to get products\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\n .then(products => {\n if (products) {\n miniCartData.products = products;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(availableQuantity => {\n if (availableQuantity) {\n miniCartData.productAvailabilites = availableQuantity;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(deliveryOptions => {\n if (deliveryOptions) {\n miniCartData.deliveryOptions = deliveryOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return miniCartData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { CartLine, ChannelDeliveryOptionConfiguration, LineDataValidationFailure, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n UncontrolledTooltip,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\n\nimport { ICartIconData } from './cart-icon.data';\nimport { cartLinesSortOrder, ICartIconProps } from './cart-icon.props.autogenerated';\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\n\nexport interface IMiniCartState {\n miniCartData: IMiniCartData;\n orgUnitLocations?: OrgUnitLocation[];\n isQuantityLimitsFeatureEnabled: boolean;\n isCartValid: boolean;\n}\n\nexport interface ICartIconViewProps extends ICartIconProps {\n className: string;\n cartIcon: React.ReactNode;\n FlyoutContainer?: INodeProps;\n CartlinesWrapper: INodeProps;\n miniCartWrapper: INodeProps;\n miniCartItemWrapper: INodeProps;\n cartlines?: IFlyoutCartLineItemViewProps[];\n flyoutTitle: React.ReactNode;\n totalPrice: React.ReactNode;\n checkoutAsGuestButton?: React.ReactNode;\n checkoutAsSignInUserButton?: React.ReactNode;\n goToCartButton?: React.ReactNode;\n waitingComponent?: React.ReactNode;\n isCartLoading: boolean;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\n/**\n *\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass CartIcon extends React.Component, IMiniCartState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\n\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\n\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private lastValidatedCartVersion: number | undefined;\n\n constructor(props: ICartIconProps) {\n super(props);\n this.state = {\n miniCartData: {},\n isCartValid: true,\n isQuantityLimitsFeatureEnabled: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n }\n\n public async componentDidMount(): Promise {\n const context = this.props.context.actionContext;\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n this.setState({\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\n });\n }\n );\n\n this.setState({\n orgUnitLocations: this.props.data.orgUnitLocations?.result\n });\n await this._setOrderQuantityLimitsFeatureFlag();\n this._validateCart();\n }\n\n public componentDidUpdate(prevProps: ICartIconProps): void {\n this._validateCart();\n }\n\n public shouldComponentUpdate(nextProps: ICartIconProps, nextState: IMiniCartState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n config: { enableHoverCart, isAnonymousCheckout },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n context,\n resources\n } = this.props;\n\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n const hasInvoiceLine = cart?.hasInvoiceLine;\n const cartLines = this._getCartLines();\n const hasError = !this.state.isCartValid || (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\n const flyoutTitle = resources.flyoutTitle;\n const flyoutTooltip = {\n tag: UncontrolledTooltip,\n shouldShowMiniCart,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__flyout-container',\n trigger: 'hover',\n displayMode: 'FLYOUT',\n target: id,\n shouldShowCloseButton: true,\n cartPageUrl: cartUrl,\n hideAriaHidden: true\n };\n\n // If there are invoice lines, don't update mini cart price\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\n const priceString = price\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\n : '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n cartIcon: (\n \n ),\n cartlines: cartLines,\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\n CartlinesWrapper: {\n className: 'ms-cart-icon__cart-lines'\n },\n miniCartWrapper: {\n className: classnames('ms-cart-icon'),\n id: this.props.id\n },\n miniCartItemWrapper: {\n className: classnames('msc-cart-lines-item')\n },\n\n // If there are invoice lines, don't update mini cart checkout button\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\n checkoutAsSignInUserButton:\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n flyoutTitle: {flyoutTitle},\n totalPrice:
{priceString}
\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n validateCartAsync(this.state.isQuantityLimitsFeatureEnabled, cart, this.props.telemetry, this.props.context)\n .then((result: LineDataValidationFailure[] | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setOrderQuantityLimitsFeatureFlag(): Promise {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n }\n}\n\nexport default CartIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartIconViewProps } from './cart-icon';\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\n\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n return cartLines.map((cartLine, index) => {\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\n \n {props.cartIcon}\n {props.FlyoutContainer ? (\n \n {props.flyoutTitle}\n {_renderCartlines(props.cartlines, props)}\n {props.totalPrice}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.goToCartButton}\n \n ) : (\n false\n )}\n \n);\n\nexport default CartIconView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && context.request.user.isB2b) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
\n {orgUnitName}\n
\n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleGroupCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, LineDataValidationFailure } from '@msdyn365-commerce/retail-proxy';\nimport { ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: LineDataValidationFailure[];\n promotionData: IPromotionData;\n isCartValid: boolean;\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n this.state = {\n cartlinesErrors: [],\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled = await this.getOrderQuantityLimitsFeatureFlag();\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = !cart?.hasInvoiceLine && RetailMultiplePickupFeatureState?.IsEnabled;\n const cartLinesGroup = multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

,\n cart: this.props.data.cart.result,\n CartlinesWrapper: { className: 'msc-cartline-wraper' },\n OrderSummaryWrapper: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary-wrapper' : 'msc-order-summary-wrapper' },\n OrderSummaryItems: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary__items' : 'msc-order-summary__items' },\n cartlines: cartLines,\n cartLinesGroup,\n promoCode: this._getPromoCode(),\n promotionOptions: this._getPromotions(),\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry: this.props.telemetry,\n id: this.props.id,\n multiplePickUpEnabled,\n removePromoAriaLabelFormat: resources.removePromoAriaLabelFormat,\n orderSummaryHeading: ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\n cart?.hasInvoiceLine ? (\n

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n const RetailB2BEcommerceFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailB2BEcommerceFeature'\n );\n if (\n RetailB2BEcommerceFeatureState?.IsEnabled &&\n this.props.data.customerInformation.result?.IsB2b &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return
{fullError}
;\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: LineDataValidationFailure[] = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineDataValidationFailure = {\n LineIndex: ObjectExtensions.isNullOrUndefined(lineIndex) ? 0 : lineIndex,\n DataValidationFailure: {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n };\n\n this.setState((previousState: Readonly) => {\n const currentErrors: LineDataValidationFailure[] = previousState.cartlinesErrors.filter(\n error => error.LineIndex !== lineIndex\n );\n currentErrors.push(lineUpdateFailure);\n return { cartlinesErrors: currentErrors };\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: LineDataValidationFailure[] | undefined = await validateCartAsync(\n this.isQuantityLimitsFeatureEnabled,\n cart,\n telemetry,\n context,\n true\n );\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: LineDataValidationFailure[] = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n return this.props.data.products &&\n this.props.data.products.result &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.props.data.cartLinesPickUpOptions?.result\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n
\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n {cartLine.pickUpInStore.defaultComponent}\n ) : null}\n {cartLine.addToOrderTemplate ? (\n \n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n \n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{cartEmptyText}

\n {backToShoppingButton}\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Method will render error block.\n * @param errorData -The order summary errors interface.\n * @returns Jsx element.\n */\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Method will render invoice summary lines.\n * @param invoiceSummaryLines -The invoicesummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render order summary lines.\n * @param orderSummaryLines -The ordersummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render cart promotions.\n * @param promotions -The cartline item view props.\n * @returns Jsx element.\n */\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Method will render cartlines group title.\n * @param cartLine -The cartline view props.\n * @param titleSeparate -The title separate.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, titleSeparate: string) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {titleSeparate}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n
\n \n );\n};\n\n/**\n * Method will render cartlines groups header title.\n * @param pickUpText -The pickup text for group.\n * @param shippingText -The shipping text for group.\n * @param emailShippingText -The email shipping text for group.\n * @param titleSeparate -The title separator.\n * @param cartLine -The cartline view props.\n * @param emailDeliveryModeCode -The email delivery code from channel.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupHeader = (\n pickUpText: string,\n shippingText: string,\n emailShippingText: string,\n titleSeparate: string,\n cartLine: ICartlinesViewProps,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, titleSeparate)}\n
\n \n );\n};\n\n/**\n * Method will render cartlines in groups.\n * @param props -The cartline.\n * @returns Jsx element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n props.resources.pickUpText,\n props.resources.shippingText,\n props.resources.emailshippingText,\n props.resources.titleSeparate,\n cartlines[0],\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
\n

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \n
\n )\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { IAny, ICoreContext, IGeneric, IGridSettings, IImageSettings, ITelemetry, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n LineDataValidationFailure,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n ObjectExtensions,\n OrderTemplate\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: LineDataValidationFailure[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n lineIndex: number,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n\n let foundProductAvailability;\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (props.shouldIgnoreWarehouse) {\n return productAvailability.ProductAvailableQuantity.ProductId === cartLine.ProductId;\n }\n return (\n productAvailability.ProductAvailableQuantity.ProductId === cartLine.ProductId &&\n productAvailability.InventLocationId === cartLine.WarehouseId\n );\n });\n if (foundProductAvailability === undefined) {\n return undefined;\n }\n }\n\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n props.cartlinesErrors\n .filter(i => i.LineIndex === lineIndex)\n .forEach(i => {\n if (i.DataValidationFailure?.LocalizedMessage ?? i.DataValidationFailure?.ErrorResourceId) {\n finalErrorMessages.push(i.DataValidationFailure?.LocalizedMessage ?? i.DataValidationFailure?.ErrorResourceId ?? '');\n }\n });\n\n if (finalErrorMessages.length > 0) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\n\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(availableQuantityInStock, cartline.Quantity!, props, index, shouldSkipStockCheck, cartline);\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\n if (MsDyn365.isBrowser && context.request.user.isB2b) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError: !shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false,\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (props.shouldIgnoreWarehouse) {\n return productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId;\n }\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n };\n\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {cartLine.FulfillmentStoreId ? (\n
\n {orgUnitName}\n \n
\n ) : null}\n \n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\n };\n\n /**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n 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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\n/**\n * EnabledPaymentsForOBO enum.\n */\n export enum EnabledPaymentsForOBO {\n OnCustomerAccount = 1,\n ExpressPayment = 0,\n Loyalty = 0,\n GiftCard = 0,\n PaymentInstrument = 0,\n ApplePay = 0\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 * as React from 'react';\n\nexport interface IWishlistItemDimension {\n key: string;\n className?: string;\n dimensionType: string;\n dimensionValue: string;\n}\n\nexport const WishlistItemDimension: React.FC = ({ key, className, dimensionType, dimensionValue }) => (\n
\n {dimensionType}:\n {dimensionValue}\n
\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport {\n CommerceListLine,\n ProductPrice,\n ReleasedProductType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getFallbackImageUrl, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWishlistItemActionMessageState } from '../wishlist-items';\nimport { WishlistItemDimension } from './wishlist-items-dimensions';\n\nexport interface IWishlistItemProps extends CommerceListLine {\n product: SimpleProduct;\n wishlistState: IWishlistItemActionMessageState;\n price?: ProductPrice;\n context: ICoreContext>;\n productUrl: string;\n imageSettings?: IImageSettings;\n removeFromWishlistText: string;\n isInStock: boolean;\n addToCartText: string;\n outOfStockText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n enableImageProductLink?: boolean;\n inventoryInformationLabel?: string;\n inventoryLabelClassName?: string;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onAddToCart(product: SimpleProduct, itemKey: string): void;\n onRemoveItem(productId: number): void | undefined;\n onDismiss(): void;\n };\n resources: {\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n };\n}\n\nexport interface IWishlistItemViewProps {\n key: string;\n productImage: React.ReactNode;\n productLink: React.ReactNode;\n productDimensions?: React.ReactNode[];\n productPrice?: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productStatusMessage?: React.ReactNode;\n productName?: React.ReactNode;\n productAriaLabel?: string;\n entireProductLink?: string;\n inventoryInformation?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n}\n\nconst _addItemToCart = (props: IWishlistItemProps): void => {\n const { product, itemKey, handlers } = props;\n const { onAddToCart } = handlers;\n\n onAddToCart && product && itemKey && onAddToCart(product, itemKey);\n};\n\nconst _removeItemFromWishlist = (props: IWishlistItemProps): void => {\n const { onRemoveItem } = props.handlers;\n const { RecordId } = props.product;\n\n onRemoveItem && RecordId && onRemoveItem(RecordId);\n};\n\nconst WishListItemActions = {\n addToCart: _addItemToCart,\n removeItem: _removeItemFromWishlist\n};\n\nconst _renderAriaLabel = (props: IWishlistItemProps): string => {\n const { product, price, context, resources } = props;\n\n const { Name, Dimensions } = product;\n const { productDimensionTypeColor, productDimensionTypeSize, productDimensionTypeStyle } = resources;\n\n let formattedPrice = 'Free';\n let dimensions = null;\n\n if (price) {\n formattedPrice =\n price.BasePrice === 0 ? resources.freePriceText : context.cultureFormatter.formatCurrency(price.BasePrice!, price.CurrencyCode);\n }\n\n if (Dimensions) {\n dimensions = Dimensions.map(productDimension => {\n switch (productDimension.DimensionTypeValue) {\n case 1:\n return `${productDimensionTypeColor}${productDimension.DimensionValue && productDimension.DimensionValue.Value}`;\n case 3:\n return `${productDimensionTypeSize}${productDimension.DimensionValue && productDimension.DimensionValue.Value}`;\n case 4:\n return `${productDimensionTypeStyle}${productDimension.DimensionValue && productDimension.DimensionValue.Value}`;\n default:\n return '';\n }\n });\n }\n\n return `${Name} ${formattedPrice} ${(dimensions && dimensions.join('')) || ''}`;\n};\n\n/**\n * Renders a link to a product based on the given props.\n * @param input - Wishlist item props with the info about the product.\n * @returns React component with a link to a product.\n */\nconst renderProductLink = (input: IWishlistItemProps) => {\n const { productUrl, telemetryContent } = input;\n const { RecordId: recordId, Name: productName } = input.product;\n const payLoad = getPayloadObject('click', telemetryContent!, '', recordId.toString());\n const productAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n !StringExtensions.isNullOrWhitespace(productUrl) && (\n \n {productName}\n \n )\n );\n};\n\n/**\n * Renders a product name box.\n * @param productName - The text to display.\n * @returns React component with a name of a product.\n */\nconst renderProductName = (productName: string) => {\n return
{productName}
;\n};\n\n/**\n * Renders inventory information.\n * @param inventoryInformationLabel - The text to display.\n * @param inventoryLabelClassName - The component class name.\n * @returns React component.\n */\nconst renderInventoryInformationLabel = (inventoryInformationLabel: string | undefined, inventoryLabelClassName: string | undefined) => {\n const inventoryCssName = inventoryLabelClassName\n ? `ms-wishlist-items__inventory-label ${inventoryLabelClassName}`\n : 'ms-wishlist-items__inventory-label';\n return (\n !StringExtensions.isNullOrWhitespace(inventoryInformationLabel) && (\n {inventoryInformationLabel}\n )\n );\n};\n\n/**\n * Renders add to cart button.\n * @param input - Wishlist item props with the configuration.\n * @returns React component.\n */\nconst WishlistItemAddToCartButtonComponent = (input: IWishlistItemProps) => {\n const { isInStock, addToCartText, outOfStockText } = input;\n\n // Check if the product is service or not by product type.\n const isServiceItem = input.product.ItemTypeValue === ReleasedProductType.Service;\n\n const addItemAction = React.useCallback(() => {\n WishListItemActions.addToCart(input);\n }, [input]);\n\n return (\n \n {((isServiceItem || isInStock) && addToCartText) || outOfStockText}\n \n );\n};\n\n/**\n * Renders remove from wishlist button.\n * @param input - Wishlist item props with the configuration.\n * @returns React component.\n */\nconst WishlistItemRemoveFromWishlistButtonComponent = (input: IWishlistItemProps) => {\n const { removeFromWishlistText } = input;\n\n const removeItemAction = React.useCallback(() => {\n WishListItemActions.removeItem(input);\n }, [input]);\n\n return \n
{choiceSummary}
\n
\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n
\n \n {refineMenu && isExpanded && renderRefiner(refineMenu)}\n \n {refineMenu && isExpanded && renderRefinerFooter(refineMenu, toggle, resources)}\n \n \n\n \n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n \n \n \n );\n};\n\n/**\n * Render Search result Modal.\n * @param modalProps - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createSearchResultModal = (\n modalProps: ISearchResultV2ModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown?: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\n/**\n * Render Refiner Mobile.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefinerMobile = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, refineMenuContainer, refinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render Search result Body.\n * @param props - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createModalBody = (\n props: ISearchResultV2ModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown?: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefinerMobile(refineMenu));\n }\n return null;\n};\n\n/**\n * Render Refiner.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, refineMenuContainer, refinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render Refiner Footer.\n * @param props - The Refine Menu view props.\n * @param handler - The Refine menu toggle function.\n * @param resources - Resources to get the done text and aria label.\n * @returns The JSX Element.\n */\nconst renderRefinerFooter = (\n props: IRefineMenuViewProps,\n handler: MouseEventHandler,\n resources: ISearchResultContainerV2Resources\n): JSX.Element | null => {\n const { refiners } = props;\n if (refiners) {\n return (\n \n \n {resources.doneText}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render sort by drop down.\n * @param props - The sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { sortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return {sortByDropDown};\n }\n return null;\n};\n\n/**\n * Render Title.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, titleContainer } = props;\n if (title) {\n return (\n \n \n {title.titlePrefix}\n {title.titleText}\n \n \n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Button, getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { MouseEventHandler, useEffect, useState } from 'react';\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport {\n ISearchResultContainerProps,\n ISearchResultContainerResources\n} from '../definition-extensions/search-result-container.ext.props.autogenerated';\nimport { ProductComponent } from './components/product.component';\n\n/**\n * DescriptionInterval.\n */\nenum DescriptionInterval {\n productDescriptionInterval = 14,\n productDescriptionIntervalRemainder0 = 0,\n productDescriptionIntervalRemainder9 = 9\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProductCards = (props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>): JSX.Element | null => {\n return (\n \n {props.errorMessage}\n {props.products}\n \n );\n};\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nfunction getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @param product - The product item data.\n * @param index - The index of each product item.\n * @param isEnabledProductDescription - The flag for showing Product desription tile.\n * @returns The JSX Element.\n */\nconst renderProductCardsDescription = (\n props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>,\n product: ProductSearchResult,\n index: number,\n isEnabledProductDescription?: boolean\n): JSX.Element | null => {\n const { config, context, resources, productsDimensionAvailabilities } = props;\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n const breadCrumbType = props.context.app.config.breadcrumbType;\n const isAllowBack = props.config.allowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n const classname = isEnabledProductDescription\n ? 'ms-product-search-result__item product__description'\n : 'ms-product-search-result__item';\n const quickviewslot = ArrayExtensions.hasElements(props.slots.quickview) ? props.slots.quickview[0] : undefined;\n const channelInventoryConfigurationId = props.data.products.result?.channelInventoryConfigurationId;\n const isPriceMinMaxFeatureState = props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n\n const productComparisonButton = ArrayExtensions.hasElements(props.slots.productComparisonButton)\n ? props.slots.productComparisonButton[0]\n : null;\n\n return (\n
  • \n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n
  • \n );\n};\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProducts = (props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>): JSX.Element | null => {\n const products = props.data.listPageState.result?.activeProducts;\n if (!products || !ArrayExtensions.hasElements(products)) {\n return null;\n }\n const productDescriptionInterval: number = DescriptionInterval.productDescriptionInterval;\n const productDescriptionIntervalRemainder0: number = DescriptionInterval.productDescriptionIntervalRemainder0;\n const productDescriptionIntervalRemainder9: number = DescriptionInterval.productDescriptionIntervalRemainder9;\n return (\n \n {props.errorMessage}\n
      \n {products.map((product: ProductSearchResult, index: number) =>\n index % productDescriptionInterval === productDescriptionIntervalRemainder0 ||\n index % productDescriptionInterval === productDescriptionIntervalRemainder9\n ? renderProductCardsDescription(props, product, index, true)\n : renderProductCardsDescription(props, product, index, false)\n )}\n
    \n
    \n );\n};\n\n/**\n * Render Title Count.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return {title.titleCount};\n }\n return null;\n};\n\n/**\n * Render Category Hierarchy.\n * @param props - The category hierarchy view props.\n * @returns The JSX Element.\n */\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n \n {categoryHierarchyList.map((category, index) => (\n \n {category}\n {categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n \n ))}\n \n );\n }\n\n return null;\n};\n\n/**\n * Function to make filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nexport const configureStickyFilter = (isMobile: boolean, isStickyHeader: boolean): void => {\n // Get heights of cookie and promotion banners\n const defaultValue = 0;\n const defaultOffset = 28;\n const headerContainer: HTMLElement | null = document.querySelector('.ms-header');\n\n const headerHeight: number | undefined = headerContainer?.offsetHeight;\n const containerHeight: number = headerHeight ?? defaultOffset;\n const bannerHeights = isStickyHeader ? defaultValue : containerHeight;\n const headerElement = document.querySelector('header .lock-opaque');\n const defaultContainer = document.querySelector('header .default-container');\n const refinerElement = isMobile ? document.querySelector('.msc-sort-filter-wrapper') : document.querySelector('.ms-refiner-heading');\n if (refinerElement && headerElement && defaultContainer) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-Filter');\n refinerElement.setAttribute('style', `top: ${defaultContainer.clientHeight}px`);\n } else {\n refinerElement.classList.remove('lock-Filter');\n }\n } else if (refinerElement) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-top');\n } else {\n refinerElement.classList.remove('lock-top');\n refinerElement.classList.remove('lock-Filter');\n refinerElement.removeAttribute('style');\n }\n }\n};\n\n/**\n * Function to setup filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nfunction stickyFilterSetup(isMobile: boolean, isStickyHeader: boolean): void {\n window.addEventListener('scroll', () => {\n configureStickyFilter(isMobile, isStickyHeader);\n });\n configureStickyFilter(isMobile, isStickyHeader);\n}\n\n/**\n * Function to make filter sticky.\n * @param refinerRefernce - Ref prop for filter.\n * @param toggle - Toggle function for filter menu.\n */\nfunction useOutsideClick(refinerRefernce: React.RefObject, toggle: (event: Event) => void) {\n React.useEffect(() => {\n /**\n * Function to make filter sticky.\n * @param event - Event prop for filter.\n */\n function handleClickOutside(event: Event) {\n const element = document.querySelector('.ms-refine-filter__toggle_collapsed');\n if (refinerRefernce.current && !refinerRefernce.current.contains(event.target as Node) && !element) {\n toggle(event);\n }\n }\n if (MsDyn365.isBrowser) {\n document.addEventListener('click', handleClickOutside);\n }\n return () => {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('click', handleClickOutside);\n }\n };\n }, [refinerRefernce, toggle]);\n}\n\n/**\n * Render the category page items.\n * @param props - The view props.\n * @returns The search Result container module view.\n */\nconst SearchResultContainerView: React.FC> = props => {\n const {\n SearchResultContainer,\n pagination,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n FeatureSearchContainer,\n similarLookProduct,\n errorMessage,\n resources\n } = props;\n useEffect(() => {\n if (props.config.useStickyFilter && MsDyn365.isBrowser) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app context is generic\n stickyFilterSetup(props.isMobile, props.context.app.config.enableStickyHeader as boolean);\n }\n }, [props]);\n const [isExpanded, setIsExpanded] = useState(false);\n const toggle = () => {\n setIsExpanded(!isExpanded);\n };\n const wrapperRefiner = React.useRef(null);\n useOutsideClick(wrapperRefiner, toggle);\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n \n {similarLookProduct ? null : (\n \n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {renderTitleCount(TitleViewProps)}\n \n )}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n {similarLookProduct}\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n \n );\n }\n return (\n \n {similarLookProduct ? null : (\n \n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitle(TitleViewProps)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n \n )}\n {similarLookProduct}\n \n \n \n \n {resources.filterText}\n \n
    {choiceSummary}
    \n
    \n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n
    \n
    \n {refineMenu && isExpanded && renderRefiner(refineMenu)}\n \n {refineMenu && isExpanded && renderRefinerFooter(refineMenu, toggle, resources)}\n \n
    \n\n \n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n \n
    \n
    \n );\n};\n\n/**\n * Render Search result Modal.\n * @param modalProps - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\n/**\n * Render Refiner Mobile.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefinerMobile = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render Search result Body.\n * @param props - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefinerMobile(refineMenu));\n }\n return null;\n};\n\n/**\n * Render Refiner.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render Refiner Footer.\n * @param props - The Refine Menu view props.\n * @param handler - The Refine menu toggle function.\n * @param resources - Resources to get the done text and aria label.\n * @returns The JSX Element.\n */\nconst renderRefinerFooter = (\n props: IRefineMenuViewProps,\n handler: MouseEventHandler,\n resources: ISearchResultContainerResources\n): JSX.Element | null => {\n const { refiners } = props;\n if (refiners) {\n return (\n \n \n {resources.doneText}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render sort by drop down.\n * @param props - The sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return {sortByDropDown};\n }\n return null;\n};\n\n/**\n * Render Title.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n \n \n {title.titlePrefix}\n {title.titleText}\n \n \n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n"],"names":["_ref","message","React","className","role","getInvoicePaymentSummary","input","data","checkout","resources","totalAmountLabel","invoiceLabel","invoiceSummaryTitle","context","typeName","id","telemetry","checkoutCart","get","cart","heading","lines","hasInvoiceLine","InvoiceSummary","orderTotalLabel","checkoutState","result","undefined","getLineItems","telemetryContent","_featureState$result","_featureState$result$","pickupDeliveryModeCode","emailDeliveryModeCode","channelDeliveryOptionConfig","featureState","retailMultiplePickUpOptionEnabled","find","feature","Name","IsEnabled","_getDeliveryLocation","cartLine","orgUnitLocations","FulfillmentStoreId","locationMatch","location","OrgUnitNumber","OrgUnitName","_getLineItemComponent","product","ProductId","productId","_product","RecordId","config","showShippingChargesForLineItems","quantityDisplayString","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","productDimensionTypeAmount","configString","inputQuantityAriaLabel","discountStringText","shippingCharges","request","gridSettings","productUrl","getProductUrlSync","actionContext","MsDyn365","isBrowser","_cartLine$CatalogId","fullUrl","URL","window","href","searchParams","set","CatalogId","CartLineItemComponentNick","sizeString","colorString","styleString","amountString","originalPriceText","currentPriceText","shippingChargesText","salesAgreementPricePrompt","isQuantityEditable","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","PickUpAtStore","label","_getEmailDeliveryComponents","emailDeliveryText","EmailDelivery","_getLineItemsComponents","items","map","isPickUp","_getCartPickDeliveryMode","isEmailDelivery","DeliveryMode","LineId","LineItem","item","pickUpAtStore","emailDelivery","cartLineItem","_channelDeliveryOptio","_channelDeliveryOptio2","StringExtensions","isNullOrWhitespace","PickupDeliveryModeCodes","deliveryMode","_countItems","reduce","count","Quantity","_filterItemsByDiliveryType","type","CartLines","filter","_channelDeliveryOptio3","_channelDeliveryOptio4","_getLineItemsByDeliveryType","length","title","_getGroupTitleComponent","_input$data$deliveryO","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","deliveryOptions","productDeliveryOptions","_productDeliveryOptio","_productDeliveryOptio2","DeliveryOptions","deliveryOption","Code","Description","suffix","replace","toString","LineItemDeliveryGroup","classnames","LineItemList","lineItems","handleLineItemHeadingChange","event","lineItemsHeading","text","target","value","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","cartLinesGrp","Object","entries","forEach","groupByDeliveryType","push","keys","key","cartLines","index","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio3","_productDeliveryOptio4","_productDeliveryOptio5","_productDeliveryOptio6","groupTitle","iconClass","lineItemWraperIcon","lineItemWraper","_getLineItems","products","editCartText","payLoad","getPayloadObject","TelemetryConstant","EditCart","attribute","getTelemetryAttributes","groupClass","LineItems","Header","Msdyn365","assign","tag","editProps","onEdit","requestContext","editLink","Button","color","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","getOriginalPrice","props","_props$data$price$Bas","_props$data$price$Tra","_props$data$price$Adj","Math","max","price","BasePrice","TradeAgreementPrice","AdjustedPrice","formatCurrency","shouldUseFreePriceText","freePriceText","cultureFormatter","renderCurrentPrice","maxVariantPrice","MaxVariantPrice","minVariantPrice","MinVariantPrice","_props$priceResources","isPriceMinMaxEnabled","itemProp","priceResources","priceRangeSeparator","CustomerContextualPrice","SalesAgreementPrice","constructor","super","this","_toggle","bind","state","isOpen","render","_this$props$data$pric","_this$props$data$pric2","_this$props$priceReso","_this$props$priceReso2","_this$props$priceReso3","_this$props$priceReso4","_this$props$priceReso5","_this$props$priceReso6","_this$props$priceReso7","firstPriceLine","AttainablePriceLines","salesAgreementDetailCollapseProps","onClick","Collapse","format","salesAgreementExpirationDatePrompt","formatDate","EffectiveDate","ExpirationDate","salesAgreementCommittedQuantityPrompt","CommittedQuantity","salesAgreementRemainingQuantityPrompt","RemainingQuantity","preventDefault","console","log","setState","PriceComponent","msdyn365Commerce","createComponent","_objectSpread","component","isSalesAgreementPriceFeatureEnabled","salesAgreementPrice","originalPrice","showStrikethroughPricing","initialPrice","savingsText","renderCurrentPriceWithOriginalPrice","OrderSummaryLine","toBeCalculatedText","freeText","cssLabel","_buildOrderSummarySection","arguments","_computedLoyaltyAmount","loyaltyAmount","getDeliveryMode","featureSate","pickupDeliveryMode","dM","OrderSummary","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmountWithoutTax","TotalAmount","OtherChargeAmount","canShip","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","channelConfiguration","isTaxIncludedInPrice","isShowTaxBreakup","PickupDeliveryModeCode","EmailDeliveryModeCode","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","some","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","reactNodes","subtotal","subTotalLabel","tax","taxLabel","orderTotal","otherCharge","otherChargeLabel","shipping","shippingLabel","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","giftCardCounter","giftCard","Balance","amount","min","totalAmountAfterGiftCard","loyalty","loyaltyLabel","giftcardLabel","totalDiscounts","totalDiscountsLabel","getOrderSummary","orderSummaryHeading","otherCharges","showLineItems","channel","isShowOrHideTaxEnabled","app","isEnableShowOrHideSalesTaxECommerceEnabled","orderSummaryProps","IsTaxIncludedInPrice","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isReady","isSubmitting","isCancelAllowed","hasControlGroup","onCancel","onSubmit","resource","saveBtnLabel","cancelBtnLabel","saveAndContinueBtnLabel","canSubmit","canCancel","contentAction","etext","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","classname","disabled","focusOnFirstFocusableElement","node","current","child","querySelector","focus","focusOnEditButton","editButton","scrollToTitle","formCard","isMobile","scrollIntoView","getTitle","step","headingTag","Tag","componentDidUpdate","prevProps","isActive","onNext","isExpanded","children","isPending","isUpdating","hasInitialized","changeBtnLabel","CheckoutChange","changeBtnAttributes","canEdit","active","expanded","closed","visted","hidden","initialized","ready","pending","updating","ref","innerRef","CheckoutGuidedForm","currentStep","getEnabledModules","moduleState","childIds","getModule","childId","isDisabled","getStep","indexOf","getId","getHeading","isEditor","hasMissingInfo","hasShippingAddress","hasCartDeliveryMode","hasGuestCheckoutEmail","isTermsAndConditionAccepted","hasOrderError","_state$childIds","ArrayExtensions","hasElements","currentId","includes","hasError","componentDidMount","init","shouldCollapseAfterRedirect","isPaymentVerificationRedirection","shouldEnableSinglePaymentAuthorizationCheckout","hasModuleState","GuidedCard","disableGuidedCheckoutFlow","enableControl","__decorate","computed","observer","buttonsStates","onPlaceOrderHandler","isBusy","canPlaceOrder","placeOrder","async","buttonSetState","checkoutBtnText","isPlaceOrderLoading","isExpressCheckoutApplied","setIsBusy","useState","payload","TelemetryEvent","Purchase","attributes","OPERATIONS","getCardTypeId","ctx","cardPrefix","response","resolveCardTypesAsync","callerContext","CardType","Unknown","TypeId","error","findTenderIdTypeByOperationId","tenderTypes","operationId","matchedTenderType","tenderType","OperationId","TenderTypeId","roundNumber","Number","toFixed","updatedCartVersion","getCheckoutState","catch","cartState","Error","tokenizedPaymentCard","guestCheckoutEmail","billingAddress","cardPaymentAcceptResult","isExpressAddressApplied","Currency","cartTenderLines","amountDue","AmountDue","getTenderLinePromises","loyaltyCardNumber","LoyaltyCardId","chargedAmount","loyaltyTenderLinePromise","Amount","getTenderTypesAsync","queryResultSettings","getLoyaltyTenderLine","information","giftCardExtend","_giftCardExtend$Expir","_giftCardExtend$Expir2","tenderTypeId","giftCardPin","Pin","giftCardExpirationYear","parseInt","split","giftCardExpirationMonth","creditCardTenderLinePromise","GiftCardId","GiftCardPin","GiftCardExpirationYear","GiftCardExpirationMonth","getGiftCardTenderLine","Id","customerAccountAmount","customerAccountTenderLinePromise","CustomerId","user","isAuthenticated","createCustomerAccountTenderLine","currency","TokenizedPaymentCard","House","Phone","Country","ThreeLetterISORegionName","Address1","Street","City","State","Zip","ZipCode","CardPaymentAcceptResult","getCreditCardTenderLineForSinglePaymentAuth","_tokenizedPaymentCard","cartTypeId","CardTypeId","TenderType","cardTenderLine","CardTokenInfo","getCreditCardTenderLine","Promise","all","cartVersion","Version","salesOrder","checkoutAsync","bypassCache","_error$data","_error$data2","_cardPaymentAcceptRes","_cardPaymentAcceptRes2","AdditionalContext","warning","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","updateRedirectAdditionalContext","newRedirectAdditionalContext","updateRedirectPaymentConnectorId","newRedirectPaymentConnectorId","Settings","PaymentConnectorId","updateIsCheckoutCallFailed","newIsCheckoutCallFailed","updateCheckoutErrorPaymentConnectorId","newCheckoutErrorPaymentConnectorId","refreshCart","updateIsExpressCheckoutApplied","newIsExpressCheckoutApplied","lineItemIdsToRemove","getCartState","activeCart","activeCartLine","checkoutCartLine","removeCartLines","cartLineIds","removeAllPromoCodes","removeCheckoutCartId","Checkout","_this","errorMessage","isValidationPassed","getTelemetryObject","telemetryPageName","friendlyName","handleCheckoutHeadingChange","checkoutHeading","isLoading","cartStatus","isEmptyCart","getSlotItems","slots","triggerPaymentWithPlaceOrder","_this$props$data$chec","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","onPlaceOrder","_this$props$data$chec2","checkoutOutOfStockErrorMessage","genericErrorMessage","customerCreditLimitExceededErrorMessage","invalidCartVersionErrorMessage","missingRequiredCartTenderLinesErrorMessage","enableStockCheck","isOverMaxQuantity","_this$props$data$chec3","_this$props$data$chec4","_checkout$result","updateCartLineEmailAddress","orderedProducts","redirect","resolve","reject","emptyActiveCart","orderConfirmationUrl","getUrlSync","separator","url","updateSalesOrder","newSalesOrder","newOrderedProducts","status","hasOrderConfirmation","_this$props$data$chec5","_this$props$data$chec6","name","exception","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","_this$props$context$r","_this$props$data$chec7","_this$props$data$chec8","emailDeliveryCartLines","lineDeliverySpecifications","line","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ElectronicDelivery","ElectronicDeliveryEmailAddress","newGuestCheckoutEmail","updateLineDeliverySpecificationsAsync","then","updatedCart","_this$props$context$r2","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","apiSettings","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","cartline","_cartlineProduct$Beha","cartlineProduct","isStockedItem","Behavior","IsStockedProduct","foundProductAvailability","productInventory","_productInventory$Pro","ProductAvailableQuantity","cartLinesInventoryValidation","validateCartLinesInventory","isValid","getActiveChildModuleStates","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","validateForCheckout","_this$props$data$feat","_this$props$data$feat2","_this$props$context","_this$props$context$r3","_this$props$context$r4","_this$props$context$r5","retry","isOrderQuantityLimitsFeatureEnabledInHq","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","customerInformation","isOrderQuantityLimitsFeatureEnabledInSiteSettings","IsB2b","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","debug","_this$props$data$chec9","refreshError","_setErrorMessage","setHasError","onUpdating","_this$props$data$chec10","_this$props$data$chec11","_this$props$data$chec12","_this$props$data$chec13","isEditorialMode","isEmpty","_this$props$data$chec14","_this$props$data$chec15","_this$props$data$chec16","params","_this$props$data$chec17","_this$props$data$chec18","_this$props$data$chec19","_this$props$data$chec20","_this$props$data$chec21","isCartReady","_this$props$data$chec22","_this$props$data$chec23","_this$props$data$chec36","when","reaction","_this$props$data$chec24","isPaymentSectionContainerReady","_this$props$data$chec25","_this$props$data$chec26","_this$props$data$chec27","_this$props$data$chec28","redirectAdditionalContext","isPaymentVerificationRequired","_this$props$data$chec29","isPaymentSectionContainerHasError","_this$props$data$chec30","_this$props$data$chec31","isBillingAddressHasError","_this$props$data$chec32","_this$props$data$chec33","updateIsBillingAddressHasError","newIsBillingAddressHasError","_this$props$data$chec34","_this$props$data$chec35","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec37","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec38","_this$props$data$chec39","_this$props$data$chec40","_this$props$data$chec41","_this$props$data$chec42","_this$props$data$chec43","_this$props$data$chec44","_this$props$data$chec45","_this$props$data$chec46","_this$props$data$chec47","_this$props$data$chec48","_this$props$data$chec49","_this$props$data$chec50","_this$props$data$chec51","_this$props$data$chec52","_this$props$data$chec53","_this$props$data$chec54","_this$props$data$chec55","_document","_document$getElements","_this$props$data$chec56","_this$props$data$chec57","backToShopping","placeOrderText","confirmPaymentText","cookieConsentRequiredMessage","checkoutClass","allCheckoutInformation","checkoutInformation","info","checkoutExpressPaymentContainer","isConsentGiven","cookies","device","Type","backToShoppingUrl","BackToShopping","backToShoppingAttributes","hasExpressPaymentContainer","document","getElementsByClassName","style","display","viewProps","hasSalesOrder","checkoutProps","moduleProps","headerProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","renderMsdyn365Text","alert","AlertComponent","loading","Waiting","_this$props$data$chec58","_this$props$data$chec59","_this$props$data$chec60","canShow","guidedForm","GuidedFormComponent","orderSummary","invoicePaymentSummary","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","renderView","action","withModuleState","PickUpAtStoreComponent","Node","EmailDeliveryComponent","_ref2","LineItemComponent","_ref3","LineItemGroupComponent","_ref4","lineItem","LineItemGroupComponentWithMultiplePickUp","_ref5","LineItemComponentWithMultiplePickUp","_ref6","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","OrderSummaryComponent","_ref9","PaymentSummaryComponent","_ref10","invoices","productName","ItemId","productNewPrice","Price","PickUpInStore","_toggleBOPIS","isBopisSelected","storeSelectorStateManager","storeSelectorModuleId","openDialog","alreadySelectedLocation","onLocationSelected","orgUnitLocation","updateCartLinePickupLocation","cartLineId","locationChangedHandler","_onLocationChangedCallback","ShippingAddress","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","foundLocation","option","callbacks","toggleBopis","defaultComponent","_renderShippingMethod","shipItText","pickupInStoretext","changeStoreText","orgUnitName","bopisSelected","toggleBOPIS","onChange","checked","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","delivery","ContainerProps","assembleCartlines","cartlines","getProductByProductId","foundProductDeliveryOption","productAvailabilites","productAvailability","_productAvailability$2","_productAvailability$","shouldIgnoreWarehouse","InventLocationId","WarehouseId","_assembleNode","foundProductDeliveryOptions","_product$Behavior","_foundProductAvailabi","_product$Dimensions","_product$Dimensions$f","_product$Dimensions$f2","_props$cartState","imageSettings","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","wishlists","defaultWishlistName","nameOfWishlist","availableQuantityInStock","isStockCheckEnabled","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","isQuantityLimitsFeatureEnabled","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","MaximumQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","ObjectExtensions","isNullOrUndefined","_getErrorMessage","currentQuantity","lineIndex","finalErrorMessages","includeErrors","outOfStockText","outOfRangeOneText","outOfRangeFormatText","cartlinesErrors","i","LineIndex","_i$DataValidationFail","DataValidationFailure","ErrorContext","join","onRemoveClickHandler","onRemoveClickFunction","RemoveFromCart","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","toLowerCase","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","Value","cartlineId","CartLineItemComponent","isOutOfStock","getInvoiceDetailsPageUrlSync","quantityOnChange","updateCartLinesQuantitySuccessHandler","primaryImageUrl","PrimaryImageUrl","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","pickUpInStore","pickitUpText","remove","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","quantity","shouldShowButtonFailedTooltip","disableButton","disableTooltip","CartLineGroupItems","_assembleGroupCartlines","deliveryType","carLineViewProps","getPromotionData","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","promotionOptions","Cart","showPromotionDialog","_isMounted","promotionPopupId","_addOrUpdateSalesOrderAttributes","attributeArr","attributeObj","ExtensionProperties","TextValue","TextValueTranslations","AttributeValues","updateAsync","newCart","update","GetCheckoutCartInput","promotionLinkClick","promotionCloseButtonclick","_hidePromotionDialog","_getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","_removeItemFromCartHandler","cartlineToRemove","_validateCart","_moveToWishlistSuccessHandler","_updateCartlineQuantity","cartlineToUpdate","isCartLineQuantityUpdatedAsync","isUpdated","_fulfillmentStoreIdUpdated","getActiveCartProductsAction","ActiveCartProductsInput","_getOrderQuantityLimitsFeatureFlag","_this$props$data$cart","showAvailablePromotions","_this$props$data$cart2","componentWillUnmount","shouldComponentUpdate","nextProps","nextState","signInUrl","guestCheckoutUrl","checkoutURL","_getCheckoutURL","isCartEmpty","_getCartLines","RetailMultiplePickupFeatureState","multiplePickUpEnabled","_getCartLinesGroup","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","backtoShoppingAttributes","hasErrors","cartTitle","CartlinesWrapper","OrderSummaryWrapper","OrderSummaryItems","promoCode","_getPromoCode","_getPromotions","removePromoAriaLabelFormat","orderSummaryTitle","orderSummaryLineitems","_getOrderSummaryLineItems","invoiceSummaryLineitems","_getInvoiceSummaryLineItems","checkoutAsSignInUserButton","checkoutButtonTitle","checkoutAsGuestButton","guestCheckoutButtonTitle","backToShoppingButton","backToShoppingButtonTitle","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","storeSelector","waitingComponent","cartLoadingStatus","cartLoadingErrorMessage","cartDataResult","OrderSummaryErrors","_getOrderSummaryErrors","_this$props$data$cart3","_this$props$data$cust","_cart$cart","RetailB2BEcommerceFeatureState","showPromotionPopup","promotions","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionMessageWrapper","promotionMessage","promotionStringHeading","promotionSeeAllLink","tabIndex","promotionDialog","Modal","toggle","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","allErrors","_cartline$data","_cartline$data$produc","_cartline$data$produc2","fullError","Wrapper","Alert","assertive","outOfStockErrorMessageHeader","header","errors","_this$props","_this$props$data","itemsWithCountLabel","estimatedShippingLabel","estimatedTaxLabel","yetToBeCalculatedText","priceFree","PromoCodeComponent","promoCodeHeadingText","promoPlaceholderText","promoCodeApplyButtonText","appliedPromoCodeHeadingText","collapseTimeOut","removePromoText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","failedToRemovePromoCodeErrorText","duplicatePromoCodeErrorText","duplicatePromotionErrorText","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","modules","storeSelectorId","CartLineItems","maxQuantityForCartLineItem","warehouseAggregation","productDimensionTypeConfiguration","quantityDisplayText","decrementButtonAriaLabel","incrementButtonAriaLabel","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","outOfStockErrorMessage","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isArborb2bUrl","RegExp","test","returnURL","origin","validationResults","validateCartAsync","AsyncResult","_featureStatuses$find","featureStatuses","_this$props$data$chan","_this$props$data$chan2","_renderCartlines","cartEmptyText","renderCartLinesGroupHeader","pickUpText","shippingText","emailShippingText","titleSeparate","_cartLine$pickUpInSto4","renderCartLinesGroupTitle","_cartLine$pickUpInSto","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_props$cart","_props$cart2","errorData","renderModuleAttributes","_props$context$action","emailshippingText","emptyCartText","renderCartLinesGroup","_renderInvoiceSummarylines","invoiceSummaryLines","_renderOrderSummarylines","orderSummaryLines","ReactDOM","handleChange","expired","asyncScriptOnLoad","callback","orderConfirmation","load","requestFormData","query","pv","setTimeout","termsAndConditions","ReCAPTCHA","sitekey","Module","propsContext","cartResult","shouldRetry","_validationResult$Val","validationResult","CartsDataActions","validateError","cartLineToUpdate","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha","modifiedProduct","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","cartLineQuantityUpdatedAsync","_modifiedProduct$Beha2","getProductByProductIdAndWarehouse","warehouseId","targetWarehouseValue","InventoryLocationId","getMiniCartData","miniCartData","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","CartIcon","getSortedCartLines","sortOrder","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","isCartValid","CheckOut","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","_setOrderQuantityLimitsFeatureFlag","_this$props$data$feat3","enableHoverCart","isAnonymousCheckout","cartUrl","shouldShowMiniCart","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","showMiniCart","includeFlyout","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","flyoutTitle","flyoutTooltip","UncontrolledTooltip","placement","hideArrow","trigger","displayMode","shouldShowCloseButton","cartPageUrl","hideAriaHidden","priceString","totalPriceFormatString","cartIcon","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","miniCartWrapper","miniCartItemWrapper","goToCartButton","totalPrice","_cart$result$cart$Ver","_cart$result","_cart$result$cart","lastValidatedCartVersion","isAbsoluteUrl","urlCheck","_this$props$data$cata","FlyoutCartLineItems","cartLinesSortOrder","outOfStockThreshold","catalogs","storeLocation","_renderDeliveryLocation","deliverylocation","_foundProductDelivery","_foundProductDelivery2","_renderStoreLocation","_assembleCartlines","RemoveCartItem","removeCartItemAttribute","isB2b","_cartline$CatalogId","deliveryLocation","getImageSettings","removeItemFromCartHandler","validateCart","updateCartlineQuantity","cartActionResult","_cartActionResult$err","lineUpdateFailure","LocalizedMessage","errorDetails","previousState","currentErrors","fulfillmentStoreIdUpdated","getOrderQuantityLimitsFeatureFlag","_cart$cart$CartLines","_this$props$data$prod","getCheckoutURL","validInventoryAcrossCartLines","getCartLinesGroup","cartLineGroup","_updateCartLineErrorForInvalidInventory","showGuestCheckoutButton","expressCheckoutButton","paymentExpress","ExpressCheckoutSectionWrapper","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","retailMulitplePickupFeatureState","priceEditorResources","_this$props$data$feat4","_this$props$data$cata2","_this$props$data$cart4","productPickUpOptions","cartLinesPickUpOptions","_cartLine$cartlineId","shouldSkipStockCheck","IsInvoiceLine","_props$productAvailab","_i$DataValidationFail2","_i$DataValidationFail3","_i$DataValidationFail4","_i$DataValidationFail5","_i$DataValidationFail6","ErrorResourceId","ariaRole","_productAvailability$3","_cartline$WarehouseId","toUpperCase","_props$channelDeliver","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","pickup","deliveryCode","CheckoutStateInput","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","createObservableDataAction","CheckoutState","inputData","_giftCards","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_isTermsAndConditionAccepted","_customerAccountAmount","defineProperty","prototype","_tenderLine","_billingAddress","_shippingAddress","_cardPrefix","_loyaltyCardNumber","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","updateShippingAddress","newShippingAddress","updateBillingAddress","newBillingAddress","updateCardPrefix","newCardPrefix","removeGiftCard","giftCardNumber","removeGiftCardExtend","addGiftCard","__spreadArrays","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","newAmount","updateGuestCheckoutEmail","updateTermsAndConditionsAcceptance","newIsTermsAndConditionAccepted","updateCustomerAccountAmount","observable","EnabledPaymentsForOBO","ModuleStatesCacheKey","getModuleStates","cacheKey","moduleStates","updateModuleStates","WrappedComponent","_super","ModuleState","call","initializeState","_b","states","__assign","_a","isRequired","isCancellable","isSubmitContainer","getModuleStateManager","validate","isSkipped","shouldSubmitContainer","hasExternalSubmitGroup","setIsRequired","setIsCancellable","setIsSubmitContainer","onReady","onPending","onSkip","onDisable","moduleId","getModuleByTypeName","getModuleStateManagerByTypeName","options","values","_moduleState","_validateLeaf","source","module","isMatch","_validateContainer","allMatched","skipSkippableItem","_isPaymentSectionContainer","__extends","InvoiceSummaryLine","_buildPaymentSummarySection","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","WishlistItemDimension","dimensionType","dimensionValue","WishListItemActions","itemKey","handlers","onAddToCart","onRemoveItem","_renderAriaLabel","formattedPrice","dimensions","CurrencyCode","productDimension","renderProductLink","recordId","productAttributes","renderInventoryInformationLabel","inventoryCssName","WishlistItemAddToCartButtonComponent","isInStock","addToCartText","addItemAction","WishlistItemRemoveFromWishlistButtonComponent","removeFromWishlistText","removeItemAction","renderUnitOfMeasure","unitOfMeasure","unitOfMeasureDisplayType","_renderProductImage","image","fallbackImage","defaultImageSettings","xl","cropFocalRegion","Image","altText","src","fallBackSrc","loadFailureBehavior","_renderPrice","moduleTypeName","_renderProductDimensions","WishlistItemsStatusMessage","errorType","WishlistItems","handleHeadingChange","_onDismiss","_renderHeading","_addItemToCart","addedToCartSuccessMessage","addedToCartFailureMessage","invoiceInCartErrorMessage","_getProductInventory","ProductDetails","_this$props$context$a","getDeliveryOptionsAsync","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","isOrderQuantityLimitsFeatureEnabled","addProductToCartInput","orderQuantityLimitsFeatureIsEnabled","isAddEmailDeliveryItemToCart","addProductToCart","userMessage","statusCssString","messageGlyph","substatus","_await$cart$cart","_await$cart$cart$Cart","_await$cart$cart$Cart2","curQuantity","maxQtyLimitReachedMessage","_getInventoryValueMessage","_result$errorDetails","_result$errorDetails2","_removeItemFromWishlist","noLongerLineExist","userToken","token","wishlistLineId","_getWishlistLineIdFromProductId","removeLinesAsync","commerceList","castCommerceList","_getProductsNoLongerExists","_removeNoLongerExistsLines","createGetByCustomerInput","getItemsInWishlists","ActiveWishlistInput","castSimpleProducts","isError","_inventoryLabel","_inventoryClassName","_isProductInStock","productResult","CommerceListLines","foundWishlistItem","commerceListLine","_castCommerceList$Com","noLongerExist","emptyWishlistText","wishlistErrorGettingWishlist","noLongerExitsWishlistItemText","errorProps","statusMessage","productsList","emptyViewProps","Products","Product","ProductDimensions","_renderProductList","statusNotExistsMessage","_getProductNotExists","emptytext","noLongerExisttext","addToCartButtonText","enableImageProductLink","wishlistState","getFallbackImageUrl","productImage","productLink","productDimensions","productPrice","productUnitOfMeasure","DefaultUnitOfMeasure","entireProductLink","productAriaLabel","addToCartButton","inventoryInformation","removeButton","productStatusMessage","onDismiss","WishlistItem","ProductPrice","IsGiftCard","maxQuantityLimitText","maxQuantityForLineItem","minInventory","productInventoryCollection","_renderItem","getDefaultColorSwatchSelected","productData","_colorAttribute$swatc","_colorAttribute$swatc2","_colorAttribute$swatc3","attributeValues","colorAttribute","attributeValue","_attributeValue$keyNa","keyName","toLocaleLowerCase","DimensionTypes","defaultSwatch","swatches","isDefault","updateProductUrl","productDetailsPageUrl","coreContext","queryString","sourceUrl","baseUrl","search","pathname","renderProductUnitOfMeasure","renderLabel","rating","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","ratingAriaLabel","roundedRating","renderPrice","basePrice","adjustedPrice","renderProductPlacementImage","imageUrl","fallbackImageUrl","_context$app$config","contextConfig","placeholderImageName","fallbackImageSource","img","imageProps","bypassHideOnFailure","ProductComponentV2","createComponentOverride","_product$name","_product$recordId","_getProductImageUrlFr","_getProductPageUrlFro","ratingCountAriaLabel","allowBack","quickViewButton","productComparisonButton","isEnabledProductDescription","inventoryLabel","dimensionAvailabilities","swatchItemAriaLabel","getProductPageUrlSync","MIN_VALUE","productImageUrlFromSwatch","dimensionToPreSelectInProductCard","none","productImageUrls","generateImageUrl","getProductImageUrlFromDefaultColorSwatch","productPageUrlFromSwatch","swatchValue","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","updatePageAndImageUrl","swatchItem","setValue","productPageUrlWithSwatch","newUrl","delete","swatchProductImageUrl","newImageUrl","isUnitOfMeasureEnabled","onTelemetryClick","averageRating","totalRatings","defaultUnitOfMeasure","description","_item$keyName$toLocal","_item$keyName","_item$swatches$map","_item$swatches","dimensionTypeValue","dimensionsToDisplayOnProductCard","dimensionsInProductCard","shouldDisplayDimension","_item$recordId","_swatchItem$swatchVal","_swatchItem$swatchVal2","_dimensionAvailabilit","itemId","colorHexCode","swatchColorHexCode","swatchImageUrl","dimensionAvailability","_swatchItem$swatchVal3","swatch","ProductComponentV2SwatchComponent","onSelectDimension","hideRating","avgRating","ariaLabel","numberRatings","RatingComponent","ratingCount","readOnly","renderRating","inventoryAvailabilityLabel","quickview","selectedDimensions","getValues","convertDimensionTypeToProductDimensionType","selectedProductId","renderQuickView","catalogId","renderProductComparisonButton","getCatalogId","getDefaultSwatchSelected","_productData$Attribut","_attributeSwatches$fi","attributeSwatches","_attributeValue$KeyNa","KeyName","Swatches","IsDefault","ProductComponent","_product$Name","_product$RecordId","swatchProductImageUrls","ProductImageUrls","getProductImageUrlFromDefaultSwatch","SwatchValue","encodeURIComponent","AverageRating","TotalRatings","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","SwatchColorHexCode","SwatchImageUrl","_swatchItem$SwatchVal3","ProductComponentSwatchComponent","DescriptionInterval","renderProductCards","productsContainer","getInventoryLabel","channelInventoryConfigurationId","inventoryAttribute","textValue","renderProductCardsDescription","_props$data$products$","_props$data$featureSt","productsDimensionAvailabilities","breadCrumbType","breadcrumbType","isAllowBack","allowBackNavigation","quickviewslot","quickView","isPriceMinMaxFeatureState","masterProductId","renderProducts","_data$products$result","_data$products$result2","listPageState","activeProducts","productDescriptionInterval","productDescriptionIntervalRemainder0","productDescriptionIntervalRemainder9","renderTitleCount","titleContainer","titleCount","configureStickyFilter","isStickyHeader","headerContainer","headerHeight","offsetHeight","bannerHeights","headerElement","defaultContainer","refinerElement","documentElement","scrollTop","classList","add","setAttribute","clientHeight","removeAttribute","createSearchResultModal","modalProps","refineMenu","sortByDropDown","isRecoSearchPage","modal","modalHeader","createModalBody","modalFooter","modalBody","renderSort","refiners","refineMenuContainer","refinerSectionContainer","submenu","renderRefinerMobile","renderRefiner","renderRefinerFooter","handler","doneAriaLabel","doneText","sortingContainer","renderTitle","titlePrefix","titleText","searchResultContainer","pagination","productSectionContainer","choiceSummary","modalToggle","searchResultModal","titleViewProps","sortByOptions","categoryNavContainer","refineAndProductSectionContainer","featureSearchContainer","similarLookProduct","useStickyFilter","addEventListener","stickyFilterSetup","enableStickyHeader","setIsExpanded","wrapperRefiner","refinerRefernce","handleClickOutside","contains","removeEventListener","useOutsideClick","recommendation","enableProdutDescription","filterText","ProductsContainer","MasterProductId","_props$data$listPageS","TitleContainer","renderCategoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryHierarchySeparator","category","RefineMenuContainer","RefinerSectionContainer","SortingContainer","SearchResultContainer","ProductSectionContainer","TitleViewProps","categoryHierarchy","CategoryNavContainer","RefineAndProductSectionContainer","FeatureSearchContainer","useEffect"],"sourceRoot":""}