{"version":3,"file":"static/js/04a612240a792680743e.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