{"version":3,"file":"static/js/7c1162429d589354eeb1.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/eve-search-result-container/components/add-to-cart.component.tsx?c795","webpack://Msdyn365.Commerce.Online/./src/modules/eve-search-result-container/components/product.component.tsx?65fc"],"sourcesContent":["import React from 'react';\r\nimport { ProductSearchResult, ProductType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\ninterface IAddToCartListComponentProps {\r\n product: ProductSearchResult;\r\n addToCart(id: string | number, caseQuantity: number, eachQuantity: number): void;\r\n addToCartButtonText: string;\r\n displayEaPrice: boolean;\r\n factor: number | undefined;\r\n displayCsPrice: boolean;\r\n csAvailable: number;\r\n eaAvailable: number;\r\n handleCartLineUpdate: (cl: { product: SimpleProduct; quantity: number }[]) => void;\r\n eaQty: number;\r\n csQty: number;\r\n}\r\n\r\nconst EA_UOM_STR = 'ea';\r\nconst CS_UOM_STR = 'cs';\r\n\r\nexport const AddToCartListComponent: React.FC = ({\r\n product,\r\n addToCart,\r\n addToCartButtonText,\r\n displayEaPrice,\r\n factor,\r\n displayCsPrice,\r\n csAvailable,\r\n eaAvailable,\r\n handleCartLineUpdate,\r\n csQty,\r\n eaQty\r\n}) => {\r\n if (!factor) {\r\n factor = 99;\r\n }\r\n const createProduct = (uom: string): SimpleProduct => {\r\n return {\r\n BasePrice: product.BasePrice || product.Price,\r\n AdjustedPrice: product.Price,\r\n Name: product.Name,\r\n RecordId: product.RecordId,\r\n ProductTypeValue: ProductType.Variant,\r\n Price: product.Price,\r\n DefaultUnitOfMeasure: uom,\r\n ItemId: product.ItemId\r\n };\r\n };\r\n\r\n const handleCaseQuantityChange = (e: React.ChangeEvent) => {\r\n const qty = Math.floor(Math.min(e.target.valueAsNumber, csAvailable));\r\n if (qty === csAvailable) {\r\n setQuantity([\r\n { qty, uom: CS_UOM_STR },\r\n { qty: Math.min(eaAvailable, eaQty), uom: EA_UOM_STR }\r\n ]);\r\n } else {\r\n setQuantity([{ qty, uom: CS_UOM_STR }]);\r\n }\r\n };\r\n\r\n const incrementCaseQuantity = () => {\r\n if (csAvailable === 0) {\r\n return;\r\n }\r\n if (csQty + 1 === csAvailable) {\r\n setQuantity([\r\n { qty: csQty + 1, uom: CS_UOM_STR },\r\n { qty: Math.min(eaQty, eaAvailable), uom: EA_UOM_STR }\r\n ]);\r\n } else {\r\n setQuantity([{ qty: csQty + 1, uom: CS_UOM_STR }]);\r\n }\r\n // }\r\n };\r\n const decrementCaseQuantity = () => {\r\n if (csQty !== 0) {\r\n setQuantity([{ qty: csQty - 1, uom: CS_UOM_STR }]);\r\n }\r\n };\r\n\r\n const handleEachQuantityChange = (e: React.ChangeEvent) => {\r\n setQuantity([\r\n { qty: csQty === csAvailable ? Math.min(e.target.valueAsNumber, eaAvailable) : e.target.valueAsNumber, uom: EA_UOM_STR }\r\n ]);\r\n };\r\n\r\n const setQuantity = (qtys: { qty: number; uom: string }[]) => {\r\n handleCartLineUpdate(\r\n qtys.map(q => {\r\n return { product: createProduct(q.uom), quantity: q.qty };\r\n })\r\n );\r\n };\r\n\r\n const handleEachQuantityOnBlur = () => {\r\n if (displayCsPrice) {\r\n let remaining: number = eaQty;\r\n if (factor && eaQty >= factor) {\r\n let cases: number = 0;\r\n while (remaining >= factor) {\r\n remaining -= factor;\r\n cases++;\r\n }\r\n const newTotalCases = csQty + cases;\r\n if (newTotalCases >= csAvailable) {\r\n setQuantity([\r\n { qty: csAvailable, uom: CS_UOM_STR },\r\n { qty: Math.min(eaAvailable, remaining), uom: EA_UOM_STR }\r\n ]);\r\n } else {\r\n setQuantity([\r\n { qty: csQty + cases, uom: CS_UOM_STR },\r\n { qty: remaining, uom: EA_UOM_STR }\r\n ]);\r\n }\r\n }\r\n }\r\n };\r\n const incrementEachQuantity = () => {\r\n if (displayCsPrice) {\r\n const _factor = factor || 1;\r\n if (csQty === csAvailable && eaQty === eaAvailable % _factor) {\r\n return;\r\n }\r\n if (eaQty < _factor - 1) {\r\n setQuantity([{ qty: eaQty + 1, uom: EA_UOM_STR }]);\r\n } else if (csQty !== csAvailable) {\r\n setQuantity([\r\n { qty: csQty + 1, uom: CS_UOM_STR },\r\n { qty: 0, uom: EA_UOM_STR }\r\n ]);\r\n }\r\n } else {\r\n setQuantity([{ qty: eaQty + 1, uom: EA_UOM_STR }]);\r\n }\r\n };\r\n const decrementEachQuantity = () => {\r\n if (eaQty !== 0) {\r\n setQuantity([{ qty: eaQty - 1, uom: EA_UOM_STR }]);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {displayEaPrice && displayCsPrice ? (\r\n <>\r\n
\r\n \r\n -\r\n \r\n \r\n \r\n +\r\n \r\n

Cs.

\r\n
\r\n
\r\n \r\n -\r\n \r\n \r\n \r\n +\r\n \r\n

Ea.

\r\n
\r\n \r\n ) : displayCsPrice ? (\r\n
\r\n \r\n -\r\n \r\n \r\n \r\n +\r\n \r\n

Cs.

\r\n
\r\n ) : (\r\n
\r\n \r\n -\r\n \r\n \r\n \r\n +\r\n \r\n

Ea.

\r\n
\r\n )}\r\n {/*{quantityError &&

Please enter a quantity

}*/}\r\n \r\n \r\n {/**/}\r\n \r\n \r\n );\r\n};\r\n","/*!\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 { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n IPriceComponentResources,\r\n ISwatchItem,\r\n PriceComponent,\r\n ProductComponentSwatchComponent,\r\n RatingComponent\r\n} from '@msdyn365-commerce/components';\r\nimport {\r\n getCatalogId,\r\n IAny,\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IGeneric,\r\n IGridSettings,\r\n IImageData,\r\n IImageSettings,\r\n Image,\r\n msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeSwatch, AttributeValue, ProductDimension, ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n convertDimensionTypeToProductDimensionType,\r\n Dictionary,\r\n DimensionTypes,\r\n generateImageUrl,\r\n getProductPageUrlSync,\r\n IDimensionsApp,\r\n StringExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n format,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport React, { useState } from 'react';\r\n\r\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult }> {\r\n className?: string;\r\n imageSettings?: IImageSettings;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n ratingAriaLabel?: string;\r\n ratingCountAriaLabel?: string;\r\n allowBack?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n quickViewButton?: React.ReactNode;\r\n productComparisonButton?: React.ReactNode;\r\n isEnabledProductDescription?: boolean;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n inventoryLabel?: string;\r\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\r\n swatchItemAriaLabel?: string;\r\n isListView?: boolean;\r\n quantity?: string;\r\n addToCartFunction?: (itemID: string | undefined, quantity: number) => void;\r\n EaPrice?: ProductPrice;\r\n}\r\n\r\nexport interface IProductComponent extends IComponent {}\r\n\r\nconst PriceComponentActions = {};\r\n\r\n/**\r\n * Gets the product page url from the default swatch selected.\r\n * @param productData - Product card to be rendered.\r\n * @returns The default color swatch selected if any.\r\n */\r\nfunction getDefaultColorSwatchSelected(productData?: ProductSearchResult): AttributeSwatch | null {\r\n if (!productData || !productData.AttributeValues) {\r\n return null;\r\n }\r\n\r\n const colorAttribute = productData.AttributeValues.find(\r\n attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === DimensionTypes.color\r\n );\r\n if (!colorAttribute) {\r\n return null;\r\n }\r\n\r\n const defaultSwatch = colorAttribute.Swatches?.find(item => item.IsDefault === true) ?? colorAttribute.Swatches?.[0];\r\n return defaultSwatch ?? null;\r\n}\r\n\r\n/**\r\n * Gets the product image from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\nfunction getProductImageUrlFromDefaultColorSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\r\n return productData?.PrimaryImageUrl;\r\n }\r\n const defaultSwatch = getDefaultColorSwatchSelected(productData);\r\n return defaultSwatch && ArrayExtensions.hasElements(defaultSwatch.ProductImageUrls)\r\n ? generateImageUrl(defaultSwatch.ProductImageUrls[0], coreContext.request.apiSettings)\r\n : productData?.PrimaryImageUrl;\r\n}\r\n\r\n/**\r\n * Updates the product url link to product details page.\r\n * @param productDetailsPageUrl - Product page url.\r\n * @param coreContext - Context of the module using the component.\r\n * @param queryString - Querystring to be added to the URL.\r\n * @returns The update product page url.\r\n */\r\n// function updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\r\n// const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\r\n// if (sourceUrl.search) {\r\n// sourceUrl.search += `&${queryString}`;\r\n// } else {\r\n// sourceUrl.search += queryString;\r\n// }\r\n//\r\n// const updatedUrl = new URL(sourceUrl.href);\r\n// return updatedUrl.pathname + sourceUrl.search;\r\n// }\r\n\r\n/**\r\n * Gets the react node for product unit of measure display.\r\n * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\nfunction renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\r\n if (!unitOfMeasure) {\r\n return null;\r\n }\r\n return (\r\n
\r\n {unitOfMeasure}\r\n
\r\n );\r\n}\r\n\r\n/**\r\n * Gets the react node for product availability.\r\n * @param inventoryAvailabilityLabel - The product information.\r\n * @returns The node representing markup for product availability.\r\n */\r\nfunction renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\r\n if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\r\n return null;\r\n }\r\n\r\n return
{inventoryAvailabilityLabel}
;\r\n}\r\n\r\n/**\r\n * Renders product comparison button similar to the quick view button.\r\n * @param productComparisonButton - React element of the button.\r\n * @param product - Current product info.\r\n * @param catalogId - Current catalog.\r\n * @returns React element for the specific product.\r\n */\r\nfunction renderProductComparisonButton(\r\n productComparisonButton: React.ReactNode,\r\n product: ProductSearchResult,\r\n catalogId: number\r\n): JSX.Element | undefined {\r\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\r\n}\r\n\r\n/**\r\n * Gets the product page url from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productUrl - Product page url for the product card.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\n// function getProductPageUrlFromDefaultSwatch(\r\n// coreContext: ICoreContext,\r\n// productUrl: string,\r\n// productData?: ProductSearchResult\r\n// ): string | undefined {\r\n// const siteContext = coreContext as ICoreContext;\r\n// const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n// if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\r\n// return productUrl;\r\n// }\r\n//\r\n// const defaultSwatch = getDefaultColorSwatchSelected(productData);\r\n// if (!defaultSwatch || !defaultSwatch.SwatchValue) {\r\n// return productUrl;\r\n// }\r\n//\r\n// const queryString = `color=${defaultSwatch.SwatchValue}`;\r\n// return updateProductUrl(productUrl, coreContext, queryString);\r\n// }\r\n\r\nconst ProductCard: React.FC = ({\r\n data,\r\n context,\r\n imageSettings,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText,\r\n ratingAriaLabel,\r\n ratingCountAriaLabel,\r\n allowBack,\r\n typeName,\r\n id,\r\n telemetryContent,\r\n quickViewButton,\r\n productComparisonButton,\r\n isEnabledProductDescription,\r\n isPriceMinMaxEnabled,\r\n priceResources,\r\n inventoryLabel,\r\n dimensionAvailabilities,\r\n swatchItemAriaLabel,\r\n isListView,\r\n EaPrice\r\n}) => {\r\n const product = data.product;\r\n const sanitizedProductName = product?.Name?.replace(/[^a-zA-Z0-9 ]/g, '') || '';\r\n const productUrl = getProductPageUrlSync(sanitizedProductName, product?.RecordId ?? Number.MIN_VALUE, context.actionContext, undefined);\r\n // if (allowBack) {\r\n // productUrl = updateProductUrl(productUrl, context, 'back=true');\r\n // }\r\n const productImageUrlFromSwatch = getProductImageUrlFromDefaultColorSwatch(context, product) ?? product?.PrimaryImageUrl;\r\n // const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\r\n const [productPageUrl] = useState(productUrl);\r\n const [productImageUrl, setProductImageUrl] = useState(productImageUrlFromSwatch);\r\n React.useEffect(() => {\r\n // setProductPageUrl(productUrl);\r\n setProductImageUrl(productImageUrlFromSwatch);\r\n }, [productUrl, productImageUrlFromSwatch]);\r\n const [selectedSwatchItems] = useState(new Dictionary());\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\r\n const enableStockCheck = context.app.config.enableStockCheck;\r\n\r\n /**\r\n * Updates the product page and Image url based on swatch selected.\r\n * @param coreContext - Context of the caller.\r\n * @param swatchItem - Dimension swatch selected.\r\n */\r\n const updatePageAndImageUrl = React.useCallback(\r\n (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\r\n const dimensionType = swatchItem.dimensionType;\r\n selectedSwatchItems.setValue(dimensionType, swatchItem);\r\n if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\r\n return;\r\n }\r\n // const queryString = `${dimensionType}=${swatchItem.value}`;\r\n // let productPageUrlWithSwatch = '';\r\n if (productPageUrl.includes(dimensionType)) {\r\n const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\r\n newUrl.searchParams.delete(dimensionType);\r\n // productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\r\n } else {\r\n // productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\r\n }\r\n // setProductPageUrl(productPageUrlWithSwatch);\r\n if (dimensionType === DimensionTypes.color) {\r\n const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\r\n ? swatchItem.productImageUrls[0]\r\n : undefined;\r\n const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\r\n setProductImageUrl(newImageUrl);\r\n }\r\n },\r\n [selectedSwatchItems, context, productPageUrl]\r\n );\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Checks if rendering the particular dimensions is allowed for product card.\r\n * @param dimensionType - Dimension to be displayed.\r\n * @returns Updates the state with new product page url.\r\n */\r\n function shouldDisplayDimension(dimensionType: string): boolean {\r\n const dimensionsContext = context as ICoreContext;\r\n const dimensionsToDisplayOnProductCard = dimensionsContext.app.config.dimensionsInProductCard;\r\n return (\r\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\r\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\r\n dimensionsToDisplayOnProductCard.includes(dimensionType.toLocaleLowerCase() as DimensionTypes)\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product dimension as swatch.\r\n * @param attributeValues - Attribute value property from product.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n function renderProductDimensions(attributeValues?: AttributeValue[]): JSX.Element | null {\r\n if (!attributeValues) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {attributeValues.map((item: AttributeValue) => {\r\n const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\r\n if (!shouldDisplayDimension(dimensionTypeValue)) {\r\n return null;\r\n }\r\n\r\n const siteContext = context as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n const dimensionType = dimensionTypeValue as DimensionTypes;\r\n const swatches =\r\n item.Swatches?.map(swatchItem => {\r\n return {\r\n itemId: `${item.RecordId ?? ''}-${dimensionTypeValue}-${swatchItem.SwatchValue ?? ''}`,\r\n value: swatchItem.SwatchValue ?? '',\r\n dimensionType,\r\n colorHexCode: swatchItem.SwatchColorHexCode,\r\n imageUrl: swatchItem.SwatchImageUrl,\r\n productImageUrls: swatchItem.ProductImageUrls,\r\n isDefault: swatchItem.IsDefault,\r\n swatchItemAriaLabel: swatchItemAriaLabel ? format(swatchItemAriaLabel, dimensionType) : '',\r\n isDisabled:\r\n enableStockCheck &&\r\n dimensionAvailabilities?.find(\r\n dimensionAvailability => dimensionAvailability.value === (swatchItem.SwatchValue ?? '')\r\n )?.isDisabled\r\n };\r\n }) ?? [];\r\n if (\r\n dimensionToPreSelectInProductCard !== DimensionTypes.none &&\r\n ArrayExtensions.hasElements(swatches) &&\r\n !swatches.some(swatch => swatch.isDefault) &&\r\n dimensionType === DimensionTypes.color\r\n ) {\r\n swatches[0].isDefault = true;\r\n }\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\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 const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map(swatches => {\r\n return {\r\n DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\r\n DimensionValue: {\r\n RecordId: 0,\r\n Value: swatches.value\r\n }\r\n };\r\n });\r\n return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\r\n }\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent!, '', product.RecordId.toString());\r\n\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- -- Do not need type check for appsettings\r\n const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\r\n if (isListView) {\r\n return (\r\n <>\r\n \r\n \r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n productImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context\r\n )}\r\n \r\n \r\n {product.ItemId}\r\n \r\n \r\n {product.Description}\r\n \r\n \r\n {renderProductAvailability(inventoryLabel)}\r\n \r\n
\r\n
\r\n {product.DefaultUnitOfMeasure?.toLowerCase() !== 'ea'\r\n ? renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n product.BasePrice,\r\n product.Price,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n )\r\n : renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n product.BasePrice,\r\n product.Price,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n )}\r\n
\r\n {product.DefaultUnitOfMeasure?.toLowerCase() !== 'ea' && EaPrice ? (\r\n
\r\n {renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n EaPrice.AdjustedPrice,\r\n EaPrice.AdjustedPrice,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n )}\r\n
\r\n ) : (\r\n <>\r\n )}\r\n
\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {isEnabledProductDescription ? (\r\n \r\n
\r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n productImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context\r\n )}\r\n
\r\n
\r\n
{product.Description}
\r\n {renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n product.BasePrice,\r\n product.Price,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText,\r\n isPriceMinMaxEnabled,\r\n priceResources\r\n )}\r\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\r\n {renderDescription(product.Description)}\r\n
\r\n
\r\n \r\n ) : (\r\n \r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n productImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context\r\n )}\r\n
\r\n
\r\n
{product.Name}
\r\n {renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n product.BasePrice,\r\n product.Price,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n )}\r\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\r\n
\r\n \r\n )}\r\n {renderProductDimensions(product.AttributeValues)}\r\n {!context.app.config.hideRating &&\r\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel, ratingCountAriaLabel)}\r\n {renderProductAvailability(inventoryLabel)}\r\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\r\n {productComparisonButton && renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))}\r\n \r\n );\r\n};\r\n\r\nfunction renderLabel(\r\n name?: string,\r\n price?: string,\r\n rating?: number,\r\n ratingAriaLabelText?: string,\r\n reviewCount?: number,\r\n ratingCountAriaLabelText?: string\r\n): string {\r\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\r\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\r\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\r\n }`;\r\n}\r\n\r\nfunction renderDescription(description?: string): JSX.Element | null {\r\n return

{description}

;\r\n}\r\n\r\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\r\n if (rating && ratingAriaLabel) {\r\n const roundedRating = rating.toFixed(2);\r\n return format(ratingAriaLabel || '', roundedRating, '5');\r\n }\r\n return '';\r\n}\r\n\r\nfunction getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\r\n if (reviewCount && ratingCountAriaLabelText) {\r\n return format(ratingCountAriaLabelText || '', reviewCount);\r\n }\r\n return '';\r\n}\r\n\r\nfunction renderRating(\r\n coreContext: ICoreContext,\r\n moduleTypeName: string,\r\n moduleId: string,\r\n avgRating?: number,\r\n totalRatings?: number,\r\n ariaLabel?: string,\r\n ratingCountAriaLabel?: string\r\n): JSX.Element | null {\r\n if (!avgRating) {\r\n return null;\r\n }\r\n\r\n const numberRatings = totalRatings?.toString() || undefined;\r\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\r\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction renderPrice(\r\n context: ICoreContext,\r\n typeName: string,\r\n id: string,\r\n basePrice?: number,\r\n adjustedPrice?: number,\r\n savingsText?: string,\r\n freePriceText?: string,\r\n originalPriceText?: string,\r\n currentPriceText?: string,\r\n isPriceMinMaxEnabled?: boolean,\r\n priceResources?: IPriceComponentResources\r\n): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n //AdjustedPrice: adjustedPrice, -- including this breaks strikethrough\r\n CustomerContextualPrice: adjustedPrice\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction renderProductPlacementImage(\r\n imageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n fallbackImageUrl?: string,\r\n altText?: string,\r\n context?: ICoreContext>\r\n): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !imageSettings) {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Site level config can be of any type.\r\n const contextConfig = context?.app.config?.placeholderImageName;\r\n const emptyPlaceHolderImage = contextConfig as string;\r\n let fallbackImageSource = fallbackImageUrl;\r\n if (emptyPlaceHolderImage && fallbackImageUrl) {\r\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\r\n }\r\n const img: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : '',\r\n fallBackSrc: fallbackImageSource\r\n };\r\n const imageProps = {\r\n gridSettings,\r\n imageSettings\r\n };\r\n imageProps.imageSettings.cropFocalRegion = true;\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n IProductComponent\r\n>('Product', { component: ProductCard, ...PriceComponentActions });\r\n\r\nexport default ProductComponent;\r\n"],"names":["EA_UOM_STR","CS_UOM_STR","AddToCartListComponent","_ref","product","addToCart","addToCartButtonText","displayEaPrice","factor","displayCsPrice","csAvailable","eaAvailable","handleCartLineUpdate","csQty","eaQty","handleCaseQuantityChange","e","qty","Math","floor","min","target","valueAsNumber","setQuantity","uom","incrementCaseQuantity","decrementCaseQuantity","qtys","map","q","BasePrice","Price","AdjustedPrice","Name","RecordId","ProductTypeValue","ProductType","Variant","DefaultUnitOfMeasure","ItemId","quantity","incrementEachQuantity","_factor","decrementEachQuantity","React","className","type","onClick","disabled","value","onChange","max","onBlur","handleEachQuantityOnBlur","remaining","cases","getProductImageUrlFromDefaultColorSwatch","coreContext","productData","app","config","dimensionToPreSelectInProductCard","DimensionTypes","none","PrimaryImageUrl","defaultSwatch","_colorAttribute$Swatc","_colorAttribute$Swatc2","_colorAttribute$Swatc3","AttributeValues","colorAttribute","find","attributeValue","_attributeValue$KeyNa","KeyName","toLocaleLowerCase","color","Swatches","item","IsDefault","getDefaultColorSwatchSelected","ArrayExtensions","hasElements","ProductImageUrls","generateImageUrl","request","apiSettings","renderProductUnitOfMeasure","unitOfMeasure","renderProductAvailability","inventoryAvailabilityLabel","renderLabel","name","price","rating","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","ratingAriaLabel","roundedRating","toFixed","format","renderPrice","context","typeName","id","basePrice","adjustedPrice","savingsText","freePriceText","originalPriceText","currentPriceText","isPriceMinMaxEnabled","priceResources","CustomerContextualPrice","PriceComponent","data","renderProductPlacementImage","imageSettings","gridSettings","imageUrl","fallbackImageUrl","altText","_context$app$config","contextConfig","placeholderImageName","fallbackImageSource","img","src","fallBackSrc","imageProps","cropFocalRegion","Image","Object","assign","requestContext","actionContext","loadFailureBehavior","bypassHideOnFailure","ProductComponent","msdyn365Commerce","createComponentOverride","_objectSpread","component","_product$Name","_product$RecordId","_getProductImageUrlFr","ratingCountAriaLabel","allowBack","telemetryContent","quickViewButton","productComparisonButton","isEnabledProductDescription","inventoryLabel","dimensionAvailabilities","swatchItemAriaLabel","isListView","EaPrice","sanitizedProductName","replace","productUrl","getProductPageUrlSync","Number","MIN_VALUE","undefined","productImageUrlFromSwatch","productPageUrl","useState","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","enableStockCheck","updatePageAndImageUrl","swatchItem","dimensionType","setValue","StringExtensions","isNullOrWhitespace","includes","URL","baseUrl","searchParams","delete","swatchProductImageUrl","productImageUrls","newImageUrl","payLoad","getPayloadObject","toString","attribute","getTelemetryAttributes","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","_product$DefaultUnitO","_product$DefaultUnitO2","attributeValues","description","href","onTelemetryClick","Description","toLowerCase","cultureFormatter","formatCurrency","AverageRating","TotalRatings","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","dimensionTypeValue","dimensionsToDisplayOnProductCard","dimensionsInProductCard","shouldDisplayDimension","swatches","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","_dimensionAvailabilit","itemId","SwatchValue","colorHexCode","SwatchColorHexCode","SwatchImageUrl","isDefault","isDisabled","dimensionAvailability","_swatchItem$SwatchVal3","some","swatch","ProductComponentSwatchComponent","onSelectDimension","key","hideRating","moduleTypeName","moduleId","avgRating","totalRatings","ariaLabel","numberRatings","RatingComponent","ratingCount","readOnly","renderRating","quickview","selectedDimensions","getValues","DimensionTypeValue","convertDimensionTypeToProductDimensionType","DimensionValue","Value","selectedProductId","renderQuickView","catalogId","renderProductComparisonButton","getCatalogId"],"sourceRoot":""}