{"version":3,"file":"static/js/62ef173b7ba764d547a8.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/moekwrsitetheme/views/components/flyout-cart-line-items.tsx?801f","webpack://Msdyn365.Commerce.Online/./src/themes/moekwrsitetheme/views/utils/get-products-in-mini-cart.ts?55f1","webpack://Msdyn365.Commerce.Online/./src/themes/moekwrsitetheme/views/cart-icon.view.tsx?b9da","webpack://Msdyn365.Commerce.Online/./src/themes/moekwrsitetheme/views/components/carticon.component.tsx?53a2","webpack://Msdyn365.Commerce.Online/./src/themes/moenzcsitetheme/views/components/flyout-cart-line-items.tsx?714c","webpack://Msdyn365.Commerce.Online/./src/themes/moenzcsitetheme/views/utils/get-products-in-mini-cart.ts?649d","webpack://Msdyn365.Commerce.Online/./src/themes/moenzcsitetheme/views/cart-icon.view.tsx?8476","webpack://Msdyn365.Commerce.Online/./src/themes/moenzcsitetheme/views/components/carticon.component.tsx?20ee","webpack://Msdyn365.Commerce.Online/./src/themes/moetwksitetheme/views/components/flyout-cart-line-items.tsx?902b","webpack://Msdyn365.Commerce.Online/./src/themes/moetwksitetheme/views/utils/get-products-in-mini-cart.ts?c691","webpack://Msdyn365.Commerce.Online/./src/themes/moetwksitetheme/views/cart-icon.view.tsx?3e33","webpack://Msdyn365.Commerce.Online/./src/themes/moetwksitetheme/views/components/carticon.component.tsx?572b","webpack://Msdyn365.Commerce.Online/./src/utilities/constants.ts?f70a","webpack://Msdyn365.Commerce.Online/./src/utilities/language-change.ts?a435","webpack://Msdyn365.Commerce.Online/./lib/cart-icon/module-registration.js?4d28","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/cart-icon.view.tsx?7ec9","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\r\nimport { ICoreContext, IGridSettings, IImageSettings, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n OrgUnitLocation,\r\n ProductAvailableQuantity,\r\n ProductDeliveryOptions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { BsFillTrashFill } from 'react-icons/bs';\r\nimport * as React from 'react';\r\n// import { getMiniCartData, IMiniCartData } from '../utils/get-products-in-mini-cart';\r\n\r\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '@msdyn365-commerce-modules/cart';\r\nimport { ACTION_BUTTONS, KWR } from '../../../../utilities/constants';\r\nimport { getToggleLang, getUserPrefLang, getUserPreferredLanguage } from '../../../../utilities/language-change';\r\n// import CartLineItemComponent from './cartlineitem.component';\r\n\r\nexport interface IFlyoutCartLineItemsProps {\r\n cartlines: CartLine[];\r\n cartState: ICartState | undefined;\r\n orgUnitLocations: OrgUnitLocation[] | undefined;\r\n resources: ICartlineResourceString;\r\n productAvailabilites: IProductInventoryInformation[] | undefined;\r\n products: SimpleProduct[] | undefined;\r\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\r\n pickupDeliveryModeCode?: string;\r\n\r\n /**\r\n * GridSettings for the product image in cartline\r\n */\r\n gridSettings: IGridSettings;\r\n\r\n /**\r\n * ImageSettings for the product image in cartline\r\n */\r\n imageSettings: IImageSettings;\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n removeButtonText: string;\r\n outOfStockText: string;\r\n outOfRangeOneText: string;\r\n outOfRangeFormatText: string;\r\n maxCartlineQuantity: number;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n isQuantityLimitsFeatureEnabled: boolean;\r\n\r\n outOfStockThreshold: number;\r\n isStockCheckEnabled: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n // quickViewButton?: React.ReactNode;\r\n}\r\n\r\nexport interface IFlyoutCartLineItemViewProps {\r\n cartline: React.ReactNode;\r\n remove: React.ReactNode;\r\n storeLocation: React.ReactNode;\r\n hasError: boolean;\r\n\r\n data: {\r\n product: SimpleProduct;\r\n cartline: CartLine;\r\n };\r\n}\r\n\r\nconst _getCartItemAvailableQuantity = (\r\n isStockCheckEnabled: boolean,\r\n outOfStockThreshold: number,\r\n productAvailability?: ProductAvailableQuantity\r\n): number => {\r\n if (isStockCheckEnabled) {\r\n if (\r\n !productAvailability ||\r\n !productAvailability.AvailableQuantity ||\r\n productAvailability.AvailableQuantity <= 0 ||\r\n productAvailability.AvailableQuantity <= outOfStockThreshold\r\n ) {\r\n return 0;\r\n }\r\n return productAvailability.AvailableQuantity - outOfStockThreshold;\r\n }\r\n\r\n return 0;\r\n};\r\n\r\nconst _getCartItemMaxQuantity = (\r\n maxQuantityByConfig: number,\r\n isStockCheckEnabled: boolean,\r\n availableQuantityInStock: number,\r\n isQuantityLimitsFeatureEnabled: boolean,\r\n maxByQuantityLimitsFeature: number\r\n) => {\r\n if (isQuantityLimitsFeatureEnabled) {\r\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\r\n\r\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\r\n // and consider available qty if stock check enabled and max from config in site settings.\r\n if (!maxByQuantityLimitsFeature) {\r\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\r\n }\r\n\r\n return isStockCheckEnabled\r\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\r\n ? maxByQuantityLimitsFeatureResult\r\n : availableQuantityInStock\r\n : maxByQuantityLimitsFeatureResult;\r\n }\r\n if (isStockCheckEnabled) {\r\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\r\n }\r\n return maxQuantityByConfig;\r\n};\r\n\r\n/**\r\n * On Remove Click functionality.\r\n * @param removeItemClickHandler -Remove item click function.\r\n * @param cartline -CartLine.\r\n * @returns Remove change value.\r\n */\r\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\r\n removeItemClickHandler(cartline);\r\n};\r\nconst _assembleNode = (\r\n cartline: CartLine,\r\n product: SimpleProduct,\r\n props: IFlyoutCartLineItemsProps,\r\n index: number,\r\n foundProductAvailability?: ProductAvailableQuantity,\r\n foundProductDeliveryOptions?: ProductDeliveryOptions\r\n): IFlyoutCartLineItemViewProps => {\r\n const { imageSettings, gridSettings, id, typeName, context, resources, removeItemClickHandler } = props;\r\n\r\n // Identifying Language\r\n const toggleLang = getToggleLang(context);\r\n const userPrefLang = getUserPrefLang(context.request.user.customerAccountNumber as any, context);\r\n const preferredLanguage: any = getUserPreferredLanguage(KWR, ACTION_BUTTONS, userPrefLang, toggleLang, context);\r\n\r\n const removeButtonText = 'Remove';\r\n const removeButtonTextInMaori = 'Tangohia';\r\n\r\n const availableQuantityInStock = _getCartItemAvailableQuantity(\r\n props.isStockCheckEnabled,\r\n props.outOfStockThreshold,\r\n foundProductAvailability\r\n );\r\n const maxQuantity =\r\n product &&\r\n _getCartItemMaxQuantity(\r\n props.maxCartlineQuantity,\r\n props.isStockCheckEnabled,\r\n availableQuantityInStock,\r\n props.isQuantityLimitsFeatureEnabled,\r\n product?.Behavior?.MaximumQuantity || 0\r\n );\r\n\r\n // Check if the product is service or not by product type\r\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\r\n\r\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\r\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n\r\n return {\r\n data: {\r\n product,\r\n cartline\r\n },\r\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\r\n cartline: (\r\n \r\n ),\r\n remove: (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n storeLocation: _renderStoreLocation(cartline, props)\r\n };\r\n};\r\n\r\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\r\n if (cartLine && cartLine.FulfillmentStoreId) {\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\r\n\r\n if (orgUnitName) {\r\n return (\r\n
\r\n {orgUnitName}\r\n
\r\n );\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\r\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\r\n return '';\r\n }\r\n\r\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\r\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\r\n });\r\n\r\n if (foundLocation) {\r\n return foundLocation.OrgUnitName;\r\n }\r\n return fulfillmentStoreId;\r\n};\r\n\r\nconst _assembleCartlines = (\r\n cartlines: CartLine[],\r\n products: SimpleProduct[] | undefined,\r\n props: IFlyoutCartLineItemsProps\r\n): IFlyoutCartLineItemViewProps[] | null => {\r\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\r\n\r\n if (!products || products.length === 0) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n cartlines.map((cartline, index) => {\r\n let product;\r\n if (props.isQuantityLimitsFeatureEnabled) {\r\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\r\n // to check productId and WarehouseId for identification.\r\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\r\n } else {\r\n product = getProductByProductId(cartline.ProductId, products);\r\n }\r\n let foundProductAvailability;\r\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\r\n });\r\n }\r\n let foundProductDeliveryOption;\r\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\r\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\r\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\r\n });\r\n }\r\n if (product) {\r\n reactNodes.push(\r\n _assembleNode(\r\n cartline,\r\n product,\r\n props,\r\n index,\r\n foundProductAvailability?.ProductAvailableQuantity,\r\n foundProductDeliveryOption\r\n )\r\n );\r\n }\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLineItems component.\r\n */\r\n\r\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\r\n const { products, cartlines } = props;\r\n return _assembleCartlines(cartlines, products, props);\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ActiveCartProductsInput, getActiveCartProductsAction, getAvailabilitiesForCartLineItems, getDeliveryOptionsForCartLineItems, IProductInventoryInformation, ProductAvailabilitiesForCartLineItems, ProductDeliveryOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * IMiniCartData entity interface.\r\n */\r\nexport interface IMiniCartData {\r\n products?: SimpleProduct[];\r\n productAvailabilites?: IProductInventoryInformation[];\r\n deliveryOptions?: ProductDeliveryOptions[];\r\n}\r\n\r\nexport const createInput = () => {\r\n return new ActiveCartProductsInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a mini cart data.\r\n * @param ctx\r\n * @param cartState\r\n */\r\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\r\n const miniCartData: IMiniCartData = {};\r\n\r\n const cart = cartState.cart;\r\n\r\n // If there are cart lines, make call to get products\r\n // If there are invocie linese, then there is no products, so don't make call to get products\r\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\r\n await getActiveCartProductsAction(\r\n new ActiveCartProductsInput(),\r\n ctx\r\n )\r\n .then(products => {\r\n if (products) {\r\n miniCartData.products = products;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getAvailabilitiesForCartLineItems(\r\n new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings),\r\n ctx\r\n )\r\n .then(availableQuantity => {\r\n if (availableQuantity) {\r\n miniCartData.productAvailabilites = availableQuantity;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getDeliveryOptionsForCartLineItems(\r\n new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings),\r\n ctx\r\n )\r\n .then(deliveryOptions => {\r\n if (deliveryOptions) {\r\n miniCartData.deliveryOptions = deliveryOptions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n }\r\n\r\n return miniCartData;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { IImageSettings, getUrlSync, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { ICartViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartIconViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart-icon/./cart-icon';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n INodeProps,\r\n KeyCodes,\r\n Modal,\r\n Node,\r\n onTelemetryClick,\r\n ITelemetryContent,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\nimport { CartIconComponent } from './components/carticon.component';\r\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\r\nimport { OrgUnitLocation, CartLine, LineDataValidationFailure, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\r\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { reaction } from 'mobx';\r\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\r\n\r\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\r\nimport { COLLECTIONS_SITE_LANGUAGE, ERROR_OR_NOTIFICATION, HEADER_FOOTER, KWR, MAORI_LANG } from '../../../utilities/constants';\r\nimport { getToggleLang, getUserPrefLang, getUserPreferredLanguage } from '../../../utilities/language-change';\r\n\r\n/**\r\n * ICartIconViewState: Interface for Cart Icon View State.\r\n */\r\ninterface ICartIconViewState {\r\n isModalOpen: boolean;\r\n miniCartData: IMiniCartData;\r\n orgUnitLocations?: OrgUnitLocation[];\r\n isQuantityLimitsFeatureEnabled?: boolean;\r\n isCartValid?: boolean;\r\n viewCartEmptyMsg: boolean;\r\n preferredLanguage: string;\r\n preferredLanguageInError: string;\r\n siteLang: string;\r\n}\r\n\r\n/**\r\n * Render Cart lines.\r\n * @param cartLines - Flyout cart line view props.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n return cartLines.map((cartLine, index) => {\r\n const cartLineIndex = index;\r\n console.log('Cart icon view - renderCartlines loop:', cartLine);\r\n return (\r\n \r\n {cartLine.cartline}\r\n {/* {props.slots?.quickview &&\r\n cartLine!?.data?.product?.RecordId &&\r\n renderQuickView(props.slots?.quickview, cartLine!?.data?.product?.RecordId)} */}\r\n {cartLine.remove}\r\n {/* {cartLine.storeLocation} */}\r\n \r\n );\r\n });\r\n};\r\n\r\n/**\r\n// * Gets the react node for product description.\r\n// * @param quickview - Quick view node.\r\n// * @param item - Product id to de displayed in quickview.\r\n// * @returns The product quickview component.\r\n// */\r\n// function renderQuickView(quickview: React.ReactNode, item: number): JSX.Element | undefined {\r\n// if (quickview === null) {\r\n// return undefined;\r\n// }\r\n// return React.cloneElement(quickview as React.ReactElement);\r\n// }\r\n\r\n/**\r\n * Initiate total price.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\n// const renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n// const cart = props.data.cart.result ?? undefined;\r\n// const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\r\n// const totalPrice = price\r\n// ? props.context.cultureFormatter.formatCurrency(price)\r\n// : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\r\n// return (\r\n//
\r\n// \r\n// {props.resources.totalPriceFormatString}\r\n// {totalPrice}\r\n// \r\n//
\r\n// );\r\n// };\r\n\r\nenum cartLinesSortOrder {\r\n ascending = 'ascending',\r\n descending = 'descending'\r\n}\r\n\r\n/**\r\n *\r\n * CartIconView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class CartIconView extends React.PureComponent<\r\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\r\n ICartIconViewState\r\n> {\r\n private isAutoDisplayTriggered: boolean;\r\n\r\n private lastValidatedCartVersion: number | undefined;\r\n\r\n private readonly telemetryContent: ITelemetryContent | undefined;\r\n\r\n private retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\r\n super(props);\r\n this.isAutoDisplayTriggered = false;\r\n this.state = {\r\n isModalOpen: false,\r\n miniCartData: {},\r\n viewCartEmptyMsg: true,\r\n preferredLanguage: 'english',\r\n preferredLanguageInError: 'maori',\r\n siteLang: 'english'\r\n };\r\n }\r\n\r\n public componentDidUpdate() {\r\n if (this.props.data.cart.result?.isEmpty) {\r\n setTimeout(() => {\r\n this.setState({\r\n viewCartEmptyMsg: true\r\n });\r\n }, 1000);\r\n } else {\r\n this.setState({\r\n viewCartEmptyMsg: false\r\n });\r\n }\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('keydown', this._escFunction, false);\r\n }\r\n\r\n const context = this.props.context.actionContext;\r\n\r\n reaction(\r\n () => this.props.data.cart.result?.cart.CartLines,\r\n async () => {\r\n this.setState({\r\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\r\n });\r\n }\r\n );\r\n\r\n this.setState({\r\n orgUnitLocations: this.props.data.orgUnitLocations?.result\r\n });\r\n await this._setOrderQuantityLimitsFeatureFlag();\r\n this._validateCart();\r\n void this._getCustomerLangDetails();\r\n }\r\n\r\n private _validateCart(): void {\r\n const {\r\n data: { cart }\r\n } = this.props;\r\n const cartVersion = cart.result?.cart?.Version ?? undefined;\r\n if (this.lastValidatedCartVersion === cartVersion) {\r\n return;\r\n }\r\n\r\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\r\n validateCartAsync(this.state.isQuantityLimitsFeatureEnabled, cart, this.props.telemetry, this.props.context)\r\n .then((result: LineDataValidationFailure[] | undefined) => {\r\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result) });\r\n })\r\n .catch(() => {\r\n this.setState({ isCartValid: false });\r\n });\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\r\n if (this.props.data.cart.result) {\r\n const input = {\r\n cartLineIds: [cartlineToRemove.LineId!.toString()]\r\n };\r\n this.props.data.cart.result.removeCartLines(input).catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to Remove Cart Line');\r\n });\r\n }\r\n };\r\n\r\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\r\n return (\r\n imageSettings || {\r\n viewports: {\r\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\r\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n }\r\n );\r\n };\r\n\r\n private async _setOrderQuantityLimitsFeatureFlag(): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n try {\r\n const featureStatuses = await this.props.data.featureState;\r\n const isQuantityLimitsFeatureEnabledInHq =\r\n featureStatuses.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n } catch (error) {\r\n this.props.telemetry.warning(error as string);\r\n this.props.telemetry.debug('Unable to get feature states');\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: true });\r\n } else {\r\n this.props.data.customerInformation\r\n .then(customerInfo => {\r\n const result =\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\r\n this.setState({ isQuantityLimitsFeatureEnabled: result });\r\n })\r\n .catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to get customer info');\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Sort cartline items.\r\n * @param cartlines - Cartlines to be sorted.\r\n * @param sortOrder - Ascending or descending.\r\n * @returns - Sorted cartlines.\r\n */\r\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\r\n const lines: CartLine[] = [...cartlines];\r\n const zero: number = 0;\r\n\r\n if (sortOrder === cartLinesSortOrder.descending) {\r\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\r\n }\r\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\r\n };\r\n\r\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\r\n const {\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n },\r\n config,\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n const imageSettings = this._getImageSettings(config.imageSettings);\r\n const cart = this.props.data.cart && this.props.data.cart.result;\r\n\r\n // Cart-icon could be placed in each page\r\n // so we check cart content to reduce number of RS calls\r\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\r\n ? FlyoutCartLineItems({\r\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\r\n products: this.state.miniCartData.products,\r\n productAvailabilites: this.state.miniCartData.productAvailabilites,\r\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\r\n imageSettings,\r\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n inputQuantityAriaLabel: '', // Not used\r\n discountStringText: '', // Not used\r\n originalPriceText: '',\r\n currentPriceText: '',\r\n shippingChargesText: ''\r\n },\r\n telemetry,\r\n removeButtonText: resources.removeCartButtonText,\r\n outOfStockText: '', // Not used\r\n outOfRangeOneText: '', // Not used\r\n outOfRangeFormatText: '', // Not used\r\n cartState: cart,\r\n orgUnitLocations: this.state.orgUnitLocations,\r\n removeItemClickHandler: this._removeItemFromCartHandler,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n telemetryContent: this.telemetryContent,\r\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\r\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled\r\n // quickViewButton: this.props.slots.quickview\r\n } as any)\r\n : null;\r\n }\r\n\r\n private _getCustomerLangDetails() {\r\n // Identifying Language\r\n const toggleLang = getToggleLang(this.props.context);\r\n const userPrefLang = getUserPrefLang(this.props.context.request.user.customerAccountNumber as any, this.props.context);\r\n this.setState({\r\n ...this.state,\r\n preferredLanguage: getUserPreferredLanguage(KWR, HEADER_FOOTER, userPrefLang, toggleLang, this.props.context),\r\n preferredLanguageInError: getUserPreferredLanguage(KWR, ERROR_OR_NOTIFICATION, userPrefLang, toggleLang, this.props.context),\r\n siteLang: getUserPreferredLanguage(KWR, COLLECTIONS_SITE_LANGUAGE, userPrefLang, toggleLang, this.props.context)\r\n });\r\n }\r\n\r\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\r\n if (isAuthenticated) {\r\n return guestCheckoutUrl;\r\n }\r\n\r\n const absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n const isAbsoluteUrl = absoluteUrlRegExp.test(guestCheckoutUrl);\r\n let returnURL = guestCheckoutUrl;\r\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\r\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\r\n }\r\n\r\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\r\n }\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @returns JSX Element.\r\n */\r\n public render(): JSX.Element | null {\r\n const cart = this.props.data.cart.result ?? undefined;\r\n const {\r\n config: { isAnonymousCheckout },\r\n context: {\r\n request: {\r\n user: { isAuthenticated, signInUrl }\r\n }\r\n },\r\n cartlines,\r\n resources,\r\n context,\r\n id,\r\n typeName,\r\n config\r\n } = this.props;\r\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\r\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\r\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\r\n const hasInvoiceLine = cart?.hasInvoiceLine;\r\n const hasError = cartlines ? cartlines.some(cartline => cartline.hasError) : false;\r\n const telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n\r\n const payload = getPayloadObject(TelemetryEvent.CheckOut, telemetryContent, TelemetryConstant.Checkout);\r\n const checkoutBySignInAttributes = getTelemetryAttributes(telemetryContent, payload);\r\n\r\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\r\n const checkoutByGuestAttributes = getTelemetryAttributes(telemetryContent, payload);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const {} = this.props;\r\n const shouldShowMiniCart =\r\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n if (shouldShowMiniCart) {\r\n if (!this.isAutoDisplayTriggered) {\r\n // First time trigger auto mini cart.\r\n this.setState({ isModalOpen: true });\r\n this.isAutoDisplayTriggered = true;\r\n } else if (!this.state.isModalOpen) {\r\n // If modal is closed, reset the flag.\r\n this.isAutoDisplayTriggered = false;\r\n }\r\n }\r\n\r\n const cartLines = this._getCartLines();\r\n // if(this.props.data.cart.result?.isEmpty && !this.state.viewCartEmptyMsg) {\r\n // setTimeout(() => {\r\n // this.setState({\r\n // viewCartEmptyMsg: true\r\n // });\r\n // }, 1000);\r\n // }\r\n // else {\r\n // this.setState({\r\n // viewCartEmptyMsg: false\r\n // });\r\n // }\r\n\r\n const checkoutAsSignInUserButton =\r\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\r\n \r\n {this.state.preferredLanguage === 'maori' ? resources.checkoutButtonTitleInMaori : resources.checkoutButtonTitle}\r\n \r\n ) : null;\r\n\r\n const checkoutAsGuestButton =\r\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\r\n \r\n {this.state.preferredLanguage === 'maori'\r\n ? resources.guestCheckoutButtonTitleInMaori\r\n : resources.guestCheckoutButtonTitle}\r\n \r\n ) : null;\r\n\r\n const cartIcon = (\r\n \r\n );\r\n return (\r\n \r\n \r\n \r\n \r\n {this.state.siteLang === MAORI_LANG ? this.props.config.flyoutTitleInMaori : this.props.config.flyoutTitle}\r\n {/* {this._renderCartItemCount(this.props)} */}\r\n {this._renderCartCloseIcon()}\r\n \r\n \r\n {this.props.data.cart.result?.isEmpty && this.state.viewCartEmptyMsg ? (\r\n

\r\n {this.state.preferredLanguageInError === 'maori' ? resources.emptyKeteTextInMaori : resources.emptyKeteText}\r\n

\r\n ) : null}\r\n {renderCartlines(cartLines as any, this.props)}\r\n
\r\n \r\n {/* {this.props.slots.promoContentItem} */}\r\n {/* {renderTotalPrice(this.props)} */}\r\n {/*

{this.props.resources.subTotalMessage}

*/}\r\n {checkoutAsSignInUserButton}\r\n {checkoutAsGuestButton}\r\n {/* {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton} */}\r\n \r\n {/* {this.props.data.cart.result?.isEmpty ? (\r\n \r\n {this.props.resources.continueShoppingButtonTitle}\r\n \r\n ) : null} */}\r\n \r\n {this.state.preferredLanguage === 'maori'\r\n ? resources.continueBrowsingTextInMaori\r\n : resources.continueBrowsingText}\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Initiate modal container.\r\n * @returns Inode props.\r\n */\r\n private readonly _modalContainer = (): INodeProps => {\r\n return {\r\n tag: Modal,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__minicartmodal-container',\r\n wrapClassName: 'ms-cart-icon__minicartmodal',\r\n isOpen: this.state.isModalOpen,\r\n toggle: this.closeModal\r\n };\r\n };\r\n\r\n /**\r\n * Initiate open modal.\r\n */\r\n private readonly _openModal = async (): Promise => {\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\r\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\r\n const cartState = await getCartState(this.props.context.actionContext);\r\n await cartState.refreshCart({});\r\n this.setState({\r\n isModalOpen: true\r\n });\r\n };\r\n\r\n /**\r\n * Initiate close modal.\r\n */\r\n private readonly closeModal = (): void => {\r\n this.setState({\r\n isModalOpen: false\r\n });\r\n };\r\n\r\n /**\r\n * Initiate cart close Icon.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\r\n return \r\n ),\r\n storeLocation: _renderStoreLocation(cartline, props)\r\n };\r\n};\r\n\r\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\r\n if (cartLine && cartLine.FulfillmentStoreId) {\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\r\n\r\n if (orgUnitName) {\r\n return (\r\n
\r\n {orgUnitName}\r\n
\r\n );\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\r\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\r\n return '';\r\n }\r\n\r\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\r\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\r\n });\r\n\r\n if (foundLocation) {\r\n return foundLocation.OrgUnitName;\r\n }\r\n return fulfillmentStoreId;\r\n};\r\n\r\nconst _assembleCartlines = (\r\n cartlines: CartLine[],\r\n products: SimpleProduct[] | undefined,\r\n props: IFlyoutCartLineItemsProps\r\n): IFlyoutCartLineItemViewProps[] | null => {\r\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\r\n\r\n if (!products || products.length === 0) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n cartlines.map((cartline, index) => {\r\n let product;\r\n if (props.isQuantityLimitsFeatureEnabled) {\r\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\r\n // to check productId and WarehouseId for identification.\r\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\r\n } else {\r\n product = getProductByProductId(cartline.ProductId, products);\r\n }\r\n let foundProductAvailability;\r\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\r\n });\r\n }\r\n let foundProductDeliveryOption;\r\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\r\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\r\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\r\n });\r\n }\r\n if (product) {\r\n reactNodes.push(\r\n _assembleNode(\r\n cartline,\r\n product,\r\n props,\r\n index,\r\n foundProductAvailability?.ProductAvailableQuantity,\r\n foundProductDeliveryOption\r\n )\r\n );\r\n }\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLineItems component.\r\n */\r\n\r\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\r\n const { products, cartlines } = props;\r\n return _assembleCartlines(cartlines, products, props);\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ActiveCartProductsInput, getActiveCartProductsAction, getAvailabilitiesForCartLineItems, getDeliveryOptionsForCartLineItems, IProductInventoryInformation, ProductAvailabilitiesForCartLineItems, ProductDeliveryOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * IMiniCartData entity interface.\r\n */\r\nexport interface IMiniCartData {\r\n products?: SimpleProduct[];\r\n productAvailabilites?: IProductInventoryInformation[];\r\n deliveryOptions?: ProductDeliveryOptions[];\r\n}\r\n\r\nexport const createInput = () => {\r\n return new ActiveCartProductsInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a mini cart data.\r\n * @param ctx\r\n * @param cartState\r\n */\r\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\r\n const miniCartData: IMiniCartData = {};\r\n\r\n const cart = cartState.cart;\r\n\r\n // If there are cart lines, make call to get products\r\n // If there are invocie linese, then there is no products, so don't make call to get products\r\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\r\n await getActiveCartProductsAction(\r\n new ActiveCartProductsInput(),\r\n ctx\r\n )\r\n .then(products => {\r\n if (products) {\r\n miniCartData.products = products;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getAvailabilitiesForCartLineItems(\r\n new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings),\r\n ctx\r\n )\r\n .then(availableQuantity => {\r\n if (availableQuantity) {\r\n miniCartData.productAvailabilites = availableQuantity;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getDeliveryOptionsForCartLineItems(\r\n new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings),\r\n ctx\r\n )\r\n .then(deliveryOptions => {\r\n if (deliveryOptions) {\r\n miniCartData.deliveryOptions = deliveryOptions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n }\r\n\r\n return miniCartData;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ICartViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartIconViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart-icon/./cart-icon';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n INodeProps,\r\n KeyCodes,\r\n Modal,\r\n Node,\r\n onTelemetryClick,\r\n ITelemetryContent\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\nimport { CartIconComponent } from './components/carticon.component';\r\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\r\nimport { OrgUnitLocation, CartLine, LineDataValidationFailure, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\r\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { reaction } from 'mobx';\r\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\r\n\r\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\r\nimport { COLLECTIONS_SITE_LANGUAGE, MAORI_LANG, NZC } from '../../../utilities/constants';\r\nimport { getToggleLang, getUserPrefLang, getUserPreferredLanguage } from '../../../utilities/language-change';\r\n\r\n/**\r\n * ICartIconViewState: Interface for Cart Icon View State.\r\n */\r\ninterface ICartIconViewState {\r\n isModalOpen: boolean;\r\n miniCartData: IMiniCartData;\r\n orgUnitLocations?: OrgUnitLocation[];\r\n isQuantityLimitsFeatureEnabled?: boolean;\r\n isCartValid?: boolean;\r\n viewCartEmptyMsg: boolean;\r\n siteLang: string;\r\n}\r\n\r\n/**\r\n * Render Cart lines.\r\n * @param cartLines - Flyout cart line view props.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n return cartLines.map((cartLine, index) => {\r\n const cartLineIndex = index;\r\n console.log('Cart icon view - renderCartlines loop:', cartLine);\r\n return (\r\n \r\n {cartLine.cartline}\r\n {/* {props.slots?.quickview &&\r\n cartLine!?.data?.product?.RecordId &&\r\n renderQuickView(props.slots?.quickview, cartLine!?.data?.product?.RecordId)} */}\r\n {cartLine.remove}\r\n {/* {cartLine.storeLocation} */}\r\n \r\n );\r\n });\r\n};\r\n\r\n/**\r\n// * Gets the react node for product description.\r\n// * @param quickview - Quick view node.\r\n// * @param item - Product id to de displayed in quickview.\r\n// * @returns The product quickview component.\r\n// */\r\n// function renderQuickView(quickview: React.ReactNode, item: number): JSX.Element | undefined {\r\n// if (quickview === null) {\r\n// return undefined;\r\n// }\r\n// return React.cloneElement(quickview as React.ReactElement);\r\n// }\r\n\r\n/**\r\n * Initiate total price.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\n// const renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n// const cart = props.data.cart.result ?? undefined;\r\n// const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\r\n// const totalPrice = price\r\n// ? props.context.cultureFormatter.formatCurrency(price)\r\n// : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\r\n// return (\r\n//
\r\n// \r\n// {props.resources.totalPriceFormatString}\r\n// {totalPrice}\r\n// \r\n//
\r\n// );\r\n// };\r\n\r\nenum cartLinesSortOrder {\r\n ascending = 'ascending',\r\n descending = 'descending'\r\n}\r\n\r\n/**\r\n *\r\n * CartIconView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class CartIconView extends React.PureComponent<\r\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\r\n ICartIconViewState\r\n> {\r\n private isAutoDisplayTriggered: boolean;\r\n\r\n private lastValidatedCartVersion: number | undefined;\r\n\r\n private readonly telemetryContent: ITelemetryContent | undefined;\r\n\r\n private retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\r\n super(props);\r\n this.isAutoDisplayTriggered = false;\r\n this.state = {\r\n isModalOpen: false,\r\n miniCartData: {},\r\n viewCartEmptyMsg: true,\r\n siteLang: ''\r\n };\r\n }\r\n\r\n public componentDidUpdate() {\r\n if (this.props.data.cart.result?.isEmpty) {\r\n setTimeout(() => {\r\n this.setState({\r\n viewCartEmptyMsg: true\r\n });\r\n }, 1000);\r\n } else {\r\n this.setState({\r\n viewCartEmptyMsg: false\r\n });\r\n }\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('keydown', this._escFunction, false);\r\n }\r\n\r\n const context = this.props.context.actionContext;\r\n\r\n reaction(\r\n () => this.props.data.cart.result?.cart.CartLines,\r\n async () => {\r\n this.setState({\r\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\r\n });\r\n }\r\n );\r\n\r\n this.setState({\r\n orgUnitLocations: this.props.data.orgUnitLocations?.result\r\n });\r\n await this._setOrderQuantityLimitsFeatureFlag();\r\n this._validateCart();\r\n void this._getCustomerLangDetails();\r\n }\r\n\r\n private _validateCart(): void {\r\n const {\r\n data: { cart }\r\n } = this.props;\r\n const cartVersion = cart.result?.cart?.Version ?? undefined;\r\n if (this.lastValidatedCartVersion === cartVersion) {\r\n return;\r\n }\r\n\r\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\r\n validateCartAsync(this.state.isQuantityLimitsFeatureEnabled, cart, this.props.telemetry, this.props.context)\r\n .then((result: LineDataValidationFailure[] | undefined) => {\r\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result) });\r\n })\r\n .catch(() => {\r\n this.setState({ isCartValid: false });\r\n });\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\r\n if (this.props.data.cart.result) {\r\n const input = {\r\n cartLineIds: [cartlineToRemove.LineId!.toString()]\r\n };\r\n this.props.data.cart.result.removeCartLines(input).catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to Remove Cart Line');\r\n });\r\n }\r\n };\r\n\r\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\r\n return (\r\n imageSettings || {\r\n viewports: {\r\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\r\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n }\r\n );\r\n };\r\n\r\n private _getCustomerLangDetails() {\r\n // Identifying Language\r\n const toggleLang = getToggleLang(this.props.context);\r\n const userPrefLang = getUserPrefLang(this.props.context.request.user.customerAccountNumber as any, this.props.context);\r\n this.setState({\r\n ...this.state,\r\n siteLang: getUserPreferredLanguage(NZC, COLLECTIONS_SITE_LANGUAGE, userPrefLang, toggleLang, this.props.context)\r\n });\r\n }\r\n\r\n private async _setOrderQuantityLimitsFeatureFlag(): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n try {\r\n const featureStatuses = await this.props.data.featureState;\r\n const isQuantityLimitsFeatureEnabledInHq =\r\n featureStatuses.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n } catch (error) {\r\n this.props.telemetry.warning(error as string);\r\n this.props.telemetry.debug('Unable to get feature states');\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: true });\r\n } else {\r\n this.props.data.customerInformation\r\n .then(customerInfo => {\r\n const result =\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\r\n this.setState({ isQuantityLimitsFeatureEnabled: result });\r\n })\r\n .catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to get customer info');\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Sort cartline items.\r\n * @param cartlines - Cartlines to be sorted.\r\n * @param sortOrder - Ascending or descending.\r\n * @returns - Sorted cartlines.\r\n */\r\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\r\n const lines: CartLine[] = [...cartlines];\r\n const zero: number = 0;\r\n\r\n if (sortOrder === cartLinesSortOrder.descending) {\r\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\r\n }\r\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\r\n };\r\n\r\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\r\n const {\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n },\r\n config,\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n const imageSettings = this._getImageSettings(config.imageSettings);\r\n const cart = this.props.data.cart && this.props.data.cart.result;\r\n\r\n // Cart-icon could be placed in each page\r\n // so we check cart content to reduce number of RS calls\r\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\r\n ? FlyoutCartLineItems({\r\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\r\n products: this.state.miniCartData.products,\r\n productAvailabilites: this.state.miniCartData.productAvailabilites,\r\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\r\n imageSettings,\r\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n inputQuantityAriaLabel: '', // Not used\r\n discountStringText: '', // Not used\r\n originalPriceText: '',\r\n currentPriceText: '',\r\n shippingChargesText: ''\r\n },\r\n telemetry,\r\n removeButtonText: resources.removeCartButtonText,\r\n outOfStockText: '', // Not used\r\n outOfRangeOneText: '', // Not used\r\n outOfRangeFormatText: '', // Not used\r\n cartState: cart,\r\n orgUnitLocations: this.state.orgUnitLocations,\r\n removeItemClickHandler: this._removeItemFromCartHandler,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n telemetryContent: this.telemetryContent,\r\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\r\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled\r\n // quickViewButton: this.props.slots.quickview\r\n } as any)\r\n : null;\r\n }\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @returns JSX Element.\r\n */\r\n public render(): JSX.Element | null {\r\n const cart = this.props.data.cart.result ?? undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const shouldShowMiniCart =\r\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n if (shouldShowMiniCart) {\r\n if (!this.isAutoDisplayTriggered) {\r\n // First time trigger auto mini cart.\r\n this.setState({ isModalOpen: true });\r\n this.isAutoDisplayTriggered = true;\r\n } else if (!this.state.isModalOpen) {\r\n // If modal is closed, reset the flag.\r\n this.isAutoDisplayTriggered = false;\r\n }\r\n }\r\n\r\n const { resources, context, id, typeName, telemetryContent, config } = this.props;\r\n const cartlines = this._getCartLines();\r\n // if(this.props.data.cart.result?.isEmpty && !this.state.viewCartEmptyMsg) {\r\n // setTimeout(() => {\r\n // this.setState({\r\n // viewCartEmptyMsg: true\r\n // });\r\n // }, 1000);\r\n // }\r\n // else {\r\n // this.setState({\r\n // viewCartEmptyMsg: false\r\n // });\r\n // }\r\n const cartIcon = (\r\n \r\n );\r\n return (\r\n \r\n \r\n \r\n \r\n {this.state.siteLang === MAORI_LANG ? this.props.config.flyoutTitleInMaori : this.props.config.flyoutTitle}\r\n {/* {this._renderCartItemCount(this.props)} */}\r\n {this._renderCartCloseIcon()}\r\n \r\n \r\n {this.props.data.cart.result?.isEmpty && this.state.viewCartEmptyMsg ? (\r\n

Your kete is empty. Add some resources to save and download!

\r\n ) : null}\r\n {renderCartlines(cartlines as any, this.props)}\r\n
\r\n \r\n {/* {this.props.slots.promoContentItem} */}\r\n {/* {renderTotalPrice(this.props)} */}\r\n {/*

{this.props.resources.subTotalMessage}

*/}\r\n {this.props.checkoutAsSignInUserButton}\r\n {this.props.checkoutAsGuestButton}\r\n {/* {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton} */}\r\n \r\n {/* {this.props.data.cart.result?.isEmpty ? (\r\n \r\n {this.props.resources.continueShoppingButtonTitle}\r\n \r\n ) : null} */}\r\n \r\n Continue browsing\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Initiate modal container.\r\n * @returns Inode props.\r\n */\r\n private readonly _modalContainer = (): INodeProps => {\r\n return {\r\n tag: Modal,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__minicartmodal-container',\r\n wrapClassName: 'ms-cart-icon__minicartmodal',\r\n isOpen: this.state.isModalOpen,\r\n toggle: this.closeModal\r\n };\r\n };\r\n\r\n /**\r\n * Initiate open modal.\r\n */\r\n private readonly _openModal = async (): Promise => {\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\r\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\r\n const cartState = await getCartState(this.props.context.actionContext);\r\n await cartState.refreshCart({});\r\n this.setState({\r\n isModalOpen: true\r\n });\r\n };\r\n\r\n /**\r\n * Initiate close modal.\r\n */\r\n private readonly closeModal = (): void => {\r\n this.setState({\r\n isModalOpen: false\r\n });\r\n };\r\n\r\n /**\r\n * Initiate cart close Icon.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\r\n return \r\n ),\r\n storeLocation: _renderStoreLocation(cartline, props)\r\n };\r\n};\r\n\r\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\r\n if (cartLine && cartLine.FulfillmentStoreId) {\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\r\n\r\n if (orgUnitName) {\r\n return (\r\n
\r\n {orgUnitName}\r\n
\r\n );\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\r\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\r\n return '';\r\n }\r\n\r\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\r\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\r\n });\r\n\r\n if (foundLocation) {\r\n return foundLocation.OrgUnitName;\r\n }\r\n return fulfillmentStoreId;\r\n};\r\n\r\nconst _assembleCartlines = (\r\n cartlines: CartLine[],\r\n products: SimpleProduct[] | undefined,\r\n props: IFlyoutCartLineItemsProps\r\n): IFlyoutCartLineItemViewProps[] | null => {\r\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\r\n\r\n if (!products || products.length === 0) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n cartlines.map((cartline, index) => {\r\n let product;\r\n if (props.isQuantityLimitsFeatureEnabled) {\r\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\r\n // to check productId and WarehouseId for identification.\r\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\r\n } else {\r\n product = getProductByProductId(cartline.ProductId, products);\r\n }\r\n let foundProductAvailability;\r\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\r\n });\r\n }\r\n let foundProductDeliveryOption;\r\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\r\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\r\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\r\n });\r\n }\r\n if (product) {\r\n reactNodes.push(\r\n _assembleNode(\r\n cartline,\r\n product,\r\n props,\r\n index,\r\n foundProductAvailability?.ProductAvailableQuantity,\r\n foundProductDeliveryOption\r\n )\r\n );\r\n }\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLineItems component.\r\n */\r\n\r\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\r\n const { products, cartlines } = props;\r\n return _assembleCartlines(cartlines, products, props);\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ActiveCartProductsInput, getActiveCartProductsAction, getAvailabilitiesForCartLineItems, getDeliveryOptionsForCartLineItems, IProductInventoryInformation, ProductAvailabilitiesForCartLineItems, ProductDeliveryOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * IMiniCartData entity interface.\r\n */\r\nexport interface IMiniCartData {\r\n products?: SimpleProduct[];\r\n productAvailabilites?: IProductInventoryInformation[];\r\n deliveryOptions?: ProductDeliveryOptions[];\r\n}\r\n\r\nexport const createInput = () => {\r\n return new ActiveCartProductsInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a mini cart data.\r\n * @param ctx\r\n * @param cartState\r\n */\r\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\r\n const miniCartData: IMiniCartData = {};\r\n\r\n const cart = cartState.cart;\r\n\r\n // If there are cart lines, make call to get products\r\n // If there are invocie linese, then there is no products, so don't make call to get products\r\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\r\n await getActiveCartProductsAction(\r\n new ActiveCartProductsInput(),\r\n ctx\r\n )\r\n .then(products => {\r\n if (products) {\r\n miniCartData.products = products;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getAvailabilitiesForCartLineItems(\r\n new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings),\r\n ctx\r\n )\r\n .then(availableQuantity => {\r\n if (availableQuantity) {\r\n miniCartData.productAvailabilites = availableQuantity;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getDeliveryOptionsForCartLineItems(\r\n new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings),\r\n ctx\r\n )\r\n .then(deliveryOptions => {\r\n if (deliveryOptions) {\r\n miniCartData.deliveryOptions = deliveryOptions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n }\r\n\r\n return miniCartData;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { IImageSettings, getUrlSync, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { ICartViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartIconViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart-icon/./cart-icon';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n INodeProps,\r\n KeyCodes,\r\n Modal,\r\n Node,\r\n onTelemetryClick,\r\n ITelemetryContent,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\nimport { CartIconComponent } from './components/carticon.component';\r\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\r\nimport { OrgUnitLocation, CartLine, LineDataValidationFailure, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\r\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { reaction } from 'mobx';\r\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\r\n\r\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\r\nimport { COLLECTIONS_SITE_LANGUAGE, ERROR_OR_NOTIFICATION, HEADER_FOOTER, MAORI_LANG } from '../../../utilities/constants';\r\nimport { getToggleLang, getUserPrefLang, getUserPreferredLanguage } from '../../../utilities/language-change';\r\n\r\n/**\r\n * ICartIconViewState: Interface for Cart Icon View State.\r\n */\r\ninterface ICartIconViewState {\r\n isModalOpen: boolean;\r\n miniCartData: IMiniCartData;\r\n orgUnitLocations?: OrgUnitLocation[];\r\n isQuantityLimitsFeatureEnabled?: boolean;\r\n isCartValid?: boolean;\r\n viewCartEmptyMsg: boolean;\r\n preferredLanguage: string;\r\n preferredLanguageInError: string;\r\n siteLang: string;\r\n}\r\n\r\n/**\r\n * Render Cart lines.\r\n * @param cartLines - Flyout cart line view props.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n return cartLines.map((cartLine, index) => {\r\n const cartLineIndex = index;\r\n console.log('Cart icon view - renderCartlines loop:', cartLine);\r\n return (\r\n \r\n {cartLine.cartline}\r\n {/* {props.slots?.quickview &&\r\n cartLine!?.data?.product?.RecordId &&\r\n renderQuickView(props.slots?.quickview, cartLine!?.data?.product?.RecordId)} */}\r\n {cartLine.remove}\r\n {/* {cartLine.storeLocation} */}\r\n \r\n );\r\n });\r\n};\r\n\r\n/**\r\n// * Gets the react node for product description.\r\n// * @param quickview - Quick view node.\r\n// * @param item - Product id to de displayed in quickview.\r\n// * @returns The product quickview component.\r\n// */\r\n// function renderQuickView(quickview: React.ReactNode, item: number): JSX.Element | undefined {\r\n// if (quickview === null) {\r\n// return undefined;\r\n// }\r\n// return React.cloneElement(quickview as React.ReactElement);\r\n// }\r\n\r\n/**\r\n * Initiate total price.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\n// const renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n// const cart = props.data.cart.result ?? undefined;\r\n// const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\r\n// const totalPrice = price\r\n// ? props.context.cultureFormatter.formatCurrency(price)\r\n// : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\r\n// return (\r\n//
\r\n// \r\n// {props.resources.totalPriceFormatString}\r\n// {totalPrice}\r\n// \r\n//
\r\n// );\r\n// };\r\n\r\nenum cartLinesSortOrder {\r\n ascending = 'ascending',\r\n descending = 'descending'\r\n}\r\n\r\n/**\r\n *\r\n * CartIconView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class CartIconView extends React.PureComponent<\r\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\r\n ICartIconViewState\r\n> {\r\n private isAutoDisplayTriggered: boolean;\r\n\r\n private lastValidatedCartVersion: number | undefined;\r\n\r\n private readonly telemetryContent: ITelemetryContent | undefined;\r\n\r\n private retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\r\n super(props);\r\n this.isAutoDisplayTriggered = false;\r\n this.state = {\r\n isModalOpen: false,\r\n miniCartData: {},\r\n viewCartEmptyMsg: true,\r\n preferredLanguage: 'english',\r\n preferredLanguageInError: 'maori',\r\n siteLang: ''\r\n };\r\n }\r\n\r\n public componentDidUpdate() {\r\n if (this.props.data.cart.result?.isEmpty) {\r\n setTimeout(() => {\r\n this.setState({\r\n viewCartEmptyMsg: true\r\n });\r\n }, 1000);\r\n } else {\r\n this.setState({\r\n viewCartEmptyMsg: false\r\n });\r\n }\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('keydown', this._escFunction, false);\r\n }\r\n\r\n const context = this.props.context.actionContext;\r\n\r\n reaction(\r\n () => this.props.data.cart.result?.cart.CartLines,\r\n async () => {\r\n this.setState({\r\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\r\n });\r\n }\r\n );\r\n\r\n this.setState({\r\n orgUnitLocations: this.props.data.orgUnitLocations?.result\r\n });\r\n await this._setOrderQuantityLimitsFeatureFlag();\r\n this._validateCart();\r\n void this._getCustomerLangDetails();\r\n }\r\n\r\n private _validateCart(): void {\r\n const {\r\n data: { cart }\r\n } = this.props;\r\n const cartVersion = cart.result?.cart?.Version ?? undefined;\r\n if (this.lastValidatedCartVersion === cartVersion) {\r\n return;\r\n }\r\n\r\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\r\n validateCartAsync(this.state.isQuantityLimitsFeatureEnabled, cart, this.props.telemetry, this.props.context)\r\n .then((result: LineDataValidationFailure[] | undefined) => {\r\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result) });\r\n })\r\n .catch(() => {\r\n this.setState({ isCartValid: false });\r\n });\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\r\n if (this.props.data.cart.result) {\r\n const input = {\r\n cartLineIds: [cartlineToRemove.LineId!.toString()]\r\n };\r\n this.props.data.cart.result.removeCartLines(input).catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to Remove Cart Line');\r\n });\r\n }\r\n };\r\n\r\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\r\n return (\r\n imageSettings || {\r\n viewports: {\r\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\r\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n }\r\n );\r\n };\r\n\r\n private async _setOrderQuantityLimitsFeatureFlag(): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n try {\r\n const featureStatuses = await this.props.data.featureState;\r\n const isQuantityLimitsFeatureEnabledInHq =\r\n featureStatuses.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n } catch (error) {\r\n this.props.telemetry.warning(error as string);\r\n this.props.telemetry.debug('Unable to get feature states');\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: true });\r\n } else {\r\n this.props.data.customerInformation\r\n .then(customerInfo => {\r\n const result =\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\r\n this.setState({ isQuantityLimitsFeatureEnabled: result });\r\n })\r\n .catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to get customer info');\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Sort cartline items.\r\n * @param cartlines - Cartlines to be sorted.\r\n * @param sortOrder - Ascending or descending.\r\n * @returns - Sorted cartlines.\r\n */\r\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\r\n const lines: CartLine[] = [...cartlines];\r\n const zero: number = 0;\r\n\r\n if (sortOrder === cartLinesSortOrder.descending) {\r\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\r\n }\r\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\r\n };\r\n\r\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\r\n const {\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n },\r\n config,\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n const imageSettings = this._getImageSettings(config.imageSettings);\r\n const cart = this.props.data.cart && this.props.data.cart.result;\r\n\r\n // Cart-icon could be placed in each page\r\n // so we check cart content to reduce number of RS calls\r\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\r\n ? FlyoutCartLineItems({\r\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\r\n products: this.state.miniCartData.products,\r\n productAvailabilites: this.state.miniCartData.productAvailabilites,\r\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\r\n imageSettings,\r\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n inputQuantityAriaLabel: '', // Not used\r\n discountStringText: '', // Not used\r\n originalPriceText: '',\r\n currentPriceText: '',\r\n shippingChargesText: ''\r\n },\r\n telemetry,\r\n removeButtonText: resources.removeCartButtonText,\r\n outOfStockText: '', // Not used\r\n outOfRangeOneText: '', // Not used\r\n outOfRangeFormatText: '', // Not used\r\n cartState: cart,\r\n orgUnitLocations: this.state.orgUnitLocations,\r\n removeItemClickHandler: this._removeItemFromCartHandler,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n telemetryContent: this.telemetryContent,\r\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\r\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled\r\n // quickViewButton: this.props.slots.quickview\r\n } as any)\r\n : null;\r\n }\r\n\r\n private _getCustomerLangDetails() {\r\n // Identifying Language\r\n const toggleLang = getToggleLang(this.props.context);\r\n const userPrefLang = getUserPrefLang(this.props.context.request.user.customerAccountNumber as any, this.props.context);\r\n this.setState({\r\n ...this.state,\r\n preferredLanguage: getUserPreferredLanguage(\r\n this.props.config.siteName as any,\r\n HEADER_FOOTER,\r\n userPrefLang,\r\n toggleLang,\r\n this.props.context\r\n ),\r\n preferredLanguageInError: getUserPreferredLanguage(\r\n this.props.config.siteName as any,\r\n ERROR_OR_NOTIFICATION,\r\n userPrefLang,\r\n toggleLang,\r\n this.props.context\r\n ),\r\n siteLang: getUserPreferredLanguage(\r\n this.props.config.siteName as any,\r\n COLLECTIONS_SITE_LANGUAGE,\r\n userPrefLang,\r\n toggleLang,\r\n this.props.context\r\n )\r\n });\r\n }\r\n\r\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\r\n if (isAuthenticated) {\r\n return guestCheckoutUrl;\r\n }\r\n\r\n const absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n const isAbsoluteUrl = absoluteUrlRegExp.test(guestCheckoutUrl);\r\n let returnURL = guestCheckoutUrl;\r\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\r\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\r\n }\r\n\r\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\r\n }\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @returns JSX Element.\r\n */\r\n public render(): JSX.Element | null {\r\n const cart = this.props.data.cart.result ?? undefined;\r\n const {\r\n config: { isAnonymousCheckout },\r\n context: {\r\n request: {\r\n user: { isAuthenticated, signInUrl }\r\n }\r\n },\r\n cartlines,\r\n resources,\r\n context,\r\n id,\r\n typeName,\r\n config\r\n } = this.props;\r\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\r\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\r\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\r\n const hasInvoiceLine = cart?.hasInvoiceLine;\r\n const hasError = cartlines ? cartlines.some(cartline => cartline.hasError) : false;\r\n const telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n\r\n const payload = getPayloadObject(TelemetryEvent.CheckOut, telemetryContent, TelemetryConstant.Checkout);\r\n const checkoutBySignInAttributes = getTelemetryAttributes(telemetryContent, payload);\r\n\r\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\r\n const checkoutByGuestAttributes = getTelemetryAttributes(telemetryContent, payload);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const {} = this.props;\r\n const shouldShowMiniCart =\r\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n if (shouldShowMiniCart) {\r\n if (!this.isAutoDisplayTriggered) {\r\n // First time trigger auto mini cart.\r\n this.setState({ isModalOpen: true });\r\n this.isAutoDisplayTriggered = true;\r\n } else if (!this.state.isModalOpen) {\r\n // If modal is closed, reset the flag.\r\n this.isAutoDisplayTriggered = false;\r\n }\r\n }\r\n\r\n const cartLines = this._getCartLines();\r\n // if(this.props.data.cart.result?.isEmpty && !this.state.viewCartEmptyMsg) {\r\n // setTimeout(() => {\r\n // this.setState({\r\n // viewCartEmptyMsg: true\r\n // });\r\n // }, 1000);\r\n // }\r\n // else {\r\n // this.setState({\r\n // viewCartEmptyMsg: false\r\n // });\r\n // }\r\n\r\n const checkoutAsSignInUserButton =\r\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\r\n \r\n {this.state.preferredLanguage === 'maori' ? resources.checkoutButtonTitleInMaori : resources.checkoutButtonTitle}\r\n \r\n ) : null;\r\n\r\n const checkoutAsGuestButton =\r\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\r\n \r\n {this.state.preferredLanguage === 'maori'\r\n ? resources.guestCheckoutButtonTitleInMaori\r\n : resources.guestCheckoutButtonTitle}\r\n \r\n ) : null;\r\n\r\n const cartIcon = (\r\n \r\n );\r\n return (\r\n \r\n \r\n \r\n \r\n {this.state.siteLang === MAORI_LANG ? this.props.config.flyoutTitleInMaori : this.props.config.flyoutTitle}\r\n {/* {this._renderCartItemCount(this.props)} */}\r\n {this._renderCartCloseIcon()}\r\n \r\n \r\n {this.props.data.cart.result?.isEmpty && this.state.viewCartEmptyMsg ? (\r\n

\r\n {this.state.preferredLanguageInError === 'maori' ? resources.emptyKeteTextInMaori : resources.emptyKeteText}\r\n

\r\n ) : null}\r\n {renderCartlines(cartLines as any, this.props)}\r\n
\r\n \r\n {/* {this.props.slots.promoContentItem} */}\r\n {/* {renderTotalPrice(this.props)} */}\r\n {/*

{this.props.resources.subTotalMessage}

*/}\r\n {checkoutAsSignInUserButton}\r\n {checkoutAsGuestButton}\r\n {/* {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton} */}\r\n \r\n {/* {this.props.data.cart.result?.isEmpty ? (\r\n \r\n {this.props.resources.continueShoppingButtonTitle}\r\n \r\n ) : null} */}\r\n \r\n {this.state.preferredLanguage === 'maori'\r\n ? resources.continueBrowsingTextInMaori\r\n : resources.continueBrowsingText}\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Initiate modal container.\r\n * @returns Inode props.\r\n */\r\n private readonly _modalContainer = (): INodeProps => {\r\n return {\r\n tag: Modal,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__minicartmodal-container',\r\n wrapClassName: 'ms-cart-icon__minicartmodal',\r\n isOpen: this.state.isModalOpen,\r\n toggle: this.closeModal\r\n };\r\n };\r\n\r\n /**\r\n * Initiate open modal.\r\n */\r\n private readonly _openModal = async (): Promise => {\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\r\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\r\n const cartState = await getCartState(this.props.context.actionContext);\r\n await cartState.refreshCart({});\r\n this.setState({\r\n isModalOpen: true\r\n });\r\n };\r\n\r\n /**\r\n * Initiate close modal.\r\n */\r\n private readonly closeModal = (): void => {\r\n this.setState({\r\n isModalOpen: false\r\n });\r\n };\r\n\r\n /**\r\n * Initiate cart close Icon.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\r\n return \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n flyoutTitle: {flyoutTitle},\n totalPrice:
{priceString}
\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n validateCartAsync(this.state.isQuantityLimitsFeatureEnabled, cart, this.props.telemetry, this.props.context)\n .then((result: LineDataValidationFailure[] | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\n const isAbsoluteUrl = absoluteUrlRegExp.test(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setOrderQuantityLimitsFeatureFlag(): Promise {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n }\n}\n\nexport default CartIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartIconViewProps } from './cart-icon';\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\n\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n return cartLines.map((cartLine, index) => {\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\n \n {props.cartIcon}\n {props.FlyoutContainer ? (\n \n {props.flyoutTitle}\n {_renderCartlines(props.cartlines, props)}\n {props.totalPrice}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.goToCartButton}\n \n ) : (\n false\n )}\n \n);\n\nexport default CartIconView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
\n {orgUnitName}\n
\n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\n\n/**\n * ICartIconViewState: Interface for Cart Icon View State.\n */\ninterface ICartIconViewState {\n isModalOpen: boolean;\n}\n\n/**\n * Render Cart lines.\n * @param cartLines - Flyout cart line view props.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n return cartLines.map((cartLine, index) => {\n const cartLineIndex = index;\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\n/**\n * Initiate total price.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\n const totalPrice = price\n ? props.context.cultureFormatter.formatCurrency(price)\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\n return (\n
\n \n {props.resources.totalPriceFormatString}\n {totalPrice}\n \n
\n );\n};\n\n/**\n *\n * CartIconView component.\n * @extends {React.PureComponent}\n */\nexport class CartIconView extends React.PureComponent<\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\n ICartIconViewState\n> {\n private isAutoDisplayTriggered: boolean;\n\n private readonly cartIconRef: React.RefObject = React.createRef();\n\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\n super(props);\n this.isAutoDisplayTriggered = false;\n this.state = {\n isModalOpen: false\n };\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n window.addEventListener('keydown', this._escFunction, false);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('keydown', this._escFunction, false);\n }\n }\n\n /**\n * Render Cart Item count.\n * @returns JSX Element.\n */\n public render(): JSX.Element | null {\n const cart = this.props.data.cart.result ?? undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n if (shouldShowMiniCart) {\n if (!this.isAutoDisplayTriggered) {\n // First time trigger auto mini cart.\n this.setState({ isModalOpen: true });\n this.isAutoDisplayTriggered = true;\n } else if (!this.state.isModalOpen) {\n // If modal is closed, reset the flag.\n this.isAutoDisplayTriggered = false;\n }\n }\n return (\n \n \n \n \n {this.props.flyoutTitle}\n {this._renderCartItemCount(this.props)}\n {this._renderCartCloseIcon()}\n \n \n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\n {renderCartlines(this.props.cartlines, this.props)}\n \n \n {this.props.slots.promoContentItem}\n {renderTotalPrice(this.props)}\n

{this.props.resources.subTotalMessage}

\n {this.props.checkoutAsSignInUserButton}\n {this.props.checkoutAsGuestButton}\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\n \n {this.props.data.cart.result?.isEmpty ? (\n \n {this.props.resources.continueShoppingButtonTitle}\n \n ) : null}\n \n
\n
\n
\n );\n }\n\n /**\n * Initiate modal container.\n * @returns Inode props.\n */\n private readonly _modalContainer = (): INodeProps => {\n return {\n tag: Modal,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__minicartmodal-container',\n wrapClassName: 'ms-cart-icon__minicartmodal',\n isOpen: this.state.isModalOpen,\n toggle: this.closeModal\n };\n };\n\n /**\n * Initiate open modal.\n */\n private readonly _openModal = (): void => {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\n this.setState({\n isModalOpen: true\n });\n };\n\n /**\n * Initiate close modal.\n */\n private readonly closeModal = (): void => {\n this.cartIconRef.current?.focus();\n this.setState({\n isModalOpen: false\n });\n };\n\n /**\n * Initiate cart close Icon.\n * @returns JSX Element.\n */\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\n return