{"version":3,"file":"static/js/9c547a9192c2a3a8b95e.bundle.js","mappings":"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","sources":["webpack://bju-press/./src/themes/base/views/cart.view.tsx?5e51","webpack://bju-press/./src/utilities/data-attribute-parser.ts?7345","webpack://bju-press/./src/utilities/global-constants.ts?5882","webpack://bju-press/./lib/cart/module-registration.js?d21f","webpack://bju-press/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://bju-press/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://bju-press/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://bju-press/./src/validate-cart.ts?cd50","webpack://bju-press/./src/Common/get-product.ts?0a21","webpack://bju-press/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://bju-press/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://bju-press/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://bju-press/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://bju-press/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://bju-press/./src/modules/cart/cart.tsx?d4e4","webpack://bju-press/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://bju-press/./src/modules/cart/cart.view.tsx?d8c2","webpack://bju-press/./src/modules/fabrikam/views/cart.view.tsx?ac8f","webpack://bju-press/./src/invoice-summary-lineitem.tsx?5f61","webpack://bju-press/./src/order-summary-lineitem.tsx?8a98","webpack://bju-press/../../src/search-org-unit-locations.ts?d18d","webpack://bju-press/./src/modules/adventureworks/views/cart.view.tsx?3909","webpack://bju-press/external var \"React\"?0d3b","webpack://bju-press/external var \"ReactDOM\"?853b"],"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\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions, StringExtensions } 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 '@msdyn365-commerce-modules/cart';\r\nimport { ICartlinesViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\r\n\r\n//----------------------------------------------------------\r\n// @CUSTOM: Extended config imports\r\n//----------------------------------------------------------\r\nimport classnames from 'classnames';\r\n//----------------------------------------------------------\r\n\r\n//----------------------------------------------------------\r\n// @CUSTOM: drop ship messaging imports\r\n//----------------------------------------------------------\r\nimport { getCatalogId } from '@msdyn365-commerce/core';\r\nimport { ICartProps } from '../definition-extensions/cart.ext.props.autogenerated';\r\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy'\r\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n//----------------------------------------------------------\r\n\r\n//----------------------------------------------------------\r\n// @CUSTOM: Kit custom imports\r\n//----------------------------------------------------------\r\nimport { ICartData } from '@msdyn365-commerce-modules/cart'\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport { attrNames } from '../../../utilities/global-constants';\r\nimport { convertCartAttributes, convertProductAttributes } from '../../../utilities/data-attribute-parser';\r\n//----------------------------------------------------------\r\n\r\n//----------------------------------------------------------\r\n// @CUSTOM: Kit display - get elective cart lines tied to\r\n// kit item\r\n//----------------------------------------------------------\r\nconst getElectiveCartLines = (kitCartLine: ICartlinesViewProps, cartLines: ICartlinesViewProps[]) => {\r\n return cartLines.filter(cartLine => {\r\n const kitAttributes = kitCartLine.data?.cartline.AttributeValues;\r\n const parsedKitAttributes = kitAttributes && convertCartAttributes(kitAttributes);\r\n const attributes = cartLine.data?.cartline.AttributeValues;\r\n const parsedAttributes = attributes && convertCartAttributes(attributes);\r\n return parsedKitAttributes && parsedAttributes && parsedKitAttributes[attrNames.kitLineChildAssociation] === parsedAttributes[attrNames.kitLineParentAssociation];\r\n });\r\n};\r\n//----------------------------------------------------------\r\n\r\n//----------------------------------------------------------\r\n// @CUSTOM: Kit display - remove kit item alongside tied\r\n// elective items\r\n//----------------------------------------------------------\r\nconst removeKitItem = async (kitCartLine: ICartlinesViewProps, cartLines: ICartlinesViewProps[], cartData: ICartData) => {\r\n const electiveCartLines = getElectiveCartLines(kitCartLine, cartLines);\r\n\r\n if (cartData.cart.result) {\r\n const input = {\r\n cartLineIds: [kitCartLine.cartlineId!.toString()]\r\n };\r\n\r\n if (electiveCartLines) {\r\n electiveCartLines.forEach(electiveCartLine => {\r\n input.cartLineIds.push(electiveCartLine.cartlineId!.toString());\r\n });\r\n }\r\n\r\n cartData.cart.result.removeCartLines(input);\r\n }\r\n};\r\n//----------------------------------------------------------\r\n\r\nconst _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n cartEmptyText: string,\r\n CartlinesWrapper: INodeProps,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean,\r\n cartData: ICartData, // @CUSTOM: Needed for kit display\r\n // @CUSTOM: drop ship messaging imports\r\n productAttr: ProductSearchResult[],\r\n dropShipMessage: string\r\n ): (JSX.Element | null)[] | JSX.Element => { // @CUSTOM: Kit display - updated return type to account for no cart lines being returned\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map(cartLine => {\r\n\r\n // @CUSTOM: drop ship messaging imports\r\n const attributes = productAttr?.find(item => {\r\n return item.ItemId === cartLine.data?.cartline.ItemId\r\n })?.AttributeValues || [];\r\n\r\n const formatAttr = convertProductAttributes(attributes);\r\n\r\n const isDropShip = formatAttr[attrNames.dropShip];\r\n\r\n //----------------------------------------------\r\n // @CUSTOM: Kit display\r\n //----------------------------------------------\r\n const cartLineData = cartLine.data?.cartline;\r\n const lineAttributes = cartLineData?.AttributeValues && convertCartAttributes(cartLineData.AttributeValues);\r\n const kitElectives = lineAttributes && lineAttributes[attrNames.kitElectives];\r\n\r\n // Do not return kit elective cart lines\r\n if (lineAttributes && lineAttributes[attrNames.kitLineParentAssociation]) {\r\n return null;\r\n }\r\n\r\n const removeProps = React.isValidElement(cartLine.remove) && cartLine.remove.props;\r\n //----------------------------------------------\r\n\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {/* @CUSTOM: drop ship messaging imports */}\r\n
\r\n {isDropShip &&
{dropShipMessage}
}\r\n
\r\n {storeSelector && cartLine.pickUpInStore ? (\r\n {cartLine.pickUpInStore.defaultComponent}\r\n ) : null}\r\n {/* @CUSTOM: Restructured the node below for ease of styling */}\r\n \r\n {/* @CUSTOM: Replaced Remove button below with custom remove cartline handler if item is a kit with electives */}\r\n {kitElectives\r\n ?
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{cartEmptyText}

\r\n {backToShoppingButton}\r\n
\r\n ) : (\r\n <>{waitingComponent}\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 = (\r\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\r\n OrderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.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 = (\r\n orderSummaryLines: IOrderSummaryLines | undefined,\r\n OrderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.Element | null => {\r\n if (!orderSummaryLines) {\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 {/* @CUSTOM: moved summary lines inside container div */}\r\n
\r\n {/* @CUSTOM: move promo code to below order total */}\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 {/* @CUSTOM: moved promo inside a container div */}\r\n
\r\n {props.promoCode}\r\n
\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 * 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

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

\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 = (\r\n pickUpText: string,\r\n shippingText: string,\r\n emailShippingText: string,\r\n titleSeparate: string,\r\n cartLine: ICartlinesViewProps,\r\n emailDeliveryModeCode?: string\r\n) => {\r\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n

\r\n

{groupTitle}

\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 & ICartProps<{}>, productAttr: ProductSearchResult[]): JSX.Element | undefined => { // @CUSTOM: drop ship messaging imports\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
\r\n {renderCartLinesGroupHeader(\r\n props.resources.pickUpText,\r\n props.resources.shippingText,\r\n props.resources.emailshippingText,\r\n props.resources.titleSeparate,\r\n cartlines[0],\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n {_renderCartlines(\r\n cartlines,\r\n props.resources.emptyCartText,\r\n props.CartlinesWrapper,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n props.data, // @CUSTOM: Kit display - need access to cart data to connect parent kit with elective cart lines\r\n productAttr, // @CUSTOM: drop ship messaging imports\r\n props.resources.dropShipMessage // @CUSTOM: drop ship messaging imports\r\n )}\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n return props.cartDataResult ? (\r\n
\r\n
\r\n

{props.resources.emptyCartText}

\r\n {/* @CUSTOM: Moved button into container div */}\r\n
\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\n\r\n//----------------------------------------------------------\r\n// @CUSTOM: Render slot items\r\n//----------------------------------------------------------\r\nconst _renderSlotItems = (items: React.ReactNode[]): JSX.Element => {\r\n return (\r\n <>\r\n {items.map((slot: React.ReactNode, index: number) => (\r\n \r\n {slot}\r\n \r\n ))}\r\n \r\n );\r\n}\r\n\r\n//----------------------------------------------------------\r\n// @CUSTOM: Render empty cart button\r\n//----------------------------------------------------------\r\nconst renderRemoveFromCart = (props: ICartProps): JSX.Element | null => {\r\n if (!props.data.cart.result?.cart.CartLines?.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nconst CartView: React.FC> = (props) => { // @CUSTOM: extended definition props\r\n\r\n // @CUSTOM: drop ship messaging imports\r\n const [productAttr, productAttrLoaded] = React.useState([] as ProductSearchResult[]);\r\n React.useEffect(() => {\r\n\r\n const products = props.data.products?.result;\r\n\r\n const productIds = products?.map(product => {\r\n return { ItemId: product.ItemId };\r\n });\r\n\r\n const productAttributesInput = {\r\n ItemIds: productIds,\r\n IncludeProductsFromDescendantCategories: false,\r\n SkipVariantExpansion: true,\r\n IncludeAttributes: true,\r\n Context: {\r\n ChannelId: props.context.request.apiSettings.channelId,\r\n CatalogId: getCatalogId(props.context.request)\r\n },\r\n };\r\n\r\n searchByCriteriaAsync({ callerContext: props.context.actionContext }, productAttributesInput).then((attributes) => {\r\n productAttrLoaded(attributes);\r\n });\r\n\r\n }, []);\r\n //------------------------------------------------------\r\n\r\n return (\r\n // @CUSTOM: Added extended config class name below\r\n
\r\n {/* {props.checkoutBlockedDueToUnavailableFunds} */}\r\n {props.title}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {/* @CUSTOM: Added productAttr below for drop ship */}\r\n {props.multiplePickUpEnabled ? (\r\n renderCartLinesGroup(props, productAttr)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.cartlines,\r\n props.resources.emptyCartText,\r\n props.CartlinesWrapper,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n props.data, // @CUSTOM: Kit display - need access to cart data to connect parent kit with elective cart lines\r\n productAttr, // @CUSTOM: drop ship messaging imports\r\n props.resources.dropShipMessage // @CUSTOM: drop ship messaging imports\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {/* @CUSTOM: Installment calculator */}\r\n {props.slots?.installmentWidget?.length && _renderSlotItems(props.slots.installmentWidget)}\r\n {/* @CUSTOM: Moved buttons into container div */}\r\n
\r\n {props.checkoutAsSignInUserButton}\r\n {/* @CUSTOM: Removed checkout as guest {props.checkoutAsGuestButton}*/}\r\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\r\n {props.expressCheckoutButton}\r\n ) : null}\r\n {props.backToShoppingButton}\r\n {/*@CUSTOM: Added the empty cart button*/}\r\n {renderRemoveFromCart(props)}\r\n {props.createTemplateFromCartButton}\r\n
\r\n
\r\n )}\r\n {props.storeSelector}\r\n
\r\n );\r\n};\r\n\r\nexport default CartView;\r\n","//==============================================================================\r\n// D365 OData Attribute Parser\r\n//\r\n// In creating this, it became clear that \"attributes\" is a general term.\r\n//\r\n// Product attributes are a first-class entity. They have their own dedicated\r\n// fields and schema.\r\n//\r\n// The more generic term \"attributes\" is used as a generic extension system.\r\n// Almost every entity (including Product Attributes) has an ExtensionProperties\r\n// field for jamming extra information into. In some cases, D365 handles these\r\n// natively, such as sales order line and header attributes, or customer\r\n// attributes. Attributes using ExtensionProperties use the\r\n// CommerceProperty and CommercePropertyValue types.\r\n//\r\n// A major note about ExtensionProperty-based attributes: they have fields\r\n// for many different data types, but there's no indicator as to which\r\n// of the fields is actually used. The consumer of the data is expected to\r\n// know the data type ahead of time. In the case of D365-native attribute users\r\n// such as customers and sales orders, only the string type appears to work.\r\n//\r\n// This module includes parsers for generic ExtensionProperties-based attributes\r\n// and Product Attributes. Though different Product Attribute retail server\r\n// calls use the same AttributeValue entity to transmit the data, they appear\r\n// to return different fields from that entity. Because of this, two different\r\n// parser calls are included here. They currently share the same implementation,\r\n// but by including different call signatures we have the ability to diverge\r\n// the implementations if the need arises.\r\n//\r\n// A note about Product Attributes: These contain both a friendly name,\r\n// displayed to users in back office, and an internal name. The internal name\r\n// can be the same as the friendly name, but by convention we've been pushing\r\n// for a PascalCase scheme. At present, the searchByCriteria call returns only\r\n// the unfriendly name, and the GetAttributeValues call returns only the\r\n// friendly name. We don't have a known method of correlating the two. That may\r\n// be an argument for keeping the friendly and unfriendly names identical.\r\n//==============================================================================\r\nimport {\r\n CommerceProperty, // Generic attributes stored in ExtensionProperties\r\n CommercePropertyValue, // Generic attributes stored in AttributeValue\r\n AttributeValue, AttributeDataType, // Product attributes or Product Search Result attributes\r\n CustomerAttribute, // Customer attributes\r\n IDictionary,\r\n} from '@msdyn365-commerce/retail-proxy';\r\n\r\n//==============================================================================\r\n// INTERFACES AND CONSTANTS\r\n//==============================================================================\r\nexport type CommerceValueTypes = string | number | boolean | Date;\r\n\r\n// This is me giving up on proper typing. If doing this in TypeScript is possible, I don't know how.\r\n// For the key \"meta\", the type should be a hash of strings.\r\n// For all other keys, the type is a CommerceValueType.\r\nexport type AttributesWithMetadata = {\r\n [key: string]: CommerceValueTypes | IDictionary\r\n};\r\n\r\n// Type to support both internal and friendly name for attributes\r\nexport type AttributesLocalized = {\r\n [key: string]: {\r\n friendlyName?: string,\r\n value?: CommerceValueTypes | IDictionary\r\n }\r\n};\r\n\r\n// Return type for getTypeInfo()\r\ntype TypeData = {\r\n source: keyof AttributeValue,\r\n type: string,\r\n\r\n customerSource?: keyof CommercePropertyValue,\r\n};\r\n\r\n//==============================================================================\r\n// FUNCTIONS\r\n//==============================================================================\r\n\r\n//----------------------------------------------------------\r\n// This version handles ExtensionProperties conversion.\r\n//\r\n// While these have a bunch of potential fields, the value\r\n// is always stored within StringValue.\r\n// There isn't a data type field, so if the content wasn't\r\n// in StringValue we wouldn't know where to find it.\r\n//----------------------------------------------------------\r\nexport function convertExtensionProperties(attributeList: CommerceProperty[]): IDictionary {\r\n const output = {};\r\n\r\n attributeList.forEach(entry => {\r\n if (entry.Key) {\r\n output[entry.Key] = entry.Value?.StringValue; // Ecommerce seems to always use strings.\r\n }\r\n });\r\n\r\n return output;\r\n}\r\n\r\n//----------------------------------------------------------\r\n// For these attributes, the Name is always the friendly\r\n// name.\r\n// KeyName and ExtensionProperties aren't defined.\r\n//\r\n// These results seem to be missing CurrencyValue,\r\n// FloatValue, DateTimeOffsetValue\r\n// I don't know if those data types aren't allowed here.\r\n//\r\n// Return value: Hash of key: property values with variable\r\n// types. There is also a \"meta\" key containing a hash of\r\n// all the attribute keys and their corresponding types.\r\n//\r\n// Example:\r\n// {\r\n// flavor: 'bland',\r\n// calories: 5300,\r\n// meta: {\r\n// flavor: 'string',\r\n// calories: 'number'\r\n// }\r\n// }\r\n//----------------------------------------------------------\r\nexport function convertProductAttributes(attributeList: AttributeValue[]): AttributesWithMetadata {\r\n const output = {\r\n meta: {}\r\n };\r\n\r\n attributeList.forEach(attribute => {\r\n // These should always be present, but TypeScript insists they can be undefined.\r\n if (attribute.Name && attribute.DataTypeValue) {\r\n const typeData = getTypeInfo(attribute.DataTypeValue);\r\n output[attribute.Name] = attribute[typeData.source]; // Ecommerce seems to require strings\r\n output.meta[attribute.Name] = typeData.type;\r\n }\r\n });\r\n\r\n return output;\r\n}\r\n\r\n//----------------------------------------------------------\r\n// For these attributes, the Name is the friendly\r\n// name while KeyName is the internal name.\r\n//\r\n// This makes use of combined attributes containing both\r\n// internal and friendly name to support localization.\r\n//\r\n// Return value: Hash of internal name keys containing an object with both the\r\n// friendly name and attribute value There is also a \"meta\" key containing a\r\n// hash of all the attribute keys and their corresponding types.\r\n//\r\n// Example:\r\n// {\r\n// flavor: {\r\n// friendlyName: Flavor,\r\n// value: 'bland'\r\n// },\r\n// calories: {\r\n// friendlyName: Calories,\r\n// value: 5300\r\n// },\r\n// meta: {\r\n// flavor: 'string',\r\n// calories: 'number'\r\n// }\r\n// }\r\n//----------------------------------------------------------\r\nexport function convertProductAttributesLocalized(attributeList: AttributeValue[]): AttributesLocalized {\r\n const output = {\r\n meta: {}\r\n };\r\n\r\n attributeList.forEach(attribute => {\r\n if (attribute.KeyName && attribute.DataTypeValue) {\r\n const typeData = getTypeInfo(attribute.DataTypeValue);\r\n output[attribute.KeyName] = {\r\n friendlyName: attribute.Name,\r\n value: attribute[typeData.source]\r\n };\r\n output.meta[attribute.KeyName] = typeData.type;\r\n }\r\n });\r\n\r\n return output;\r\n}\r\n\r\n//----------------------------------------------------------\r\n// For these attributes, the\r\n// Name/KeyName/ExtensionProperties is always the unfriendly\r\n// name.\r\n//\r\n// These results are only missing the Swatches field.\r\n//\r\n// Though the returned value is a bit different, at present\r\n// the implementation for convertProductAttributes works for\r\n// search results.\r\n// If they diverge in the future, extend this function.\r\n//----------------------------------------------------------\r\nexport function convertSearchAttributes(attributeList: AttributeValue[]): AttributesWithMetadata {\r\n return convertProductAttributes(attributeList);\r\n}\r\n\r\n//----------------------------------------------------------\r\n// For these attributes, the Name is always the friendly\r\n// name. Value is always Text, and DataTypeValue is not\r\n// present here.\r\n//----------------------------------------------------------\r\nexport function convertCartAttributes(attributeList: AttributeValue[]): AttributesWithMetadata {\r\n const output = {};\r\n\r\n attributeList.forEach(attribute => {\r\n if (attribute.Name) {\r\n output[attribute.Name] = attribute.TextValue;\r\n }\r\n });\r\n\r\n return output;\r\n}\r\n\r\n//----------------------------------------------------------\r\n//----------------------------------------------------------\r\nexport function convertCustomerAttributes(attributeList: CustomerAttribute[] | undefined): AttributesWithMetadata {\r\n const output = {\r\n meta: {}\r\n };\r\n\r\n attributeList?.forEach(attribute => {\r\n // These should always be present, but TypeScript insists they can be undefined.\r\n if (attribute.Name && attribute.DataTypeValue) {\r\n const typeData = getTypeInfo(attribute.DataTypeValue);\r\n output[attribute.Name] = attribute.AttributeValue && typeData.customerSource && attribute.AttributeValue[typeData.customerSource];\r\n output.meta[attribute.Name] = typeData.type;\r\n }\r\n });\r\n\r\n return output;\r\n}\r\n\r\n//----------------------------------------------------------\r\n// Finds the source field and type for an attribute\r\n//\r\n// This should probably be extended to better support\r\n// currency, which seems to be two fields glued together.\r\n//----------------------------------------------------------\r\nfunction getTypeInfo(type: AttributeDataType): TypeData {\r\n\r\n // Awkward, but this helps TypeScript enforce strict type checking\r\n type TypeMapType = {\r\n [key in AttributeDataType]: TypeData\r\n };\r\n\r\n const typeMap: TypeMapType = {\r\n [AttributeDataType.None]: {source: 'TextValue', type: 'string'}, // We need to choose something\r\n [AttributeDataType.Currency]: {source: 'CurrencyValue', type: 'number'}, // Should also include CurrencyCode, which is a string?\r\n [AttributeDataType.DateTime]: {source: 'DateTimeOffsetValue', type: 'Date'},\r\n [AttributeDataType.Decimal]: {source: 'FloatValue', type: 'number'},\r\n [AttributeDataType.Integer]: {source: 'IntegerValue', type: 'number', customerSource: 'IntegerValue'},\r\n [AttributeDataType.Text]: {source: 'TextValue', type: 'string', customerSource: 'StringValue'},\r\n [AttributeDataType.TrueFalse]: {source: 'BooleanValue', type: 'boolean', customerSource: 'BooleanValue'},\r\n [AttributeDataType.Video]: {source: 'TextValue', type: 'string'},\r\n [AttributeDataType.Image]: {source: 'TextValue', type: 'string'}\r\n };\r\n\r\n return typeMap[type];\r\n}\r\n","//==============================================================================\r\n// Global Constants\r\n//\r\n// Consolidated list of constants reused across different modules and extensions\r\n//==============================================================================\r\n\r\n//----------------------------------------------------------\r\n// Attribute names list\r\n//----------------------------------------------------------\r\nexport const attrNames = {\r\n productType: 'Item Type',\r\n lineAttributes: 'LineAttributes',\r\n blacklistedShippingAreas: 'Embargoed shipping locations',\r\n kitConfigurator: 'KitConfigurator',\r\n kitContents: 'eCommBurstoutKitContents',\r\n kitFormats: 'eCommBurstoutKitFormats',\r\n kitElectives: 'eCommBurstoutKitElectives',\r\n kitSubstitutions: 'eCommBurstoutKitSubstitutions',\r\n kitLineSubstitutions: 'eCommBurstoutKitLineDetails',\r\n kitLineParentAssociation: 'eCommBurstoutKitOrderLineParentAssociation',\r\n kitLineChildAssociation: 'eCommBurstoutKitOrderLineChildAssociation',\r\n instructors: 'eCommInstructors',\r\n consultantCartAttribute: 'eCommConsultantId',\r\n isInstallmentEligible: 'eCommItemIsPPEligible',\r\n cashForCollege: 'eCommCash4College',\r\n dropShip: 'eCommDropShip',\r\n scoringType: 'TestScoring',\r\n studentId: 'eCommPTEStudentId',\r\n schoolIdPP: 'eCommPPSchoolId',\r\n testCoordinator: 'PTETestCoordinator',\r\n testEnrollment: 'PTESchoolEnrollment',\r\n testType: 'Test Type',\r\n testFormat: 'Test Format',\r\n testDate: 'eCommPTETestDate',\r\n testDateId: 'eCommPTETestDateId',\r\n testAdmin: 'eCommPTEAdminCustAccount',\r\n testProctorEmail: 'PTEProctorEmail',\r\n testProctorName: 'PTEProctorName',\r\n testProctorPhone: 'PTEProctorPhone',\r\n testProctorTimeZone: 'PTEProctorTimeZone',\r\n userAgreement: 'eCommUserAgreement',\r\n umbrellaGroup: 'UmbrellaGroupID',\r\n gradeLvl: 'Grade level',\r\n isNotTest: 'Other',\r\n onlineTest: 'Online test',\r\n purchaseItemType: 'TestBklt',\r\n notBuyable: 'Not Buyable',\r\n billingCountry: 'eCommBillingCountryCode',\r\n billingZipCode: 'eCommBillingZipPostalCode',\r\n paymentScheduleName: 'PaymentScheduleName',\r\n isDBOrder: 'IsDBOrder',\r\n troveAdminFirstName: \"TroveAdminFirstName\",\r\n troveAdminLastName: \"TroveAdminLastName\",\r\n troveAdminEmail: \"TroveAdminEmail\",\r\n troveAdminTelephone: \"TroveAdminTelephone\",\r\n troveAnnualLicense: \"TroveAnnualLicense\",\r\n troveProduct: \"Trove\",\r\n troveParticipant: \"TroveParticipant\",\r\n poNumber: \"CSPONumber\",\r\n publicSearchable: \"Publicly Searchable\"\r\n};\r\n\r\n//----------------------------------------------------------\r\n// Global label resources\r\n//----------------------------------------------------------\r\nexport const labelResources = {\r\n sku: 'SKU'\r\n};\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['cart'] = {\n c: () => require('@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'cartLinesPickUpOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-pickup-options-for-cartlines', runOn: 0},{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'customerBalances', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 0},{name:'productAvailabilites', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines', runOn: 0},{name:'products', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1},{name:'wishlistItems', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'cart',\n p: 'cart',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/cart/dist/lib/modules/cart'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-pickup-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-pickup-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|base|views|cart'] = {\n c: () => require('partner/themes/base/views/cart.view.tsx'),\n cn: '__local__-__local__-cart'\n };\nviewDictionary['@msdyn365-commerce-modules|cart|modules|cart|cart'] = {\n c: () => require('@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart.view.js'),\n cn: '@msdyn365-commerce-modules-cart-cart'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|cart'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/cart.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-cart'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|cart'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/cart.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-cart'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport {\n IListMapViewState,\n ILoadMapApiInput,\n IStoreInfo,\n IStoreSelectionStateContext,\n IStoreSelectorLocation,\n IStoreSelectorStateManager\n} from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(\n storeId?: string,\n storeName?: string | undefined,\n writeToCookie: boolean = false,\n latitude?: number,\n longitude?: number\n ): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\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 { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (\n !searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled\n ) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl =\n actionContext.requestContext.app &&\n actionContext.requestContext.app.config &&\n actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${\n geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT\n }/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${\n input.market ? `&setMkt=${input.market}` : ''\n }`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\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 { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\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 CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\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 cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\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.ValidationResultsByLineId ?? undefined);\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(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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\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 AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\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 isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\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: CartLineValidationResultsByLineId;\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 hasInvoiceLine?: 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 isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\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 shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\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 const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\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 isMultipleCatalogFeatureEnabledInHq\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(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\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 && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } 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:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\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\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\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 { 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\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\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, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _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, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, 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 ProductPickUpOptionsForCartLineItems,\n validateCatalogId\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 updateMaxQuantityForCartLineItem,\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';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\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 checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\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: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\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\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\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 =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\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 reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\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 = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || 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 checkoutBlockedDueToUnavailableFunds: 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 if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\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 (\n
\n {fullError}\n
\n );\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: CartLineValidationResultsByLineId = 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 const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\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: updateMaxQuantityForCartLineItem(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 isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\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: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\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 if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\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 private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\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: CartLineValidationResultsByLineId = 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 const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || 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 hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(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.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\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 { 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 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, StringExtensions } 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 if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\n }\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 MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartlinesViewProps, ICartResources, ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart';\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/dist/types/modules/cart/components/cart-line-items-promotion';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.cart?.hasInvoiceLine || props.multiplePickUpEnabled ? (\n _renderCartLinesGroup(props, props.resources)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\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\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\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean,\n telemetryContent?: ITelemetryContent,\n mulitplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n const { emptyCartText } = resources;\n\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map((cartLine, index) => {\n return (\n
\n {cartLine.cartline}\n {mulitplePickUp ? null : _renderBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {mulitplePickUp ? (\n \n {_renderGroupBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n ) : cartLine.addToOrderTemplate ? (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n ) : (\n <>\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{emptyCartText}

\n {backToShoppingButton}\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * On Toggle function.\n * @param cartLine -Cartline.\n * @param isBopisSelected -Boolean.\n * @returns Set state of button.\n */\nconst onToggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * On change store function.\n * @param cartLine -CartLine items prop.\n * @returns Set state of button.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(true);\n};\n\nconst _renderBOPISBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const {\n shipInsteadDisplayText,\n shipToAddressDisplayText,\n pickItUpDisplayText,\n pickUpAtStoreWithLocationText,\n changeStoreDisplayText\n } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
\n {isBopisSelected ? (\n {pickUpAtStoreWithLocationText}\n ) : (\n {shipToAddressDisplayText}\n )}\n
\n {isBopisSelected && (\n
\n {cartLine.pickUpInStore.orgUnitName}\n \n
\n )}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n
\n );\n};\n\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || errorData.errors.length === 0) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\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\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\nconst _renderCartLinesGroup = (props: ICartViewProps, resources: ICartResources): JSX.Element | undefined => {\n if (props.cartLinesGroup && props.cartLinesGroup.length > 0) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {_renderCartLinesGroupHeader(\n cartlines[0],\n props.storeSelector,\n resources,\n _countItems(cartlines),\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\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};\nconst _renderCartLinesGroupHeader = (\n cartLine: ICartlinesViewProps,\n storeSelector: React.ReactNode | undefined,\n resources: ICartResources,\n count: number,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText, payInvoicesDisplayText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (cartLine.data && cartLine.data.cartline.IsInvoiceLine) {\n groupTitle = payInvoicesDisplayText;\n } else if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {_renderCartLinesGroupTitle(cartLine, resources, count)}\n
\n \n );\n};\n\nconst _renderGroupBOPISBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? (\n \n ) : null}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\nconst _countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity || 0);\n }, 0);\n return countItem;\n};\n\nconst _renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n

\n ({count}\n {` `}\n {suffix})\n

\n
\n \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 { 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 customerAccountLabel?: string;\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 customerAccount?: 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 priceCurrency?: 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 priceCurrency\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 _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 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 // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n 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\n// eslint-disable-next-line complexity\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 DiscountAmount = 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 let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\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 reactNodes = {\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 customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\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 if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IAny,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { searchOrgUnitLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\n\n/**\n * Input for search-org-unit-locations data action.\n */\nexport class SearchOrgUnitLocationsInput implements IActionInput {\n public getCacheKey = () => 'SearchOrgUnitLocations';\n\n public getCacheObjectType = () => 'SearchOrgUnitLocations';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData -- Input data.\n * @returns -- IActionInput.\n */\nexport const createSearchOrgUnitLocationsInputFunc = (inputData: ICreateActionContext>): IActionInput => {\n return new SearchOrgUnitLocationsInput();\n};\n\n/**\n * Calls the Retail API and returns all the orgUnitLocations as array.\n * @param input - Input.\n * @param ctx - Context.\n * @returns - orgUnitLocations.\n */\nexport async function getSearchOrgUnitLocationsAction(\n input: SearchOrgUnitLocationsInput,\n context: IActionContext\n): Promise {\n const OrgUnitLocations = await searchOrgUnitLocationsAsync(\n {\n callerContext: context\n },\n {}\n );\n\n return OrgUnitLocations;\n}\n\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-org-unit-locations',\n action: >getSearchOrgUnitLocationsAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n\nexport default retailActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICartLineItemViewProps,\n ICartlinesViewProps,\n ICartResources,\n ICartViewProps,\n IOrderSummaryErrors\n} from '@msdyn365-commerce-modules/cart';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartProps as ICartExtensionProps } from '../definition-extensions/cart.ext.props.autogenerated';\n\n/**\n * Toggle Bopis Function.\n * @param cartLine -CartLine.\n * @param isBopisSelected -Boolean.\n * @returns Toggle Bopis.\n */\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * Change Store Function.\n * @param cartLine -CartLine.\n * @returns Toggle Bopis.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const {\n shipInsteadDisplayText,\n shipToAddressDisplayText,\n pickItUpDisplayText,\n pickUpAtStoreWithLocationText,\n changeStoreDisplayText\n } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
\n {isBopisSelected ? (\n {pickUpAtStoreWithLocationText}\n ) : (\n {shipToAddressDisplayText}\n )}\n
\n {isBopisSelected && (\n
\n {cartLine.pickUpInStore.orgUnitName}\n \n
\n )}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n
\n );\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderGroupBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? (\n \n ) : null}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLine = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element => {\n if (cartLine.error === resources.outOfStockErrorMessage) {\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (isMultiplePickUp) {\n return (\n \n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (cartLine.addToOrderTemplate) {\n return (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlinesInternal = (\n cartLines: ICartlinesViewProps[],\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n return cartLines.map((cartLine, index) => {\n const itemIndex = index;\n return (\n
\n {cartLine.cartline}\n \n {isMultiplePickUp\n ? null\n : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {renderCartLine(cartLine, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n
\n );\n });\n};\n\n/**\n * Render Cart Lines.\n * @param props - The cart line props.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param waitingComponent - Waiting component element.\n * @param cartLoadingStatus - Cart loading status string.\n * @param isCartDataResult - Flag to check if there is cart data.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlines = (\n props: ICartViewProps & ICartExtensionProps<{}>,\n cartLines: ICartlinesViewProps[] | undefined,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n isCartDataResult: boolean,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\n if (cartLines) {\n return props.multiplePickUpEnabled ? (\n renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\n ) : (\n \n {renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n );\n }\n\n return isCartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const itemCountOne: number = 1;\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\n const countTitle = `(${count} ${suffix})`;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n

{countTitle}

\n
\n \n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupHeader = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n count: number,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText, payInvoicesDisplayText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (cartLine.data && cartLine.data.cartline.IsInvoiceLine) {\n groupTitle = payInvoicesDisplayText;\n } else if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, resources, count)}\n
\n \n );\n};\n\n/**\n * Returns count of products.\n * @param cartLine - The cart line view props.\n * @returns Number of products.\n */\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n const defaultItemCount = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\n }, defaultItemCount);\n return countItem;\n};\n\n/**\n * Render Cart Lines group.\n * @param props - The cart line view props.\n * @param resources - Module resource strings.\n * @returns JSX Element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): 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 cartlines[0],\n resources,\n countItems(cartlines),\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {renderCartlines(\n props,\n cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\n/**\n * Render error block.\n * @param errorData - Error component.\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 * Render invoice summary.\n * @param invoiceSummaryLines - Invoice summary component.\n * @param orderSummaryItems - Order summary component.\n * @param props - The module 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 * Render order summary.\n * @param orderSummaryLines - Order summary component.\n * @param orderSummaryItems - Order summary items component.\n * @param props - The module 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 {orderSummaryLines.subtotal}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render error block.\n * @param promotions - The module 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 * Render order summary checkout.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.cart?.hasInvoiceLine ? null : props.promoCode}\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n \n {props.createTemplateFromCartButton}\n \n );\n};\n\n/**\n * Render order summary checkout button.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n \n );\n};\n\n/**\n * Render cart view.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\n const totalItemCountOne: number = 1;\n const updatedTitle = (\n

\n {props.resources.cartTitle}\n \n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? 'items' : 'item'})`}\n \n

\n );\n return (\n
\n {props.checkoutBlockedDueToUnavailableFunds}\n {updatedTitle}\n
{props.orderSummaryLineitems?.orderTotal}
\n {renderOrderSummaryCheckoutButton(props)}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\n {props.cart?.hasInvoiceLine || props.multiplePickUpEnabled\n ? renderCartLinesGroup(props, props.resources)\n : renderCartlines(\n props,\n props.cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n {props.orderSummaryHeading && (\n \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 \n {renderOrderSummaryCheckout(props)}\n \n )}\n {props.storeSelector}\n
\n );\n};\n\nexport default CartView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["removeKitItem","async","kitCartLine","cartLines","cartData","electiveCartLines","getElectiveCartLines","filter","cartLine","_kitCartLine$data","_cartLine$data","kitAttributes","data","cartline","AttributeValues","parsedKitAttributes","convertCartAttributes","attributes","parsedAttributes","attrNames","kitLineChildAssociation","kitLineParentAssociation","cart","result","input","cartLineIds","cartlineId","toString","forEach","electiveCartLine","push","removeCartLines","_renderCartlines","cartEmptyText","CartlinesWrapper","storeSelector","backToShoppingButton","waitingComponent","cartLoadingStatus","cartDataResult","productAttr","dropShipMessage","React","map","_productAttr$find","_cartLine$data3","_cartLine$cartlineId","find","item","_cartLine$data2","ItemId","isDropShip","convertProductAttributes","dropShip","cartLineData","lineAttributes","kitElectives","removeProps","remove","props","className","key","MsDyn365","isBrowser","pickUpInStore","Node","Object","assign","ContainerProps","defaultComponent","Button","onClick","addToWishlist","addToOrderTemplate","renderCartLinesGroupHeader","pickUpText","shippingText","emailShippingText","titleSeparate","emailDeliveryModeCode","_cartLine$pickUpInSto4","groupTitle","isBopisSelected","StringExtensions","isNullOrEmpty","DeliveryMode","toLowerCase","renderCartLinesGroupTitle","_cartLine$pickUpInSto","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","deliveryOption","orgUnitName","_props$cart","_props$cart2","_props$slots","productAttrLoaded","_props$data$products","products","productAttributesInput","ItemIds","product","IncludeProductsFromDescendantCategories","SkipVariantExpansion","IncludeAttributes","Context","ChannelId","context","request","apiSettings","channelId","CatalogId","getCatalogId","searchByCriteriaAsync","callerContext","actionContext","then","classnames","config","id","renderModuleAttributes","title","hasInvoiceLine","promotionOptions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","multiplePickUpEnabled","renderCartLinesGroup","cartLinesGroup","ArrayExtensions","hasElements","cartlines","_props$context$action","resources","emailshippingText","requestContext","channel","EmailDeliveryModeCode","emptyCartText","orderSummaryHeading","OrderSummaryWrapper","_renderInvoiceSummarylines","invoiceSummaryLines","OrderSummaryItems","invoices","giftCard","loyalty","orderTotal","telemetry","error","invoiceSummaryLineitems","_renderOrderSummarylines","orderSummaryLines","subtotal","shipping","otherCharge","tax","totalDiscounts","promoCode","orderSummaryLineitems","errorData","OrderSummaryErrors","errors","Wrapper","header","slots","installmentWidget","length","items","slot","index","checkoutAsSignInUserButton","expressCheckoutButton","ExpressCheckoutSectionWrapper","_props$data$cart$resu","CartLines","_props$data$cart$resu2","_props$data$cart$resu3","line","LineId","emptyCartButtonLabel","renderRemoveFromCart","createTemplateFromCartButton","attributeList","output","meta","attribute","Name","DataTypeValue","typeData","getTypeInfo","source","type","TextValue","convertCustomerAttributes","AttributeValue","customerSource","AttributeDataType","None","Currency","DateTime","Decimal","Integer","Text","TrueFalse","Video","Image","productType","blacklistedShippingAreas","kitConfigurator","kitContents","kitFormats","kitSubstitutions","kitLineSubstitutions","instructors","consultantCartAttribute","isInstallmentEligible","cashForCollege","scoringType","studentId","schoolIdPP","testCoordinator","testEnrollment","testType","testFormat","testDate","testDateId","testAdmin","testProctorEmail","testProctorName","testProctorPhone","testProctorTimeZone","userAgreement","umbrellaGroup","gradeLvl","isNotTest","onlineTest","purchaseItemType","notBuyable","billingCountry","billingZipCode","paymentScheduleName","isDBOrder","troveAdminFirstName","troveAdminLastName","troveAdminEmail","troveAdminTelephone","troveAnnualLicense","troveProduct","troveParticipant","poNumber","publicSearchable","labelResources","sku","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","_objectSpread","viewDictionary","cn","BaseStoreSelectorStateManager","constructor","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","this","isMapModuleLoaded","value","_readFromToCookie","storeInfo","JSON","parse","undefined","preferredStore","_unused","_context","storeId","selectedStoreLocationId","storeName","writeToCookie","arguments","StoreId","StoreName","Latitude","Longitude","_writeToCookie","stringify","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","localStorage","removeItem","setItem","cookieValue","getItem","__decorate","computed","observable","action","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","trim","query","encodeURI","geolocationApiUrl","app","requestUrl","Promise","resolve","script","document","createElement","setAttribute","resourceSets","point","coordinates","body","appendChild","_document","getElementById","url","lang","market","reject","_document2","_document3","defer","src","mapAPIReady","isMapApiLoaded","addEventListener","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","createObservableDataAction","getGenericAction","inputData","validateCartAsync","propsContext","cartResult","cartVersion","shouldRetry","Version","warning","debug","AsyncResult","_validationResult$Val","validationResult","CartsDataActions","bypassCache","Id","ValidationResultsByLineId","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","RecordId","ProductId","Behavior","MaximumQuantity","cartLineId","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","ProductPickUpOptionsForCartLineItems","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getPickUpOptionsForCartLineItems","getCartState","getActiveCartProductsAction","ActiveCartProductsInput","response","ProductsDataActions","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","PickUpInStore","_toggleBOPIS","storeSelectorStateManager","storeSelectorModuleId","openDialog","alreadySelectedLocation","OrgUnitNumber","FulfillmentStoreId","deliveryOptions","onLocationSelected","orgUnitLocation","deliveryMode","updateCartLinePickupLocation","location","status","locationChangedHandler","catch","_onLocationChangedCallback","ShippingAddress","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","orgUnitLocations","foundLocation","OrgUnitName","DeliveryOptions","_props$channelDeliver","retailMulitplePickupFeatureState","channelDeliveryOptionConfig","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","delivery","pickup","deliveryCode","Code","PickupDeliveryModeCodes","pickupDeliveryModeCode","option","callbacks","toggleBopis","_renderShippingMethod","shipItText","pickupInStoretext","changeStoreText","bopisSelected","toggleBOPIS","onChange","checked","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","Description","_assembleNode","foundProductAvailability","productPickUpOptions","_foundProductAvailabi","_product$Dimensions","_props$cartState","_context$request$chan","imageSettings","gridSettings","typeName","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isMultipleCatalogFeatureEnabledInHq","isAuthenticated","user","nameOfWishlist","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","Service","IsInvoiceLine","errorMessage","ObjectExtensions","isNullOrUndefined","_getErrorMessage","currentQuantity","lineId","_props$productAvailab","finalErrorMessages","productAvailabilites","outOfStockText","includeErrors","outOfRangeOneText","outOfRangeFormatText","replace","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","i","ValidationFailures","validation","ErrorContext","join","Quantity","onRemoveClickHandler","onRemoveClickFunction","payload","getPayloadObject","TelemetryEvent","RemoveFromCart","telemetryContent","getTelemetryAttributes","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","Value","productUrl","getProductUrlSync","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","href","searchParams","set","getInvoiceDetailsPageUrlSync","hasError","CartLineItemComponent","catalogs","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","primaryImageUrl","PrimaryImageUrl","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","priceCurrency","pickitUpText","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","AddToOrderTemplateComponent","shouldShowButtonFailedTooltip","disableButton","disableTooltip","catalogId","assembleCartlines","reactNodes","isPickUpItem","isCartLineItemPickUpType","_productAvailability$","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","toUpperCase","CartLineGroupItems","_assembleGroupInvoiceCartlines","carLineViewProps","_assembleGroupCartlines","getGroupByStorePickup","groupBy","groupDelivery","entries","_ref","deliveryType","groupByDeliveryType","keys","getPromotionData","ctx","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","exception","Cart","super","_isMounted","promotionPopupId","promotionLinkClick","event","setState","showPromotionDialog","state","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","removeItemFromCartHandler","cartlineToRemove","validateCart","updateCartlineQuantity","cartlineToUpdate","cartActionResult","_cartActionResult$err","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","getTelemetryObject","telemetryPageName","friendlyName","payLoad","bind","isCartValid","_this$props$data$cart","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","reaction","_this$props$data$cart2","_this$props$data$cart3","componentWillUnmount","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_cart$cart$CartLines","_this$props$data$prod","_this$props$data$feat","_featureState$result","signInUrl","guestCheckoutUrl","getUrlSync","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","RetailMultiplePickupFeatureState","featureState","IsEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","validateCatalogId","getCartLinesGroup","contentAction","etext","TelemetryConstant","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","BackToShopping","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","viewProps","cartTitle","_getPromoCode","_getPromotions","removePromoAriaLabelFormat","invoiceSummaryTitle","orderSummaryTitle","_getOrderSummaryLineItems","_getInvoiceSummaryLineItems","disabled","checkoutButtonTitle","checkoutAsGuestButton","showGuestCheckoutButton","guestCheckoutButtonTitle","paymentExpress","backToShoppingButtonTitle","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","checkoutBlockedDueToUnavailableFunds","Waiting","cartLoadingErrorMessage","isEmpty","_getOrderSummaryErrors","renderView","_this$props$data$cart4","_cart$cart","showPromotionPopup","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionStringHeading","tabIndex","role","Modal","isOpen","toggle","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","tag","Alert","color","assertive","outOfStockErrorMessageHeader","InvoiceSummary","orderTotalLabel","totalAmountLabel","invoiceLabel","_this$props","_featureState$result2","_this$props$context$r2","channelConfiguration","retailMultiplePickUpOptionEnabled","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","taxLabel","estimatedTaxLabel","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","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","freePriceText","originalPriceText","currentPriceText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$cata","PickupDeliveryModeCode","storeSelectorId","CartLineItems","productDeliveryOptions","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","warehouseAggregation","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","amountString","productDimensionTypeAmount","quantityDisplayString","quantityDisplayText","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","discountStringText","shippingChargesText","shippingCharges","salesAgreementPricePrompt","priceEditorResources","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","urlCheck","returnURL","origin","includes","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find","featureStatuses","customerInfo","IsB2b","_featureStatuses$find2","isChannelLimitsFeatureEnabledInHq","_this$props$data$feat4","_featureState$result3","_this$props$data$chan","_this$props$data$cata2","_this$props$data$chan2","_this$props$data$cart5","cartLinesPickUpOptions","observer","_renderPromotions","mulitplePickUp","_renderBOPISBlock","_renderGroupBOPISBlock","onToggleBopisHandler","onChangeStoreHandler","shipToAddressDisplayText","pickUpAtStoreWithLocationText","PickupInStore","puckUpinStoreAttribute","_renderErrorBlock","_renderCartLinesGroup","_props$context$action2","_props$context$action3","_renderCartLinesGroupHeader","_countItems","count","payInvoicesDisplayText","_renderCartLinesGroupTitle","countItem","reduce","_item$data","itemLabel","itemsLabel","suffix","InvoiceSummaryLine","price","label","cssLabel","PriceComponent","CustomerContextualPrice","_buildPaymentSummarySection","_computedLoyaltyAmount","checkoutState","loyaltyAmount","TotalAmount","invoiceLines","invoiceLine","InvoiceAmount","format","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","giftCardCounter","Balance","amount","Math","min","totalAmountAfterGiftCard","loyaltyLabel","giftcardLabel","OrderSummaryLine","currencyCode","_buildOrderSummarySection","getDeliveryMode","_channelDeliveryOptio","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","canShip","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","customerAccountAmount","customerAccount","customerAccountLabel","SearchOrgUnitLocationsInput","createSearchOrgUnitLocationsInputFunc","getSearchOrgUnitLocationsAction","searchOrgUnitLocationsAsync","retailActionDataAction","toggleBopisHandler","renderCartLine","isMultiplePickUp","renderGroupBopisBlock","renderCartlinesInternal","itemIndex","renderBopisBlock","renderCartlines","isCartDataResult","emptyCart","_cartLine$pickUpInSto6","_cartLine$pickUpInSto5","countTitle","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","_props$cart6","updatedTitle","Number","totalItemsInCart","renderOrderSummaryCheckoutButton","_item$data$cartline$Q","countItems","renderInvoiceSummarylines","orderSummaryItems","renderOrderSummarylines","renderOrderSummaryCheckout","module","exports","ReactDOM"],"sourceRoot":""}