{"version":3,"file":"static/js/d6bfcd8aed8b7e94d8f6.bundle.js","mappings":"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","sources":["webpack://henrys-ecommerce/./src/validate-cart.ts?cd50","webpack://henrys-ecommerce/./src/Common/get-product.ts?0a21","webpack://henrys-ecommerce/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://henrys-ecommerce/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://henrys-ecommerce/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://henrys-ecommerce/../../src/search-org-unit-locations.ts?d18d"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActiveCartProductsInput,\n getActiveCartProductsAction,\n getAvailabilitiesForCartLineItems,\n getDeliveryOptionsForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n ProductDeliveryOptionsForCartLineItems\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IMiniCartData entity interface.\n */\nexport interface IMiniCartData {\n products?: SimpleProduct[];\n productAvailabilites?: IProductInventoryInformation[];\n deliveryOptions?: ProductDeliveryOptions[];\n}\n\nexport const createInput = () => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a mini cart data.\n * @param ctx\n * @param cartState\n */\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\n const miniCartData: IMiniCartData = {};\n\n const cart = cartState.cart;\n\n // If there are cart lines, make call to get products\n // If there are invocie linese, then there is no products, so don't make call to get products\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\n .then(products => {\n if (products) {\n miniCartData.products = products;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(availableQuantity => {\n if (availableQuantity) {\n miniCartData.productAvailabilites = availableQuantity;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(deliveryOptions => {\n if (deliveryOptions) {\n miniCartData.deliveryOptions = deliveryOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return miniCartData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n CartLineValidationResultsByLineId,\n OrgUnitLocation\n} from '@msdyn365-commerce/retail-proxy';\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n UncontrolledTooltip,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\n\nimport { ICartIconData } from './cart-icon.data';\nimport { cartLinesSortOrder, ICartIconProps } from './cart-icon.props.autogenerated';\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\n\nexport interface IMiniCartState {\n miniCartData: IMiniCartData;\n orgUnitLocations?: OrgUnitLocation[];\n isQuantityLimitsFeatureEnabled: boolean;\n isCartValid: boolean;\n}\n\nexport interface ICartIconViewProps extends ICartIconProps {\n className: string;\n cartIcon: React.ReactNode;\n FlyoutContainer?: INodeProps;\n CartlinesWrapper: INodeProps;\n miniCartWrapper: INodeProps;\n miniCartItemWrapper: INodeProps;\n cartlines?: IFlyoutCartLineItemViewProps[];\n flyoutTitle: React.ReactNode;\n totalPrice: React.ReactNode;\n checkoutAsGuestButton?: React.ReactNode;\n checkoutAsSignInUserButton?: React.ReactNode;\n goToCartButton?: React.ReactNode;\n waitingComponent?: React.ReactNode;\n isCartLoading: boolean;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\n/**\n *\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass CartIcon extends React.Component, IMiniCartState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\n\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\n\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private lastValidatedCartVersion: number | undefined;\n\n constructor(props: ICartIconProps) {\n super(props);\n this.state = {\n miniCartData: {},\n isCartValid: true,\n isQuantityLimitsFeatureEnabled: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n }\n\n public async componentDidMount(): Promise {\n const context = this.props.context.actionContext;\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n this.setState({\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\n });\n }\n );\n await this._setQuantityLimitsFeatureFlag();\n\n this.setState({\n orgUnitLocations: this.props.data.orgUnitLocations?.result\n });\n\n this._validateCart();\n }\n\n public componentDidUpdate(prevProps: ICartIconProps): void {\n this._validateCart();\n }\n\n public shouldComponentUpdate(nextProps: ICartIconProps, nextState: IMiniCartState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n config: { enableHoverCart, isAnonymousCheckout },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n context,\n resources\n } = this.props;\n\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n const hasInvoiceLine = cart?.hasInvoiceLine;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const cartLines = this._getCartLines();\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.state.miniCartData.productAvailabilites ?? [],\n this.props.context.actionContext,\n this.state.miniCartData.products ?? [],\n emailDeliveryModeCode\n );\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\n const flyoutTitle = resources.flyoutTitle;\n const flyoutTooltip = {\n tag: UncontrolledTooltip,\n shouldShowMiniCart,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__flyout-container',\n trigger: 'hover',\n displayMode: 'FLYOUT',\n target: id,\n shouldShowCloseButton: true,\n cartPageUrl: cartUrl,\n hideAriaHidden: true\n };\n\n // If there are invoice lines, don't update mini cart price\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\n const priceString = price\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\n : '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n cartIcon: (\n \n ),\n cartlines: cartLines,\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\n CartlinesWrapper: {\n className: 'ms-cart-icon__cart-lines'\n },\n miniCartWrapper: {\n className: classnames('ms-cart-icon'),\n id: this.props.id\n },\n miniCartItemWrapper: {\n className: classnames('msc-cart-lines-item')\n },\n\n // If there are invoice lines, don't update mini cart checkout button\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\n checkoutAsSignInUserButton:\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n checkoutBlockedDueToUnavailableFunds: null,\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\n if (this.state.isQuantityLimitsFeatureEnabled) {\n validateCartAsync(cart, this.props.telemetry, this.props.context)\n .then((result: CartLineValidationResultsByLineId | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n } else {\n this.setState({ isCartValid: true });\n }\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n return;\n }\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n 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 { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IAny,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { searchOrgUnitLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\n\n/**\n * Input for search-org-unit-locations data action.\n */\nexport class SearchOrgUnitLocationsInput implements IActionInput {\n public getCacheKey = () => 'SearchOrgUnitLocations';\n\n public getCacheObjectType = () => 'SearchOrgUnitLocations';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData -- Input data.\n * @returns -- IActionInput.\n */\nexport const createSearchOrgUnitLocationsInputFunc = (inputData: ICreateActionContext>): IActionInput => {\n return new SearchOrgUnitLocationsInput();\n};\n\n/**\n * Calls the Retail API and returns all the orgUnitLocations as array.\n * @param input - Input.\n * @param ctx - Context.\n * @returns - orgUnitLocations.\n */\nexport async function getSearchOrgUnitLocationsAction(\n input: SearchOrgUnitLocationsInput,\n context: IActionContext\n): Promise {\n const OrgUnitLocations = await searchOrgUnitLocationsAsync(\n {\n callerContext: context\n },\n {}\n );\n\n return OrgUnitLocations;\n}\n\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-org-unit-locations',\n action: >getSearchOrgUnitLocationsAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n\nexport default retailActionDataAction;\n"],"names":["async","validateCartAsync","cart","telemetry","propsContext","cartResult","cartVersion","shouldRetry","arguments","length","undefined","Version","error","warning","debug","AsyncResult","resolve","_validationResult$Val","validationResult","CartsDataActions","callerContext","actionContext","bypassCache","Id","ValidationResultsByLineId","name","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","ArrayExtensions","hasElements","_modifiedProduct$Beha2","modifiedProduct","find","product","RecordId","ProductId","Behavior","MaximumQuantity","input","cartLineId","LineId","toString","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","getMiniCartData","ctx","miniCartData","CartLines","hasInvoiceLine","getActiveCartProductsAction","ActiveCartProductsInput","then","catch","exception","Error","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","requestContext","apiSettings","availableQuantity","productAvailabilites","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","deliveryOptions","CartIcon","React","constructor","props","super","retailMultiplePickUpOptionEnabled","getSortedCartLines","cartlines","sortOrder","lines","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","imageSettings","viewports","xs","q","w","h","sm","lg","lazyload","_removeItemFromCartHandler","cartlineToRemove","this","data","result","cartLineIds","removeCartLines","state","isCartValid","telemetryContent","getTelemetryObject","context","request","telemetryPageName","friendlyName","payload","getPayloadObject","TelemetryEvent","CheckOut","TelemetryConstant","Checkout","checkoutBySignInAttributes","getTelemetryAttributes","contentAction","etext","GuestCheckout","checkoutByGuestAttributes","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","reaction","_this$props$data$cart","setState","_setQuantityLimitsFeatureFlag","orgUnitLocations","_validateCart","componentDidUpdate","prevProps","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_cart$cart$CartLines","_this$state$miniCartD","_this$state$miniCartD2","_this$props$data$chan","_this$props$data$feat","id","typeName","config","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","resources","guestCheckoutUrl","getUrlSync","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","app","addToCartBehavior","AddToCartBehavior","showMiniCart","emailDeliveryModeCode","channel","EmailDeliveryModeCode","cartLines","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","hasError","isValid","some","cartline","includeFlyout","status","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","replace","flyoutTitle","flyoutTooltip","tag","UncontrolledTooltip","placement","hideArrow","className","trigger","displayMode","target","shouldShowCloseButton","cartPageUrl","hideAriaHidden","price","TotalAmount","priceString","totalPriceFormatString","cultureFormatter","formatCurrency","channelDeliveryOptionConfig","featureState","feature","Name","IsEnabled","viewProps","_objectSpread","cartIcon","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","CartlinesWrapper","miniCartWrapper","classnames","miniCartItemWrapper","checkoutAsSignInUserButton","Button","Object","assign","disabled","href","title","checkoutButtonTitle","checkoutAsGuestButton","guestCheckoutButtonTitle","goToCartButton","checkoutBlockedDueToUnavailableFunds","totalPrice","renderView","_cart$result$cart$Ver","_cart$result","lastValidatedCartVersion","ValidationResultsPairs","isAbsoluteUrl","urlCheck","returnURL","msdyn365Commerce","isBrowser","window","location","origin","includes","_this$props$data$cata","PickupDeliveryModeCode","FlyoutCartLineItems","cartLinesSortOrder","productDeliveryOptions","outOfStockThreshold","isStockCheckEnabled","enableStockCheck","maxCartlineQuantity","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","gridSettings","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","quantityDisplayString","quantityDisplayText","salesAgreementPricePrompt","inputQuantityAriaLabel","discountStringText","originalPriceText","currentPriceText","shippingChargesText","shippingText","removeButtonText","removeCartButtonText","outOfStockText","outOfRangeOneText","outOfRangeFormatText","removeItemClickHandler","pickupDeliveryModeCode","catalogs","_featureStatuses$find","_this$props$context","featureStatuses","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find2","customerInformation","customerInfo","IsB2b","__decorate","observer","_renderDeliveryLocation","cartLine","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","foundProductDeliveryOption","deliveryOption","delivery","DeliveryOptions","option","Code","DeliveryMode","Description","_renderStoreLocation","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","reactNodes","map","index","foundProductAvailability","_foundProductAvailabi","productAvailability","_productAvailability$","ProductAvailableQuantity","push","_assembleNode","foundProductDeliveryOptions","availableQuantityInStock","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","payLoad","RemoveCartItem","removeCartItemAttribute","productUrl","getProductUrlSync","MsDyn365","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","searchParams","set","CatalogId","Quantity","CartLineItemComponent","currentQuantity","isOutOfStock","key","isQuantityEditable","primaryImageUrl","PrimaryImageUrl","deliveryLocation","remove","onClick","storeLocation","SearchOrgUnitLocationsInput","getCacheKey","getCacheObjectType","dataCacheType","createSearchOrgUnitLocationsInputFunc","inputData","getSearchOrgUnitLocationsAction","searchOrgUnitLocationsAsync","retailActionDataAction","createObservableDataAction","action"],"sourceRoot":""}