{"version":3,"file":"static/js/0cedb3128e99d4ed95ee.bundle.js","mappings":"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","sources":["webpack://bestseller.commerce.online/./src/actions/get-products-in-active-cart.ts?e00d","webpack://bestseller.commerce.online/./src/shared/functions/get-commercial-name.ts?6aba","webpack://bestseller.commerce.online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://bestseller.commerce.online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://bestseller.commerce.online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { FeatureState, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\r\nimport { Cart, CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport {\r\n createGetFeatureStateInput,\r\n getCustomer,\r\n GetCustomerInput,\r\n getFeatureState,\r\n getSimpleProducts,\r\n ProductInput,\r\n ArrayExtensions,\r\n QueryResultSettingsProxy\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getCommercialName } from '../shared/functions/get-commercial-name';\r\n\r\n/**\r\n * Input class for activeCartWithProducts data action.\r\n */\r\nexport class ActiveCartProductsInput implements IActionInput {\r\n public getCacheKey = () => 'ActiveCartProducts';\r\n\r\n public getCacheObjectType = () => 'ActiveCartProducts';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext) => {\r\n return new ActiveCartProductsInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a cart object based on the passed GetCartInput.\r\n * @param input\r\n * @param ctx\r\n */\r\nexport async function getActiveCartProductsAction(input: ActiveCartProductsInput, ctx: IActionContext): Promise {\r\n // If no cart ID is provided in input, we need to create a cart object\r\n if (!input) {\r\n throw new Error('[getActiveCartWithProducts]No valid Input was provided, failing');\r\n }\r\n\r\n const cartState = await getCartState(ctx);\r\n const cart = cartState.cart;\r\n\r\n const isQuantityLimitsFeatureIsOn: boolean = await isOrderQuantityLimitsFeatureEnabled(ctx);\r\n\r\n if (isQuantityLimitsFeatureIsOn) {\r\n return getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn(cart, ctx);\r\n }\r\n var products: SimpleProduct[];\r\n\r\n // If there are cart lines, make call to get products\r\n if (!cartState.hasInvoiceLine && cart && cart.CartLines && cart.CartLines.length > 0) {\r\n ctx.trace('Getting cart product information...');\r\n products = await getSimpleProducts(\r\n cart.CartLines.map(cartLine => {\r\n if (cartLine.ProductId) {\r\n return new ProductInput(\r\n cartLine.ProductId,\r\n ctx.requestContext.apiSettings,\r\n undefined,\r\n undefined,\r\n ctx.requestContext,\r\n cartLine.CatalogId\r\n );\r\n }\r\n return undefined;\r\n }).filter(Boolean),\r\n ctx\r\n )\r\n .then((products: SimpleProduct[]) => {\r\n if (products) {\r\n return products;\r\n }\r\n return [];\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(error.toString());\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug('[getActiveCartWithProducts]Unable to hydrate cart with product information');\r\n throw new Error('[getActiveCartWithProducts]Unable to hydrate cart with product information');\r\n });\r\n\r\n if (products) {\r\n if (ctx.requestContext.app.config?.useCommercialStyleName) {\r\n for (var product of products) {\r\n var cartLine = cart.CartLines.find(x => x.ProductId === product.RecordId);\r\n var attributes = await ProductsDataActions.getAttributeValuesAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n product.RecordId,\r\n Number(ctx.requestContext.channel?.RecordId),\r\n cartLine?.CatalogId ?? 0\r\n );\r\n product.Name = getCommercialName(attributes, product.Name, ctx.requestContext.app.config?.commercialStyleNameAttribute);\r\n }\r\n }\r\n return products;\r\n }\r\n }\r\n\r\n ctx.trace('[getActiveCartWithProducts]No Products Found in cart');\r\n return [];\r\n}\r\n\r\nexport const getActiveCartProductsActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-products-in-active-cart',\r\n action: >getActiveCartProductsAction,\r\n input: createInput\r\n});\r\nexport default getActiveCartProductsActionDataAction;\r\n\r\nasync function getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn(cart: Cart, ctx: IActionContext): Promise {\r\n const productIdsByWarehouseId: Map = new Map();\r\n let resultProducts: SimpleProduct[] = [];\r\n cart.CartLines?.forEach(cartLine =>\r\n productIdsByWarehouseId.has(cartLine.WarehouseId!)\r\n ? productIdsByWarehouseId.get(cartLine.WarehouseId!)?.push(cartLine)\r\n : productIdsByWarehouseId.set(cartLine.WarehouseId!, [cartLine])\r\n );\r\n return Promise.all(\r\n [...productIdsByWarehouseId].map(([entryWarehouseId, entryProductIds]) => {\r\n return getSimpleProducts(\r\n entryProductIds\r\n .map(cartLine => {\r\n if (cartLine.ProductId) {\r\n return new ProductInput(\r\n cartLine.ProductId,\r\n ctx.requestContext.apiSettings,\r\n undefined,\r\n entryWarehouseId,\r\n ctx.requestContext,\r\n cartLine.CatalogId\r\n );\r\n }\r\n return undefined;\r\n })\r\n .filter(Boolean),\r\n ctx\r\n ).then((products: SimpleProduct[]) => {\r\n if (products) {\r\n resultProducts = products.reduce((accum, product) => {\r\n if (product) {\r\n accum.push(product);\r\n }\r\n return accum;\r\n }, resultProducts);\r\n }\r\n });\r\n })\r\n ).then(() => resultProducts);\r\n}\r\n\r\nasync function isOrderQuantityLimitsFeatureEnabled(ctx: IActionContext): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = ctx.requestContext.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const featureStates = await getFeatureState(createGetFeatureStateInput(ctx), ctx);\r\n let isQuantityLimitsFeatureEnabledInHq = false;\r\n if (ArrayExtensions.hasElements(featureStates)) {\r\n isQuantityLimitsFeatureEnabledInHq =\r\n featureStates.find(\r\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n }\r\n\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return Promise.resolve(true);\r\n }\r\n\r\n return getCustomer(new GetCustomerInput(ctx.requestContext.apiSettings), ctx)\r\n .then(customerInfo => {\r\n return (\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\r\n );\r\n })\r\n .catch((error: Error) => {\r\n ctx.telemetry.warning(error.message);\r\n ctx.telemetry.debug('Unable to get customer info');\r\n return false;\r\n });\r\n}\r\n","/**\r\n * Centralised location for checkout generic data updates\r\n */\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * Gets the CommercialName from a list of attributes - returns the product name if no commercial name attribute is present\r\n * @param attributes\r\n * @param productName\r\n * @param commercialStyleNameAttribute\r\n * @returns\r\n */\r\nexport const getCommercialName = (\r\n attributes: AttributeValue[] = [],\r\n productName: string = '',\r\n commercialStyleNameAttribute: string = 'CommercialStyleName'\r\n): string => {\r\n var styleName = attributes.find(x => x.Name === commercialStyleNameAttribute);\r\n var productBrand = productName?.split(' ')[0] ?? '';\r\n if (styleName?.TextValue) {\r\n return `${productBrand} ${styleName?.TextValue}`;\r\n }\r\n\r\n return productName;\r\n};\r\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\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\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 } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\n return;\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"],"names":["ActiveCartProductsInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","async","getActiveCartProductsAction","input","ctx","Error","cartState","getCartState","cart","_ctx$requestContext$a3","defaultOrderQuantityLimitsFeatureConfig","requestContext","app","platform","enableDefaultOrderQuantityLimits","Promise","resolve","featureStates","getFeatureState","createGetFeatureStateInput","isQuantityLimitsFeatureEnabledInHq","_featureStates$find","ArrayExtensions","hasElements","find","featureState","Name","IsEnabled","getCustomer","GetCustomerInput","apiSettings","then","customerInfo","IsB2b","catch","error","telemetry","warning","message","debug","isOrderQuantityLimitsFeatureEnabled","_cart$CartLines","productIdsByWarehouseId","Map","resultProducts","CartLines","forEach","cartLine","_productIdsByWarehous","has","WarehouseId","get","push","set","all","map","_ref","entryWarehouseId","entryProductIds","getSimpleProducts","ProductId","ProductInput","undefined","CatalogId","filter","Boolean","products","reduce","accum","product","getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn","hasInvoiceLine","length","trace","toString","_ctx$requestContext$a","config","useCommercialStyleName","_ctx$requestContext$c","_cartLine$CatalogId","_cartLine","_ctx$requestContext$a2","x","RecordId","attributes","ProductsDataActions","callerContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","Number","channel","getCommercialName","commercialStyleNameAttribute","getActiveCartProductsActionDataAction","createObservableDataAction","id","action","inputData","_productName$split$","arguments","productName","styleName","productBrand","split","TextValue","getMiniCartData","miniCartData","exception","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","availableQuantity","productAvailabilites","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","deliveryOptions","CartIcon","React","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","LineId","removeCartLines","state","isCartValid","isQuantityLimitsFeatureEnabled","telemetryContent","getTelemetryObject","context","request","telemetryPageName","friendlyName","payload","getPayloadObject","TelemetryEvent","CheckOut","TelemetryConstant","Checkout","checkoutBySignInAttributes","getTelemetryAttributes","contentAction","etext","GuestCheckout","checkoutByGuestAttributes","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","actionContext","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","typeName","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","resources","guestCheckoutUrl","getUrlSync","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","showMiniCart","emailDeliveryModeCode","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","feature","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","cartVersion","Version","lastValidatedCartVersion","validateCartAsync","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","_featureStatuses$find2","featureStatuses","_this$props$context","_featureStatuses$find3","customerInformation","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","__decorate","observer","_renderDeliveryLocation","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","foundProductDeliveryOption","deliveryOption","delivery","DeliveryOptions","option","Code","DeliveryMode","Description","_renderStoreLocation","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","reactNodes","index","foundProductAvailability","_foundProductAvailabi","getProductByProductIdAndWarehouse","getProductByProductId","productAvailability","_productAvailability$","ProductAvailableQuantity","_assembleNode","foundProductDeliveryOptions","_product$Behavior","availableQuantityInStock","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","Behavior","MaximumQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","payLoad","RemoveCartItem","removeCartItemAttribute","productUrl","getProductUrlSync","MsDyn365","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","searchParams","Quantity","CartLineItemComponent","currentQuantity","isOutOfStock","key","isQuantityEditable","primaryImageUrl","PrimaryImageUrl","deliveryLocation","remove","onClick","storeLocation"],"sourceRoot":""}